From 6a166198cccd6b037a665505995f34e5666651c6 Mon Sep 17 00:00:00 2001 From: Isaac Buckton Date: Tue, 6 Jan 2026 08:20:41 +1100 Subject: [PATCH 01/45] Admin console v2 --- .gitignore | 37 +- .prettierignore | 4 + .prettierrc | 1 + .vscode/settings.json | 11 + README.md | 295 + components.json | 21 + devbox.json | 15 + index.html | 16 + package.json | 124 +- pnpm-lock.yaml | 11685 ++++++++-------- pnpm-workspace.yaml | 2 + public/apple-touch-icon.png | Bin 0 -> 27288 bytes public/favicon.ico | Bin 0 -> 4022 bytes public/icon.svg | 22 + public/logo-emblem.svg | 11 + public/logo.svg | 36 + public/mockServiceWorker.js | 349 + resources/openapi.json | 9860 ++++++++++++- src/App.tsx | 47 + src/api/api-client.ts | 24 + src/api/query-client.ts | 33 + src/api/spec.d.ts | 10330 ++++++++++++++ .../add-user-dialog/add-user-dialog.tsx | 145 + .../groups/add-user-dialog/selected-users.tsx | 107 + .../groups/add-user-dialog/user-search.tsx | 113 + src/components/groups/create-group-dialog.tsx | 137 + src/components/groups/group-details-card.tsx | 61 + .../groups/group-table-row-actions.tsx | 77 + src/components/groups/group-table.tsx | 214 + src/components/groups/group-users-table.tsx | 204 + src/components/groups/hooks.ts | 98 + src/components/groups/models.ts | 24 + src/components/login-form.tsx | 130 + src/components/logo.tsx | 35 + src/components/navigation/breadcrumbs.tsx | 59 + src/components/navigation/nav-main.tsx | 100 + src/components/navigation/nav-sidebar.tsx | 125 + src/components/navigation/nav-tree.tsx | 103 + src/components/navigation/nav-user.tsx | 125 + src/components/navigation/server-switcher.tsx | 108 + src/components/ui/avatar.tsx | 70 + src/components/ui/badge.tsx | 63 + src/components/ui/breadcrumb.tsx | 126 + src/components/ui/button.tsx | 79 + src/components/ui/card.tsx | 109 + src/components/ui/checkbox.tsx | 47 + src/components/ui/collapsible.tsx | 50 + src/components/ui/command.tsx | 199 + src/components/ui/data-table.tsx | 95 + src/components/ui/dialog.tsx | 158 + src/components/ui/dropdown-menu.tsx | 272 + src/components/ui/empty.tsx | 121 + src/components/ui/field.tsx | 263 + src/components/ui/input.tsx | 38 + src/components/ui/label.tsx | 39 + src/components/ui/popover.tsx | 63 + src/components/ui/progress.tsx | 46 + src/components/ui/scroll-area.tsx | 73 + src/components/ui/separator.tsx | 45 + src/components/ui/sheet.tsx | 156 + src/components/ui/sidebar.tsx | 741 + src/components/ui/skeleton.tsx | 30 + src/components/ui/sonner.tsx | 55 + src/components/ui/table.tsx | 131 + src/components/ui/tooltip.tsx | 76 + .../add-group-dialog/add-group-dialog.tsx | 136 + .../users/add-group-dialog/group-search.tsx | 131 + src/components/users/create-user-dialog.tsx | 213 + src/components/users/hooks.ts | 112 + src/components/users/models.ts | 30 + .../users/reset-user-password-dialog.tsx | 188 + src/components/users/user-attributes-card.tsx | 56 + src/components/users/user-groups-card.tsx | 100 + .../users/user-table-row-actions.tsx | 96 + src/components/users/user-table.tsx | 330 +- src/hooks/use-breadcrumbs.ts | 73 + src/hooks/use-debounced-value.ts | 29 + src/hooks/use-is-route-active.ts | 27 + src/hooks/use-mobile.ts | 38 + src/hooks/useAuth.ts | 30 + src/lib/auth.ts | 67 + src/lib/utils.ts | 23 + src/main.tsx | 39 + src/mocks/browser.ts | 24 + src/routeTree.gen.ts | 492 + src/routes/__root.tsx | 47 + .../_authenticated/admin/groups/$groupId.tsx | 43 + .../_authenticated/admin/groups/index.tsx | 34 + .../_authenticated/admin/groups/route.tsx | 23 + src/routes/_authenticated/admin/index.tsx | 26 + src/routes/_authenticated/admin/route.tsx | 23 + .../_authenticated/admin/users/$userId.tsx | 65 + .../_authenticated/admin/users/index.tsx | 34 + .../_authenticated/admin/users/route.tsx | 23 + .../connections/$connectionId.tsx | 27 + .../_authenticated/connections/index.tsx | 27 + .../_authenticated/connections/route.tsx | 23 + src/routes/_authenticated/dashboard/index.tsx | 9 + src/routes/_authenticated/namespaces/$.tsx | 27 + .../_authenticated/namespaces/index.tsx | 31 + .../_authenticated/namespaces/route.tsx | 23 + src/routes/_authenticated/route.tsx | 62 + src/routes/index.tsx | 24 + src/routes/login.tsx | 66 + src/styles.css | 155 + src/theme/tokens.css | 43 + tsconfig.json | 41 +- vite.config.ts | 34 + 108 files changed, 35214 insertions(+), 5963 deletions(-) create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 components.json create mode 100644 devbox.json create mode 100644 index.html create mode 100644 pnpm-workspace.yaml create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon.ico create mode 100644 public/icon.svg create mode 100644 public/logo-emblem.svg create mode 100644 public/logo.svg create mode 100644 public/mockServiceWorker.js create mode 100644 src/App.tsx create mode 100644 src/api/api-client.ts create mode 100644 src/api/query-client.ts create mode 100644 src/api/spec.d.ts create mode 100644 src/components/groups/add-user-dialog/add-user-dialog.tsx create mode 100644 src/components/groups/add-user-dialog/selected-users.tsx create mode 100644 src/components/groups/add-user-dialog/user-search.tsx create mode 100644 src/components/groups/create-group-dialog.tsx create mode 100644 src/components/groups/group-details-card.tsx create mode 100644 src/components/groups/group-table-row-actions.tsx create mode 100644 src/components/groups/group-table.tsx create mode 100644 src/components/groups/group-users-table.tsx create mode 100644 src/components/groups/hooks.ts create mode 100644 src/components/groups/models.ts create mode 100644 src/components/login-form.tsx create mode 100644 src/components/logo.tsx create mode 100644 src/components/navigation/breadcrumbs.tsx create mode 100644 src/components/navigation/nav-main.tsx create mode 100644 src/components/navigation/nav-sidebar.tsx create mode 100644 src/components/navigation/nav-tree.tsx create mode 100644 src/components/navigation/nav-user.tsx create mode 100644 src/components/navigation/server-switcher.tsx create mode 100644 src/components/ui/avatar.tsx create mode 100644 src/components/ui/badge.tsx create mode 100644 src/components/ui/breadcrumb.tsx create mode 100644 src/components/ui/button.tsx create mode 100644 src/components/ui/card.tsx create mode 100644 src/components/ui/checkbox.tsx create mode 100644 src/components/ui/collapsible.tsx create mode 100644 src/components/ui/command.tsx create mode 100644 src/components/ui/data-table.tsx create mode 100644 src/components/ui/dialog.tsx create mode 100644 src/components/ui/dropdown-menu.tsx create mode 100644 src/components/ui/empty.tsx create mode 100644 src/components/ui/field.tsx create mode 100644 src/components/ui/input.tsx create mode 100644 src/components/ui/label.tsx create mode 100644 src/components/ui/popover.tsx create mode 100644 src/components/ui/progress.tsx create mode 100644 src/components/ui/scroll-area.tsx create mode 100644 src/components/ui/separator.tsx create mode 100644 src/components/ui/sheet.tsx create mode 100644 src/components/ui/sidebar.tsx create mode 100644 src/components/ui/skeleton.tsx create mode 100644 src/components/ui/sonner.tsx create mode 100644 src/components/ui/table.tsx create mode 100644 src/components/ui/tooltip.tsx create mode 100644 src/components/users/add-group-dialog/add-group-dialog.tsx create mode 100644 src/components/users/add-group-dialog/group-search.tsx create mode 100644 src/components/users/create-user-dialog.tsx create mode 100644 src/components/users/hooks.ts create mode 100644 src/components/users/models.ts create mode 100644 src/components/users/reset-user-password-dialog.tsx create mode 100644 src/components/users/user-attributes-card.tsx create mode 100644 src/components/users/user-groups-card.tsx create mode 100644 src/components/users/user-table-row-actions.tsx create mode 100644 src/hooks/use-breadcrumbs.ts create mode 100644 src/hooks/use-debounced-value.ts create mode 100644 src/hooks/use-is-route-active.ts create mode 100644 src/hooks/use-mobile.ts create mode 100644 src/hooks/useAuth.ts create mode 100644 src/lib/auth.ts create mode 100644 src/lib/utils.ts create mode 100644 src/main.tsx create mode 100644 src/mocks/browser.ts create mode 100644 src/routeTree.gen.ts create mode 100644 src/routes/__root.tsx create mode 100644 src/routes/_authenticated/admin/groups/$groupId.tsx create mode 100644 src/routes/_authenticated/admin/groups/index.tsx create mode 100644 src/routes/_authenticated/admin/groups/route.tsx create mode 100644 src/routes/_authenticated/admin/index.tsx create mode 100644 src/routes/_authenticated/admin/route.tsx create mode 100644 src/routes/_authenticated/admin/users/$userId.tsx create mode 100644 src/routes/_authenticated/admin/users/index.tsx create mode 100644 src/routes/_authenticated/admin/users/route.tsx create mode 100644 src/routes/_authenticated/connections/$connectionId.tsx create mode 100644 src/routes/_authenticated/connections/index.tsx create mode 100644 src/routes/_authenticated/connections/route.tsx create mode 100644 src/routes/_authenticated/dashboard/index.tsx create mode 100644 src/routes/_authenticated/namespaces/$.tsx create mode 100644 src/routes/_authenticated/namespaces/index.tsx create mode 100644 src/routes/_authenticated/namespaces/route.tsx create mode 100644 src/routes/_authenticated/route.tsx create mode 100644 src/routes/index.tsx create mode 100644 src/routes/login.tsx create mode 100644 src/styles.css create mode 100644 src/theme/tokens.css create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore index 447be36..f11d3f5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,30 +1,13 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build -admin -.next - -# misc +node_modules .DS_Store -.eslintcache +dist +dist-ssr +*.local +count.txt +.env .idea -/.env -/.env.local -/.env.development.local -/.env.test.local -/.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* +.vscode +.nitro +.tanstack +.wrangler -/src/generated diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..2a3fcce --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +# Ignore artifacts: +build +coverage +pnpm-lock.yaml \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/.prettierrc @@ -0,0 +1 @@ +{} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..00b5278 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "files.watcherExclude": { + "**/routeTree.gen.ts": true + }, + "search.exclude": { + "**/routeTree.gen.ts": true + }, + "files.readonlyInclude": { + "**/routeTree.gen.ts": true + } +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..3fae09b --- /dev/null +++ b/README.md @@ -0,0 +1,295 @@ +Welcome to your new TanStack app! + +# Getting Started + +To run this application: + +```bash +pnpm install +pnpm start +``` + +# Building For Production + +To build this application for production: + +```bash +pnpm build +``` + +## Testing + +This project uses [Vitest](https://vitest.dev/) for testing. You can run the tests with: + +```bash +pnpm test +``` + +## Styling + +This project uses [Tailwind CSS](https://tailwindcss.com/) for styling. + +## Shadcn + +Add components using the latest version of [Shadcn](https://ui.shadcn.com/). + +```bash +pnpm dlx shadcn@latest add button +``` + +## Routing + +This project uses [TanStack Router](https://tanstack.com/router). The initial setup is a file based router. Which means that the routes are managed as files in `src/routes`. + +### Adding A Route + +To add a new route to your application just add another a new file in the `./src/routes` directory. + +TanStack will automatically generate the content of the route file for you. + +Now that you have two routes you can use a `Link` component to navigate between them. + +### Adding Links + +To use SPA (Single Page Application) navigation you will need to import the `Link` component from `@tanstack/react-router`. + +```tsx +import { Link } from "@tanstack/react-router"; +``` + +Then anywhere in your JSX you can use it like so: + +```tsx +About +``` + +This will create a link that will navigate to the `/about` route. + +More information on the `Link` component can be found in the [Link documentation](https://tanstack.com/router/v1/docs/framework/react/api/router/linkComponent). + +### Using A Layout + +In the File Based Routing setup the layout is located in `src/routes/__root.tsx`. Anything you add to the root route will appear in all the routes. The route content will appear in the JSX where you use the `` component. + +Here is an example layout that includes a header: + +```tsx +import { Outlet, createRootRoute } from "@tanstack/react-router"; +import { TanStackRouterDevtools } from "@tanstack/react-router-devtools"; + +import { Link } from "@tanstack/react-router"; + +export const Route = createRootRoute({ + component: () => ( + <> +
+ +
+ + + + ), +}); +``` + +The `` component is not required so you can remove it if you don't want it in your layout. + +More information on layouts can be found in the [Layouts documentation](https://tanstack.com/router/latest/docs/framework/react/guide/routing-concepts#layouts). + +## Data Fetching + +There are multiple ways to fetch data in your application. You can use TanStack Query to fetch data from a server. But you can also use the `loader` functionality built into TanStack Router to load the data for a route before it's rendered. + +For example: + +```tsx +const peopleRoute = createRoute({ + getParentRoute: () => rootRoute, + path: "/people", + loader: async () => { + const response = await fetch("https://swapi.dev/api/people"); + return response.json() as Promise<{ + results: { + name: string; + }[]; + }>; + }, + component: () => { + const data = peopleRoute.useLoaderData(); + return ( +
    + {data.results.map((person) => ( +
  • {person.name}
  • + ))} +
+ ); + }, +}); +``` + +Loaders simplify your data fetching logic dramatically. Check out more information in the [Loader documentation](https://tanstack.com/router/latest/docs/framework/react/guide/data-loading#loader-parameters). + +### React-Query + +React-Query is an excellent addition or alternative to route loading and integrating it into you application is a breeze. + +First add your dependencies: + +```bash +pnpm add @tanstack/react-query @tanstack/react-query-devtools +``` + +Next we'll need to create a query client and provider. We recommend putting those in `main.tsx`. + +```tsx +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; + +// ... + +const queryClient = new QueryClient(); + +// ... + +if (!rootElement.innerHTML) { + const root = ReactDOM.createRoot(rootElement); + + root.render( + + + , + ); +} +``` + +You can also add TanStack Query Devtools to the root route (optional). + +```tsx +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; + +const rootRoute = createRootRoute({ + component: () => ( + <> + + + + + ), +}); +``` + +Now you can use `useQuery` to fetch your data. + +```tsx +import { useQuery } from "@tanstack/react-query"; + +import "./App.css"; + +function App() { + const { data } = useQuery({ + queryKey: ["people"], + queryFn: () => + fetch("https://swapi.dev/api/people") + .then((res) => res.json()) + .then((data) => data.results as { name: string }[]), + initialData: [], + }); + + return ( +
+
    + {data.map((person) => ( +
  • {person.name}
  • + ))} +
+
+ ); +} + +export default App; +``` + +You can find out everything you need to know on how to use React-Query in the [React-Query documentation](https://tanstack.com/query/latest/docs/framework/react/overview). + +## State Management + +Another common requirement for React applications is state management. There are many options for state management in React. TanStack Store provides a great starting point for your project. + +First you need to add TanStack Store as a dependency: + +```bash +pnpm add @tanstack/store +``` + +Now let's create a simple counter in the `src/App.tsx` file as a demonstration. + +```tsx +import { useStore } from "@tanstack/react-store"; +import { Store } from "@tanstack/store"; +import "./App.css"; + +const countStore = new Store(0); + +function App() { + const count = useStore(countStore); + return ( +
+ +
+ ); +} + +export default App; +``` + +One of the many nice features of TanStack Store is the ability to derive state from other state. That derived state will update when the base state updates. + +Let's check this out by doubling the count using derived state. + +```tsx +import { useStore } from "@tanstack/react-store"; +import { Store, Derived } from "@tanstack/store"; +import "./App.css"; + +const countStore = new Store(0); + +const doubledStore = new Derived({ + fn: () => countStore.state * 2, + deps: [countStore], +}); +doubledStore.mount(); + +function App() { + const count = useStore(countStore); + const doubledCount = useStore(doubledStore); + + return ( +
+ +
Doubled - {doubledCount}
+
+ ); +} + +export default App; +``` + +We use the `Derived` class to create a new store that is derived from another store. The `Derived` class has a `mount` method that will start the derived store updating. + +Once we've created the derived store we can use it in the `App` component just like we would any other store using the `useStore` hook. + +You can find out everything you need to know on how to use TanStack Store in the [TanStack Store documentation](https://tanstack.com/store/latest). + +# Demo files + +Files prefixed with `demo` can be safely deleted. They are there to provide a starting point for you to play around with the features you've installed. + +# Learn More + +You can learn more about all of the offerings from TanStack in the [TanStack documentation](https://tanstack.com). diff --git a/components.json b/components.json new file mode 100644 index 0000000..58bb3a2 --- /dev/null +++ b/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/styles.css", + "baseColor": "zinc", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} diff --git a/devbox.json b/devbox.json new file mode 100644 index 0000000..b632b1b --- /dev/null +++ b/devbox.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.16.0/.schema/devbox.schema.json", + "packages": [], + "shell": { + "init_hook": [ + "echo 'Welcome to devbox!' > /dev/null" + ], + "scripts": { + "test": [ + "echo \"Error: no test specified\" && exit 1" + ] + } + } + } + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..5d50477 --- /dev/null +++ b/index.html @@ -0,0 +1,16 @@ + + + + + + + + + + Maps Messaging + + +
+ + + diff --git a/package.json b/package.json index 5856d85..8b8ad21 100644 --- a/package.json +++ b/package.json @@ -6,71 +6,71 @@ "homepage": "/admin", "private": false, "scripts": { - "dev": "next dev", - "build": "next build", - "lint": "next lint", - "lint:fix": "next lint --fix", - "typecheck": "tsc --noEmit", - "format:write": "prettier --write \"**/*.{js,jsx,mjs,ts,tsx,mdx}\" --cache", - "format:check": "prettier --check \"**/*.{js,jsx,mjs,ts,tsx,mdx}\" --cache", - "generate": "orval --config orval.config.js && npm run update-client", - "update": "npm update", - "audit": "npm audit fix --force", - "update-client": "node scripts/updateGeneratedClient.js", - "redocly ": "redocly lint resources/openapi.json" + "dev": "vite --port 3000", + "build": "vite build && tsc", + "preview": "vite preview", + "test": "vitest run", + "gen-api": "openapi-typescript ./resources/openapi.json -o ./src/api/spec.d.ts" }, "dependencies": { - "@emotion/cache": "11.11.0", - "@emotion/react": "11.11.4", - "@emotion/server": "11.11.0", - "@emotion/styled": "11.11.0", - "@fontsource/inter": "5.0.17", - "@fontsource/plus-jakarta-sans": "5.0.19", - "@fontsource/roboto-mono": "5.0.17", - "@hookform/resolvers": "3.3.4", - "@mui/icons-material": "^5.15.15", - "@mui/lab": "5.0.0-alpha.167", - "@mui/material": "5.15.14", - "@mui/system": "5.15.14", - "@mui/utils": "5.15.14", - "@mui/x-date-pickers": "6.19.6", - "@mui/x-tree-view": "^7.2.0", - "@phosphor-icons/react": "2.1.5", - "@tanstack/react-query": "5.29.0", - "ace-builds": "^1.33.1", - "apexcharts": "3.46.0", - "dayjs": "1.11.10", - "formik": "^2.4.6", - "next": "14.2.10", - "react": "18.2.0", - "react-ace": "^11.0.1", - "react-apexcharts": "1.4.1", - "react-axios": "2.0.6", - "react-dom": "18.2.0", - "react-hook-form": "7.51.0", - "react-hot-toast": "^2.4.1", - "yup": "^1.4.0", - "zod": "3.22.4" + "@radix-ui/react-avatar": "^1.1.11", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-tooltip": "^1.2.8", + "@tailwindcss/vite": "^4.0.6", + "@tanstack/react-devtools": "^0.8.4", + "@tanstack/react-form": "^1.27.7", + "@tanstack/react-query": "^5.90.14", + "@tanstack/react-query-devtools": "^5.91.2", + "@tanstack/react-router": "^1.132.0", + "@tanstack/react-router-devtools": "^1.132.0", + "@tanstack/react-table": "^8.21.3", + "@tanstack/router-plugin": "^1.132.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "lucide-react": "0.561.0", + "next-themes": "^0.4.6", + "openapi-fetch": "^0.15.0", + "openapi-react-query": "^0.5.1", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "sonner": "^2.0.7", + "tailwind-merge": "^3.0.2", + "tailwindcss": "^4.0.6", + "tw-animate-css": "^1.3.6", + "zod": "^4.2.1" }, "devDependencies": { - "@ianvs/prettier-plugin-sort-imports": "4.1.1", - "@redocly/cli": "1.34.1", - "@testing-library/jest-dom": "6.4.2", - "@testing-library/react": "14.2.1", - "@types/jest": "29.5.12", - "@types/mapbox-gl": "3.1.0", - "@types/node": "20.11.25", - "@types/react": "18.2.64", - "@types/react-dom": "18.2.21", - "@types/react-syntax-highlighter": "15.5.11", - "@vercel/style-guide": "6.0.0", - "eslint": "8.57.0", - "eslint-config-next": "14.1.3", - "eslint-config-prettier": "9.1.0", - "jest": "29.7.0", - "jest-environment-jsdom": "29.7.0", - "orval": "^6.19.1", - "prettier": "3.2.5", - "typescript": "5.4.2" + "@msw/source": "^0.6.0", + "@tanstack/devtools-vite": "^0.3.11", + "@testing-library/dom": "^10.4.0", + "@testing-library/react": "^16.2.0", + "@types/node": "^25.0.2", + "@types/react": "^19.2.0", + "@types/react-dom": "^19.2.0", + "@vitejs/plugin-react": "^5.0.4", + "jsdom": "^27.0.0", + "msw": "^2.12.7", + "openapi-typescript": "^7.10.1", + "prettier": "3.7.4", + "typescript": "^5.7.2", + "vite": "^7.1.7", + "vitest": "^4.0.15", + "web-vitals": "^5.1.0" + }, + "packageManager": "pnpm@10.27.0+sha512.72d699da16b1179c14ba9e64dc71c9a40988cbdc65c264cb0e489db7de917f20dcf4d64d8723625f2969ba52d4b7e2a1170682d9ac2a5dcaeaab732b7e16f04a", + "msw": { + "workerDirectory": [ + "public" + ] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a8aeefd..862bdac 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,6525 +1,6734 @@ -lockfileVersion: '6.0' +lockfileVersion: "9.0" settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@emotion/cache': - specifier: 11.11.0 - version: 11.11.0 - '@emotion/react': - specifier: 11.11.4 - version: 11.11.4(@types/react@18.2.64)(react@18.2.0) - '@emotion/server': - specifier: 11.11.0 - version: 11.11.0 - '@emotion/styled': - specifier: 11.11.0 - version: 11.11.0(@emotion/react@11.11.4)(@types/react@18.2.64)(react@18.2.0) - '@fontsource/inter': - specifier: 5.0.17 - version: 5.0.17 - '@fontsource/plus-jakarta-sans': - specifier: 5.0.19 - version: 5.0.19 - '@fontsource/roboto-mono': - specifier: 5.0.17 - version: 5.0.17 - '@hookform/resolvers': - specifier: 3.3.4 - version: 3.3.4(react-hook-form@7.51.0) - '@mui/lab': - specifier: 5.0.0-alpha.167 - version: 5.0.0-alpha.167(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@mui/material@5.15.12)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0) - '@mui/material': - specifier: 5.15.12 - version: 5.15.12(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0) - '@mui/system': - specifier: 5.15.12 - version: 5.15.12(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.64)(react@18.2.0) - '@mui/utils': - specifier: 5.15.12 - version: 5.15.12(@types/react@18.2.64)(react@18.2.0) - '@mui/x-date-pickers': - specifier: 6.19.6 - version: 6.19.6(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@mui/material@5.15.12)(@mui/system@5.15.12)(@types/react@18.2.64)(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0) - '@phosphor-icons/react': - specifier: 2.0.15 - version: 2.0.15(react-dom@18.2.0)(react@18.2.0) - apexcharts: - specifier: 3.46.0 - version: 3.46.0 - dayjs: - specifier: 1.11.10 - version: 1.11.10 - next: - specifier: 14.1.3 - version: 14.1.3(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0) - react: - specifier: 18.2.0 - version: 18.2.0 - react-apexcharts: - specifier: 1.4.1 - version: 1.4.1(apexcharts@3.46.0)(react@18.2.0) - react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) - react-hook-form: - specifier: 7.51.0 - version: 7.51.0(react@18.2.0) - zod: - specifier: 3.22.4 - version: 3.22.4 - -devDependencies: - '@ianvs/prettier-plugin-sort-imports': - specifier: 4.1.1 - version: 4.1.1(prettier@3.2.5) - '@testing-library/jest-dom': - specifier: 6.4.2 - version: 6.4.2(@types/jest@29.5.12)(jest@29.7.0) - '@testing-library/react': - specifier: 14.2.1 - version: 14.2.1(react-dom@18.2.0)(react@18.2.0) - '@types/jest': - specifier: 29.5.12 - version: 29.5.12 - '@types/mapbox-gl': - specifier: 3.1.0 - version: 3.1.0 - '@types/node': - specifier: 20.11.25 - version: 20.11.25 - '@types/react': - specifier: 18.2.64 - version: 18.2.64 - '@types/react-dom': - specifier: 18.2.21 - version: 18.2.21 - '@types/react-syntax-highlighter': - specifier: 15.5.11 - version: 15.5.11 - '@vercel/style-guide': - specifier: 6.0.0 - version: 6.0.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.2) - eslint: - specifier: 8.57.0 - version: 8.57.0 - eslint-config-next: - specifier: 14.1.3 - version: 14.1.3(eslint@8.57.0)(typescript@5.4.2) - eslint-config-prettier: - specifier: 9.1.0 - version: 9.1.0(eslint@8.57.0) - jest: - specifier: 29.7.0 - version: 29.7.0(@types/node@20.11.25) - jest-environment-jsdom: - specifier: 29.7.0 - version: 29.7.0 - prettier: - specifier: 3.2.5 - version: 3.2.5 - typescript: - specifier: 5.4.2 - version: 5.4.2 +importers: + .: + dependencies: + "@radix-ui/react-avatar": + specifier: ^1.1.11 + version: 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-checkbox": + specifier: ^1.3.3 + version: 1.3.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-collapsible": + specifier: ^1.1.12 + version: 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-dialog": + specifier: ^1.1.15 + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-dropdown-menu": + specifier: ^2.1.16 + version: 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-label": + specifier: ^2.1.8 + version: 2.1.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-popover": + specifier: ^1.1.15 + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-progress": + specifier: ^1.1.8 + version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-scroll-area": + specifier: ^1.2.10 + version: 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-separator": + specifier: ^1.1.8 + version: 1.1.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-slot": + specifier: ^1.2.4 + version: 1.2.4(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-tooltip": + specifier: ^1.2.8 + version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@tailwindcss/vite": + specifier: ^4.0.6 + version: 4.1.18(vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)) + "@tanstack/react-devtools": + specifier: ^0.8.4 + version: 0.8.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(csstype@3.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.10) + "@tanstack/react-form": + specifier: ^1.27.7 + version: 1.27.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@tanstack/react-query": + specifier: ^5.90.14 + version: 5.90.14(react@19.2.3) + "@tanstack/react-query-devtools": + specifier: ^5.91.2 + version: 5.91.2(@tanstack/react-query@5.90.14(react@19.2.3))(react@19.2.3) + "@tanstack/react-router": + specifier: ^1.132.0 + version: 1.141.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@tanstack/react-router-devtools": + specifier: ^1.132.0 + version: 1.141.2(@tanstack/react-router@1.141.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@tanstack/router-core@1.141.2)(csstype@3.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.10) + "@tanstack/react-table": + specifier: ^8.21.3 + version: 8.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@tanstack/router-plugin": + specifier: ^1.132.0 + version: 1.141.2(@tanstack/react-router@1.141.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + cmdk: + specifier: ^1.1.1 + version: 1.1.1(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + lucide-react: + specifier: 0.561.0 + version: 0.561.0(react@19.2.3) + next-themes: + specifier: ^0.4.6 + version: 0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + openapi-fetch: + specifier: ^0.15.0 + version: 0.15.0 + openapi-react-query: + specifier: ^0.5.1 + version: 0.5.1(@tanstack/react-query@5.90.14(react@19.2.3))(openapi-fetch@0.15.0) + react: + specifier: ^19.2.0 + version: 19.2.3 + react-dom: + specifier: ^19.2.0 + version: 19.2.3(react@19.2.3) + sonner: + specifier: ^2.0.7 + version: 2.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + tailwind-merge: + specifier: ^3.0.2 + version: 3.4.0 + tailwindcss: + specifier: ^4.0.6 + version: 4.1.18 + tw-animate-css: + specifier: ^1.3.6 + version: 1.4.0 + zod: + specifier: ^4.2.1 + version: 4.2.1 + devDependencies: + "@msw/source": + specifier: ^0.6.0 + version: 0.6.0(msw@2.12.7(@types/node@25.0.2)(typescript@5.9.3)) + "@tanstack/devtools-vite": + specifier: ^0.3.11 + version: 0.3.12(vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)) + "@testing-library/dom": + specifier: ^10.4.0 + version: 10.4.1 + "@testing-library/react": + specifier: ^16.2.0 + version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@types/node": + specifier: ^25.0.2 + version: 25.0.2 + "@types/react": + specifier: ^19.2.0 + version: 19.2.7 + "@types/react-dom": + specifier: ^19.2.0 + version: 19.2.3(@types/react@19.2.7) + "@vitejs/plugin-react": + specifier: ^5.0.4 + version: 5.1.2(vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)) + jsdom: + specifier: ^27.0.0 + version: 27.3.0(postcss@8.5.6) + msw: + specifier: ^2.12.7 + version: 2.12.7(@types/node@25.0.2)(typescript@5.9.3) + openapi-typescript: + specifier: ^7.10.1 + version: 7.10.1(typescript@5.9.3) + prettier: + specifier: 3.7.4 + version: 3.7.4 + typescript: + specifier: ^5.7.2 + version: 5.9.3 + vite: + specifier: ^7.1.7 + version: 7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) + vitest: + specifier: ^4.0.15 + version: 4.0.15(@types/node@25.0.2)(jiti@2.6.1)(jsdom@27.3.0(postcss@8.5.6))(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.2)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) + web-vitals: + specifier: ^5.1.0 + version: 5.1.0 packages: + "@acemir/cssom@0.9.29": + resolution: + { + integrity: sha512-G90x0VW+9nW4dFajtjCoT+NM0scAfH9Mb08IcjgFHYbfiL/lU04dTF9JuVOi3/OH+DJCQdcIseSXkdCB9Ky6JA==, + } + + "@asamuzakjp/css-color@4.1.0": + resolution: + { + integrity: sha512-9xiBAtLn4aNsa4mDnpovJvBn72tNEIACyvlqaNJ+ADemR+yeMJWnBudOi2qGDviJa7SwcDOU/TRh5dnET7qk0w==, + } + + "@asamuzakjp/dom-selector@6.7.6": + resolution: + { + integrity: sha512-hBaJER6A9MpdG3WgdlOolHmbOYvSk46y7IQN/1+iqiCuUu6iWdQrs9DGKF8ocqsEqWujWf/V7b7vaDgiUmIvUg==, + } + + "@asamuzakjp/nwsapi@2.3.9": + resolution: + { + integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==, + } + + "@babel/code-frame@7.27.1": + resolution: + { + integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==, + } + engines: { node: ">=6.9.0" } + + "@babel/compat-data@7.28.5": + resolution: + { + integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==, + } + engines: { node: ">=6.9.0" } + + "@babel/core@7.28.5": + resolution: + { + integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==, + } + engines: { node: ">=6.9.0" } + + "@babel/generator@7.28.5": + resolution: + { + integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-annotate-as-pure@7.27.3": + resolution: + { + integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-compilation-targets@7.27.2": + resolution: + { + integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-create-class-features-plugin@7.28.5": + resolution: + { + integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/helper-globals@7.28.0": + resolution: + { + integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-member-expression-to-functions@7.28.5": + resolution: + { + integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-module-imports@7.27.1": + resolution: + { + integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-module-transforms@7.28.3": + resolution: + { + integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/helper-optimise-call-expression@7.27.1": + resolution: + { + integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-plugin-utils@7.27.1": + resolution: + { + integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-replace-supers@7.27.1": + resolution: + { + integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/helper-skip-transparent-expression-wrappers@7.27.1": + resolution: + { + integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-string-parser@7.27.1": + resolution: + { + integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-identifier@7.28.5": + resolution: + { + integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-option@7.27.1": + resolution: + { + integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==, + } + engines: { node: ">=6.9.0" } + + "@babel/helpers@7.28.4": + resolution: + { + integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==, + } + engines: { node: ">=6.9.0" } + + "@babel/parser@7.28.5": + resolution: + { + integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==, + } + engines: { node: ">=6.0.0" } + hasBin: true - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@adobe/css-tools@4.3.3: - resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} - dev: true - - /@ampproject/remapping@2.3.0: - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} - engines: {node: '>=6.9.0'} - - /@babel/core@7.24.0: - resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) - '@babel/helpers': 7.24.0 - '@babel/parser': 7.24.0 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 - '@babel/types': 7.24.0 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - /@babel/eslint-parser@7.23.10(@babel/core@7.24.0)(eslint@8.57.0): - resolution: {integrity: sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + "@babel/plugin-syntax-jsx@7.27.1": + resolution: + { + integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==, + } + engines: { node: ">=6.9.0" } peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@babel/core': 7.24.0 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.57.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - dev: true + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-typescript@7.27.1": + resolution: + { + integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-modules-commonjs@7.27.1": + resolution: + { + integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-react-jsx-self@7.27.1": + resolution: + { + integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-react-jsx-source@7.27.1": + resolution: + { + integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-typescript@7.28.5": + resolution: + { + integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/preset-typescript@7.28.5": + resolution: + { + integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/runtime@7.28.4": + resolution: + { + integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==, + } + engines: { node: ">=6.9.0" } + + "@babel/template@7.27.2": + resolution: + { + integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==, + } + engines: { node: ">=6.9.0" } + + "@babel/traverse@7.28.5": + resolution: + { + integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==, + } + engines: { node: ">=6.9.0" } + + "@babel/types@7.28.5": + resolution: + { + integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==, + } + engines: { node: ">=6.9.0" } + + "@csstools/color-helpers@5.1.0": + resolution: + { + integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==, + } + engines: { node: ">=18" } + + "@csstools/css-calc@2.1.4": + resolution: + { + integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==, + } + engines: { node: ">=18" } + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.5 + "@csstools/css-tokenizer": ^3.0.4 + + "@csstools/css-color-parser@3.1.0": + resolution: + { + integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==, + } + engines: { node: ">=18" } + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.5 + "@csstools/css-tokenizer": ^3.0.4 + + "@csstools/css-parser-algorithms@3.0.5": + resolution: + { + integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==, + } + engines: { node: ">=18" } + peerDependencies: + "@csstools/css-tokenizer": ^3.0.4 + + "@csstools/css-syntax-patches-for-csstree@1.0.14": + resolution: + { + integrity: sha512-zSlIxa20WvMojjpCSy8WrNpcZ61RqfTfX3XTaOeVlGJrt/8HF3YbzgFZa01yTbT4GWQLwfTcC3EB8i3XnB647Q==, + } + engines: { node: ">=18" } + peerDependencies: + postcss: ^8.4 + + "@csstools/css-tokenizer@3.0.4": + resolution: + { + integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==, + } + engines: { node: ">=18" } + + "@esbuild/aix-ppc64@0.25.12": + resolution: + { + integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [aix] + + "@esbuild/aix-ppc64@0.27.1": + resolution: + { + integrity: sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [aix] + + "@esbuild/android-arm64@0.25.12": + resolution: + { + integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [android] + + "@esbuild/android-arm64@0.27.1": + resolution: + { + integrity: sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [android] + + "@esbuild/android-arm@0.25.12": + resolution: + { + integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [android] + + "@esbuild/android-arm@0.27.1": + resolution: + { + integrity: sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [android] + + "@esbuild/android-x64@0.25.12": + resolution: + { + integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [android] + + "@esbuild/android-x64@0.27.1": + resolution: + { + integrity: sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [android] + + "@esbuild/darwin-arm64@0.25.12": + resolution: + { + integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [darwin] - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 + "@esbuild/darwin-arm64@0.27.1": + resolution: + { + integrity: sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [darwin] - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.23.0 - lru-cache: 5.1.1 - semver: 6.3.1 + "@esbuild/darwin-x64@0.25.12": + resolution: + { + integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [darwin] - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} + "@esbuild/darwin-x64@0.27.1": + resolution: + { + integrity: sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [darwin] - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + "@esbuild/freebsd-arm64@0.25.12": + resolution: + { + integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [freebsd] + + "@esbuild/freebsd-arm64@0.27.1": + resolution: + { + integrity: sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [freebsd] + + "@esbuild/freebsd-x64@0.25.12": + resolution: + { + integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [freebsd] + + "@esbuild/freebsd-x64@0.27.1": + resolution: + { + integrity: sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [freebsd] + + "@esbuild/linux-arm64@0.25.12": + resolution: + { + integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [linux] - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 + "@esbuild/linux-arm64@0.27.1": + resolution: + { + integrity: sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [linux] - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 + "@esbuild/linux-arm@0.25.12": + resolution: + { + integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [linux] - /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 + "@esbuild/linux-arm@0.27.1": + resolution: + { + integrity: sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [linux] - /@babel/helper-plugin-utils@7.24.0: - resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} - engines: {node: '>=6.9.0'} - dev: true + "@esbuild/linux-ia32@0.25.12": + resolution: + { + integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [linux] - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 + "@esbuild/linux-ia32@0.27.1": + resolution: + { + integrity: sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [linux] - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.0 + "@esbuild/linux-loong64@0.25.12": + resolution: + { + integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==, + } + engines: { node: ">=18" } + cpu: [loong64] + os: [linux] - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} - engines: {node: '>=6.9.0'} + "@esbuild/linux-loong64@0.27.1": + resolution: + { + integrity: sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==, + } + engines: { node: ">=18" } + cpu: [loong64] + os: [linux] - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} + "@esbuild/linux-mips64el@0.25.12": + resolution: + { + integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==, + } + engines: { node: ">=18" } + cpu: [mips64el] + os: [linux] - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} + "@esbuild/linux-mips64el@0.27.1": + resolution: + { + integrity: sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==, + } + engines: { node: ">=18" } + cpu: [mips64el] + os: [linux] - /@babel/helpers@7.24.0: - resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 - '@babel/types': 7.24.0 - transitivePeerDependencies: - - supports-color + "@esbuild/linux-ppc64@0.25.12": + resolution: + { + integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [linux] - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 + "@esbuild/linux-ppc64@0.27.1": + resolution: + { + integrity: sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [linux] - /@babel/parser@7.24.0: - resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.24.0 + "@esbuild/linux-riscv64@0.25.12": + resolution: + { + integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==, + } + engines: { node: ">=18" } + cpu: [riscv64] + os: [linux] - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.0): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true + "@esbuild/linux-riscv64@0.27.1": + resolution: + { + integrity: sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==, + } + engines: { node: ">=18" } + cpu: [riscv64] + os: [linux] - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.0): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true + "@esbuild/linux-s390x@0.25.12": + resolution: + { + integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==, + } + engines: { node: ">=18" } + cpu: [s390x] + os: [linux] - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.0): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true + "@esbuild/linux-s390x@0.27.1": + resolution: + { + integrity: sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==, + } + engines: { node: ">=18" } + cpu: [s390x] + os: [linux] - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.0): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true + "@esbuild/linux-x64@0.25.12": + resolution: + { + integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [linux] - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.0): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true + "@esbuild/linux-x64@0.27.1": + resolution: + { + integrity: sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [linux] - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true + "@esbuild/netbsd-arm64@0.25.12": + resolution: + { + integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [netbsd] + + "@esbuild/netbsd-arm64@0.27.1": + resolution: + { + integrity: sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [netbsd] + + "@esbuild/netbsd-x64@0.25.12": + resolution: + { + integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [netbsd] + + "@esbuild/netbsd-x64@0.27.1": + resolution: + { + integrity: sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [netbsd] + + "@esbuild/openbsd-arm64@0.25.12": + resolution: + { + integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openbsd] + + "@esbuild/openbsd-arm64@0.27.1": + resolution: + { + integrity: sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openbsd] + + "@esbuild/openbsd-x64@0.25.12": + resolution: + { + integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [openbsd] + + "@esbuild/openbsd-x64@0.27.1": + resolution: + { + integrity: sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [openbsd] + + "@esbuild/openharmony-arm64@0.25.12": + resolution: + { + integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openharmony] + + "@esbuild/openharmony-arm64@0.27.1": + resolution: + { + integrity: sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openharmony] + + "@esbuild/sunos-x64@0.25.12": + resolution: + { + integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [sunos] + + "@esbuild/sunos-x64@0.27.1": + resolution: + { + integrity: sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [sunos] + + "@esbuild/win32-arm64@0.25.12": + resolution: + { + integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [win32] - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.0): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true + "@esbuild/win32-arm64@0.27.1": + resolution: + { + integrity: sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [win32] - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.0): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true + "@esbuild/win32-ia32@0.25.12": + resolution: + { + integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [win32] - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.0): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true + "@esbuild/win32-ia32@0.27.1": + resolution: + { + integrity: sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [win32] - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.0): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true + "@esbuild/win32-x64@0.25.12": + resolution: + { + integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [win32] - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.0): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true + "@esbuild/win32-x64@0.27.1": + resolution: + { + integrity: sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [win32] - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.0): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + "@faker-js/faker@8.4.1": + resolution: + { + integrity: sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: ">=6.14.13" } + + "@floating-ui/core@1.7.3": + resolution: + { + integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==, + } + + "@floating-ui/dom@1.7.4": + resolution: + { + integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==, + } + + "@floating-ui/react-dom@2.1.6": + resolution: + { + integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==, + } peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.0): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} + react: ">=16.8.0" + react-dom: ">=16.8.0" + + "@floating-ui/utils@0.2.10": + resolution: + { + integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==, + } + + "@inquirer/ansi@1.0.2": + resolution: + { + integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==, + } + engines: { node: ">=18" } + + "@inquirer/confirm@5.1.21": + resolution: + { + integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==, + } + engines: { node: ">=18" } peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.0): - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} - engines: {node: '>=6.9.0'} + "@inquirer/core@10.3.2": + resolution: + { + integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==, + } + engines: { node: ">=18" } peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 - dev: true - - /@babel/runtime@7.24.0: - resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - - /@babel/template@7.24.0: - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.24.0 - '@babel/types': 7.24.0 - - /@babel/traverse@7.24.0: - resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.0 - '@babel/types': 7.24.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true - /@babel/types@7.24.0: - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true - - /@emotion/babel-plugin@11.11.0: - resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} - dependencies: - '@babel/helper-module-imports': 7.22.15 - '@babel/runtime': 7.24.0 - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/serialize': 1.1.3 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 - dev: false - - /@emotion/cache@11.11.0: - resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} - dependencies: - '@emotion/memoize': 0.8.1 - '@emotion/sheet': 1.2.2 - '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.3.1 - stylis: 4.2.0 - dev: false - - /@emotion/hash@0.9.1: - resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} - dev: false - - /@emotion/is-prop-valid@1.2.2: - resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} - dependencies: - '@emotion/memoize': 0.8.1 - dev: false - - /@emotion/memoize@0.8.1: - resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} - dev: false - - /@emotion/react@11.11.4(@types/react@18.2.64)(react@18.2.0): - resolution: {integrity: sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==} + "@inquirer/figures@1.0.15": + resolution: + { + integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==, + } + engines: { node: ">=18" } + + "@inquirer/type@3.0.10": + resolution: + { + integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==, + } + engines: { node: ">=18" } peerDependencies: - '@types/react': '*' - react: '>=16.8.0' + "@types/node": ">=18" peerDependenciesMeta: - '@types/react': + "@types/node": optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@emotion/babel-plugin': 11.11.0 - '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.3.1 - '@types/react': 18.2.64 - hoist-non-react-statics: 3.3.2 - react: 18.2.0 - dev: false - - /@emotion/serialize@1.1.3: - resolution: {integrity: sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==} - dependencies: - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/unitless': 0.8.1 - '@emotion/utils': 1.2.1 - csstype: 3.1.3 - dev: false - - /@emotion/server@11.11.0: - resolution: {integrity: sha512-6q89fj2z8VBTx9w93kJ5n51hsmtYuFPtZgnc1L8VzRx9ti4EU6EyvF6Nn1H1x3vcCQCF7u2dB2lY4AYJwUW4PA==} + + "@jridgewell/gen-mapping@0.3.13": + resolution: + { + integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, + } + + "@jridgewell/remapping@2.3.5": + resolution: + { + integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, + } + + "@jridgewell/resolve-uri@3.1.2": + resolution: + { + integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, + } + engines: { node: ">=6.0.0" } + + "@jridgewell/sourcemap-codec@1.5.5": + resolution: + { + integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, + } + + "@jridgewell/trace-mapping@0.3.31": + resolution: + { + integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, + } + + "@msw/source@0.6.0": + resolution: + { + integrity: sha512-OEzMe6OmuUWLmktlJq73M12hFBpateHWzdzx2G7e0bqs/b+IejP14UFz20UEQOeV3PU7ATg2US1zE4tk+94rpw==, + } + engines: { node: ">=20" } + peerDependencies: + msw: ^2.10.0 + + "@mswjs/interceptors@0.40.0": + resolution: + { + integrity: sha512-EFd6cVbHsgLa6wa4RljGj6Wk75qoHxUSyc5asLyyPSyuhIcdS2Q3Phw6ImS1q+CkALthJRShiYfKANcQMuMqsQ==, + } + engines: { node: ">=18" } + + "@open-draft/deferred-promise@2.2.0": + resolution: + { + integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==, + } + + "@open-draft/logger@0.3.0": + resolution: + { + integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==, + } + + "@open-draft/until@2.1.0": + resolution: + { + integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==, + } + + "@radix-ui/number@1.1.1": + resolution: + { + integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==, + } + + "@radix-ui/primitive@1.1.3": + resolution: + { + integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==, + } + + "@radix-ui/react-arrow@1.1.7": + resolution: + { + integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==, + } peerDependencies: - '@emotion/css': ^11.0.0-rc.0 + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@emotion/css': + "@types/react": + optional: true + "@types/react-dom": optional: true - dependencies: - '@emotion/utils': 1.2.1 - html-tokenize: 2.0.1 - multipipe: 1.0.2 - through: 2.3.8 - dev: false - - /@emotion/sheet@1.2.2: - resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} - dev: false - /@emotion/styled@11.11.0(@emotion/react@11.11.4)(@types/react@18.2.64)(react@18.2.0): - resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} + "@radix-ui/react-avatar@1.1.11": + resolution: + { + integrity: sha512-0Qk603AHGV28BOBO34p7IgD5m+V5Sg/YovfayABkoDDBM5d3NCx0Mp4gGrjzLGes1jV5eNOE1r3itqOR33VC6Q==, + } peerDependencies: - '@emotion/react': ^11.0.0-rc.0 - '@types/react': '*' - react: '>=16.8.0' + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": + optional: true + "@types/react-dom": optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@emotion/babel-plugin': 11.11.0 - '@emotion/is-prop-valid': 1.2.2 - '@emotion/react': 11.11.4(@types/react@18.2.64)(react@18.2.0) - '@emotion/serialize': 1.1.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@emotion/utils': 1.2.1 - '@types/react': 18.2.64 - react: 18.2.0 - dev: false - - /@emotion/unitless@0.8.1: - resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} - dev: false - - /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): - resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} - peerDependencies: - react: '>=16.8.0' - dependencies: - react: 18.2.0 - dev: false - - /@emotion/utils@1.2.1: - resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} - dev: false - - /@emotion/weak-memoize@0.3.1: - resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} - dev: false - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + "@radix-ui/react-checkbox@1.3.3": + resolution: + { + integrity: sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==, + } peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@floating-ui/core@1.6.0: - resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} - dependencies: - '@floating-ui/utils': 0.2.1 - dev: false - - /@floating-ui/dom@1.6.3: - resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==} - dependencies: - '@floating-ui/core': 1.6.0 - '@floating-ui/utils': 0.2.1 - dev: false + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true - /@floating-ui/react-dom@2.0.8(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==} + "@radix-ui/react-collapsible@1.1.12": + resolution: + { + integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==, + } peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - dependencies: - '@floating-ui/dom': 1.6.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@floating-ui/utils@0.2.1: - resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} - dev: false - - /@fontsource/inter@5.0.17: - resolution: {integrity: sha512-2meBGx1kt7u5LwzGc5Sz5rka6ZDrydg6nT3x6Wkt310vHXUchIywrO8pooWMzZdHYcyFY/cv4lEpJZgMD94bCg==} - dev: false - - /@fontsource/plus-jakarta-sans@5.0.19: - resolution: {integrity: sha512-LWMReNfB3s3tLRCPlFkqTfheqV40+2RQ4pOFhmKKB+9QrFsSf+g4Sl5r2V0+FNWHzdjfCas7uF4d+PejipqvUw==} - dev: false - - /@fontsource/roboto-mono@5.0.17: - resolution: {integrity: sha512-MU6FrAyG7DWMCL8mu0JDPvB2tnFcn/lYvVKixzqHb2uefRsLaD6OBFfF1q5RMFsKcFHyPySHM7ZcGw/Q6A1/FA==} - dev: false + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true - /@hookform/resolvers@3.3.4(react-hook-form@7.51.0): - resolution: {integrity: sha512-o5cgpGOuJYrd+iMKvkttOclgwRW86EsWJZZRC23prf0uU2i48Htq4PuT73AVb9ionFyZrwYEITuOFGF+BydEtQ==} + "@radix-ui/react-collection@1.1.7": + resolution: + { + integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==, + } peerDependencies: - react-hook-form: ^7.0.0 - dependencies: - react-hook-form: 7.51.0(react@18.2.0) - dev: false - - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true - - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} - dev: true + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true - /@ianvs/prettier-plugin-sort-imports@4.1.1(prettier@3.2.5): - resolution: {integrity: sha512-kJhXq63ngpTQ2dxgf5GasbPJWsJA3LgoOdd7WGhpUSzLgLgI4IsIzYkbJf9kmpOHe7Vdm/o3PcRA3jmizXUuAQ==} + "@radix-ui/react-compose-refs@1.1.2": + resolution: + { + integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==, + } peerDependencies: - '@vue/compiler-sfc': '>=3.0.0' - prettier: 2 || 3 + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@vue/compiler-sfc': + "@types/react": optional: true - dependencies: - '@babel/core': 7.24.0 - '@babel/generator': 7.23.6 - '@babel/parser': 7.24.0 - '@babel/traverse': 7.24.0 - '@babel/types': 7.24.0 - prettier: 3.2.5 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - dependencies: - string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true - - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - dev: true - - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true - - /@jest/console@29.7.0: - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.11.25 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - dev: true - - /@jest/core@29.7.0: - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + "@radix-ui/react-context@1.1.2": + resolution: + { + integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==, + } peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - node-notifier: + "@types/react": optional: true - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.25 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.11.25) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.5 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - dev: true - - /@jest/environment@29.7.0: - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.25 - jest-mock: 29.7.0 - dev: true - - /@jest/expect-utils@29.7.0: - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-get-type: 29.6.3 - dev: true - /@jest/expect@29.7.0: - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/fake-timers@29.7.0: - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.11.25 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - dev: true - - /@jest/globals@29.7.0: - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/reporters@29.7.0: - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + "@radix-ui/react-context@1.1.3": + resolution: + { + integrity: sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==, + } peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - node-notifier: + "@types/react": optional: true - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.11.25 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.2 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.27.8 - dev: true - - /@jest/source-map@29.6.3: - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - callsites: 3.1.0 - graceful-fs: 4.2.11 - dev: true - - /@jest/test-result@29.7.0: - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - dev: true - - /@jest/test-sequencer@29.7.0: - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - dev: true - - /@jest/transform@29.7.0: - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/core': 7.24.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.5 - pirates: 4.0.6 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/types@29.6.3: - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.25 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - dev: true - - /@jridgewell/gen-mapping@0.3.5: - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 - - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - /@jridgewell/set-array@1.2.1: - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.25: - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - - /@microsoft/tsdoc-config@0.16.2: - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} - dependencies: - '@microsoft/tsdoc': 0.14.2 - ajv: 6.12.6 - jju: 1.4.0 - resolve: 1.19.0 - dev: true - - /@microsoft/tsdoc@0.14.2: - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} - dev: true - - /@mui/base@5.0.0-beta.38(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-AsjD6Y1X5A1qndxz8xCcR8LDqv31aiwlgWMPxFAX/kCKiIGKlK65yMeVZ62iQr/6LBz+9hSKLiD1i4TZdAHKcQ==} - engines: {node: '>=12.0.0'} + "@radix-ui/react-dialog@1.1.15": + resolution: + { + integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==, + } peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) - '@mui/types': 7.2.13(@types/react@18.2.64) - '@mui/utils': 5.15.12(@types/react@18.2.64)(react@18.2.0) - '@popperjs/core': 2.11.8 - '@types/react': 18.2.64 - clsx: 2.1.0 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@mui/core-downloads-tracker@5.15.12: - resolution: {integrity: sha512-brRO+tMFLpGyjEYHrX97bzqeF6jZmKpqqe1rY0LyIHAwP6xRVzh++zSecOQorDOCaZJg4XkGT9xfD+RWOWxZBA==} - dev: false - - /@mui/lab@5.0.0-alpha.167(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@mui/material@5.15.12)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-BNQJ7fBBvL68WGVnzAhbtTmabSuJDXaILr9dz/3RNK4TgGXPgWCAr7qtJeUdc4p1t7c4Z1ifG8UwgqD+5hzMNg==} - engines: {node: '>=12.0.0'} + "@types/react-dom": + optional: true + + "@radix-ui/react-direction@1.1.1": + resolution: + { + integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==, + } peerDependencies: - '@emotion/react': ^11.5.0 - '@emotion/styled': ^11.3.0 - '@mui/material': '>=5.15.0' - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@emotion/react': + "@types/react": optional: true - '@emotion/styled': + + "@radix-ui/react-dismissable-layer@1.1.11": + resolution: + { + integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": optional: true - '@types/react': + "@types/react-dom": optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@emotion/react': 11.11.4(@types/react@18.2.64)(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@18.2.64)(react@18.2.0) - '@mui/base': 5.0.0-beta.38(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0) - '@mui/material': 5.15.12(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0) - '@mui/system': 5.15.12(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.64)(react@18.2.0) - '@mui/types': 7.2.13(@types/react@18.2.64) - '@mui/utils': 5.15.12(@types/react@18.2.64)(react@18.2.0) - '@types/react': 18.2.64 - clsx: 2.1.0 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@mui/material@5.15.12(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-vXJGg6KNKucsvbW6l7w9zafnpOp0CWc0Wx4mDykuABTpQ5QQBnZxP7+oB4yAS1hDZQ1WobbeIl0CjxK4EEahkA==} - engines: {node: '>=12.0.0'} + + "@radix-ui/react-dropdown-menu@2.1.16": + resolution: + { + integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==, + } peerDependencies: - '@emotion/react': ^11.5.0 - '@emotion/styled': ^11.3.0 - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@emotion/react': - optional: true - '@emotion/styled': + "@types/react": optional: true - '@types/react': + "@types/react-dom": optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@emotion/react': 11.11.4(@types/react@18.2.64)(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@18.2.64)(react@18.2.0) - '@mui/base': 5.0.0-beta.38(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0) - '@mui/core-downloads-tracker': 5.15.12 - '@mui/system': 5.15.12(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.64)(react@18.2.0) - '@mui/types': 7.2.13(@types/react@18.2.64) - '@mui/utils': 5.15.12(@types/react@18.2.64)(react@18.2.0) - '@types/react': 18.2.64 - '@types/react-transition-group': 4.4.10 - clsx: 2.1.0 - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-is: 18.2.0 - react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) - dev: false - - /@mui/private-theming@5.15.12(@types/react@18.2.64)(react@18.2.0): - resolution: {integrity: sha512-cqoSo9sgA5HE+8vZClbLrq9EkyOnYysooepi5eKaKvJ41lReT2c5wOZAeDDM1+xknrMDos+0mT2zr3sZmUiRRA==} - engines: {node: '>=12.0.0'} + + "@radix-ui/react-focus-guards@1.1.3": + resolution: + { + integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==, + } peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@mui/utils': 5.15.12(@types/react@18.2.64)(react@18.2.0) - '@types/react': 18.2.64 - prop-types: 15.8.1 - react: 18.2.0 - dev: false - /@mui/styled-engine@5.15.11(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(react@18.2.0): - resolution: {integrity: sha512-So21AhAngqo07ces4S/JpX5UaMU2RHXpEA6hNzI6IQjd/1usMPxpgK8wkGgTe3JKmC2KDmH8cvoycq5H3Ii7/w==} - engines: {node: '>=12.0.0'} + "@radix-ui/react-focus-scope@1.1.7": + resolution: + { + integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==, + } peerDependencies: - '@emotion/react': ^11.4.1 - '@emotion/styled': ^11.3.0 - react: ^17.0.0 || ^18.0.0 + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@emotion/react': + "@types/react": optional: true - '@emotion/styled': + "@types/react-dom": optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@emotion/cache': 11.11.0 - '@emotion/react': 11.11.4(@types/react@18.2.64)(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@18.2.64)(react@18.2.0) - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.2.0 - dev: false - - /@mui/system@5.15.12(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.64)(react@18.2.0): - resolution: {integrity: sha512-/pq+GO6yN3X7r3hAwFTrzkAh7K1bTF5r8IzS79B9eyKJg7v6B/t4/zZYMR6OT9qEPtwf6rYN2Utg1e6Z7F1OgQ==} - engines: {node: '>=12.0.0'} + + "@radix-ui/react-id@1.1.1": + resolution: + { + integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==, + } peerDependencies: - '@emotion/react': ^11.5.0 - '@emotion/styled': ^11.3.0 - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@emotion/react': + "@types/react": optional: true - '@emotion/styled': + + "@radix-ui/react-label@2.1.8": + resolution: + { + integrity: sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": optional: true - '@types/react': + "@types/react-dom": optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@emotion/react': 11.11.4(@types/react@18.2.64)(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@18.2.64)(react@18.2.0) - '@mui/private-theming': 5.15.12(@types/react@18.2.64)(react@18.2.0) - '@mui/styled-engine': 5.15.11(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(react@18.2.0) - '@mui/types': 7.2.13(@types/react@18.2.64) - '@mui/utils': 5.15.12(@types/react@18.2.64)(react@18.2.0) - '@types/react': 18.2.64 - clsx: 2.1.0 - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.2.0 - dev: false - - /@mui/types@7.2.13(@types/react@18.2.64): - resolution: {integrity: sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==} + + "@radix-ui/react-menu@2.1.16": + resolution: + { + integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==, + } peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": + optional: true + "@types/react-dom": optional: true - dependencies: - '@types/react': 18.2.64 - dev: false - /@mui/utils@5.15.12(@types/react@18.2.64)(react@18.2.0): - resolution: {integrity: sha512-8SDGCnO2DY9Yy+5bGzu00NZowSDtuyHP4H8gunhHGQoIlhlY2Z3w64wBzAOLpYw/ZhJNzksDTnS/i8qdJvxuow==} - engines: {node: '>=12.0.0'} + "@radix-ui/react-popover@1.1.15": + resolution: + { + integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==, + } peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@types/react': + "@types/react": optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@types/prop-types': 15.7.11 - '@types/react': 18.2.64 - prop-types: 15.8.1 - react: 18.2.0 - react-is: 18.2.0 - dev: false - - /@mui/x-date-pickers@6.19.6(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@mui/material@5.15.12)(@mui/system@5.15.12)(@types/react@18.2.64)(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-QW9AFcPi0vLpkUhmquhhyhLaBvB0AZJuu3NTrE173qNKx3Z3n51aCLY9bc7c6i4ltZMMsVRHlvzQjsve04TC8A==} - engines: {node: '>=14.0.0'} + "@types/react-dom": + optional: true + + "@radix-ui/react-popper@1.2.8": + resolution: + { + integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==, + } peerDependencies: - '@emotion/react': ^11.9.0 - '@emotion/styled': ^11.8.1 - '@mui/material': ^5.8.6 - '@mui/system': ^5.8.0 - date-fns: ^2.25.0 || ^3.2.0 - date-fns-jalali: ^2.13.0-0 - dayjs: ^1.10.7 - luxon: ^3.0.2 - moment: ^2.29.4 - moment-hijri: ^2.1.2 - moment-jalaali: ^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@emotion/react': + "@types/react": optional: true - '@emotion/styled': + "@types/react-dom": optional: true - date-fns: + + "@radix-ui/react-portal@1.1.9": + resolution: + { + integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": optional: true - date-fns-jalali: + "@types/react-dom": optional: true - dayjs: + + "@radix-ui/react-presence@1.1.5": + resolution: + { + integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": optional: true - luxon: + "@types/react-dom": optional: true - moment: + + "@radix-ui/react-primitive@2.1.3": + resolution: + { + integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": optional: true - moment-hijri: + "@types/react-dom": optional: true - moment-jalaali: + + "@radix-ui/react-primitive@2.1.4": + resolution: + { + integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": optional: true - dependencies: - '@babel/runtime': 7.24.0 - '@emotion/react': 11.11.4(@types/react@18.2.64)(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.4)(@types/react@18.2.64)(react@18.2.0) - '@mui/base': 5.0.0-beta.38(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0) - '@mui/material': 5.15.12(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0) - '@mui/system': 5.15.12(@emotion/react@11.11.4)(@emotion/styled@11.11.0)(@types/react@18.2.64)(react@18.2.0) - '@mui/utils': 5.15.12(@types/react@18.2.64)(react@18.2.0) - '@types/react-transition-group': 4.4.10 - clsx: 2.1.0 - dayjs: 1.11.10 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' - dev: false - /@next/env@14.1.3: - resolution: {integrity: sha512-VhgXTvrgeBRxNPjyfBsDIMvgsKDxjlpw4IAUsHCX8Gjl1vtHUYRT3+xfQ/wwvLPDd/6kqfLqk9Pt4+7gysuCKQ==} - dev: false + "@radix-ui/react-progress@1.1.8": + resolution: + { + integrity: sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true - /@next/eslint-plugin-next@14.1.3: - resolution: {integrity: sha512-VCnZI2cy77Yaj3L7Uhs3+44ikMM1VD/fBMwvTBb3hIaTIuqa+DmG4dhUDq+MASu3yx97KhgsVJbsas0XuiKyww==} - dependencies: - glob: 10.3.10 - dev: true + "@radix-ui/react-roving-focus@1.1.11": + resolution: + { + integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-scroll-area@1.2.10": + resolution: + { + integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-separator@1.1.8": + resolution: + { + integrity: sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-slot@1.2.3": + resolution: + { + integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-slot@1.2.4": + resolution: + { + integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-tooltip@1.2.8": + resolution: + { + integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-use-callback-ref@1.1.1": + resolution: + { + integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-controllable-state@1.2.2": + resolution: + { + integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-effect-event@0.0.2": + resolution: + { + integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true - /@next/swc-darwin-arm64@14.1.3: - resolution: {integrity: sha512-LALu0yIBPRiG9ANrD5ncB3pjpO0Gli9ZLhxdOu6ZUNf3x1r3ea1rd9Q+4xxUkGrUXLqKVK9/lDkpYIJaCJ6AHQ==} - engines: {node: '>= 10'} + "@radix-ui/react-use-escape-keydown@1.1.1": + resolution: + { + integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-is-hydrated@0.1.0": + resolution: + { + integrity: sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-layout-effect@1.1.1": + resolution: + { + integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-previous@1.1.1": + resolution: + { + integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-rect@1.1.1": + resolution: + { + integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-size@1.1.1": + resolution: + { + integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-visually-hidden@1.2.3": + resolution: + { + integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/rect@1.1.1": + resolution: + { + integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==, + } + + "@redocly/ajv@8.17.1": + resolution: + { + integrity: sha512-EDtsGZS964mf9zAUXAl9Ew16eYbeyAFWhsPr0fX6oaJxgd8rApYlPBf0joyhnUHz88WxrigyFtTaqqzXNzPgqw==, + } + + "@redocly/config@0.22.2": + resolution: + { + integrity: sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==, + } + + "@redocly/openapi-core@1.34.6": + resolution: + { + integrity: sha512-2+O+riuIUgVSuLl3Lyh5AplWZyVMNuG2F98/o6NrutKJfW4/GTZdPpZlIphS0HGgcOHgmWcCSHj+dWFlZaGSHw==, + } + engines: { node: ">=18.17.0", npm: ">=9.5.0" } + + "@rolldown/pluginutils@1.0.0-beta.53": + resolution: + { + integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==, + } + + "@rollup/rollup-android-arm-eabi@4.53.3": + resolution: + { + integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==, + } + cpu: [arm] + os: [android] + + "@rollup/rollup-android-arm64@4.53.3": + resolution: + { + integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==, + } + cpu: [arm64] + os: [android] + + "@rollup/rollup-darwin-arm64@4.53.3": + resolution: + { + integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==, + } cpu: [arm64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@next/swc-darwin-x64@14.1.3: - resolution: {integrity: sha512-E/9WQeXxkqw2dfcn5UcjApFgUq73jqNKaE5bysDm58hEUdUGedVrnRhblhJM7HbCZNhtVl0j+6TXsK0PuzXTCg==} - engines: {node: '>= 10'} + "@rollup/rollup-darwin-x64@4.53.3": + resolution: + { + integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==, + } cpu: [x64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-arm64-gnu@14.1.3: - resolution: {integrity: sha512-USArX9B+3rZSXYLFvgy0NVWQgqh6LHWDmMt38O4lmiJNQcwazeI6xRvSsliDLKt+78KChVacNiwvOMbl6g6BBw==} - engines: {node: '>= 10'} + "@rollup/rollup-freebsd-arm64@4.53.3": + resolution: + { + integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==, + } cpu: [arm64] + os: [freebsd] + + "@rollup/rollup-freebsd-x64@4.53.3": + resolution: + { + integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==, + } + cpu: [x64] + os: [freebsd] + + "@rollup/rollup-linux-arm-gnueabihf@4.53.3": + resolution: + { + integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==, + } + cpu: [arm] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-arm64-musl@14.1.3: - resolution: {integrity: sha512-esk1RkRBLSIEp1qaQXv1+s6ZdYzuVCnDAZySpa62iFTMGTisCyNQmqyCTL9P+cLJ4N9FKCI3ojtSfsyPHJDQNw==} - engines: {node: '>= 10'} + "@rollup/rollup-linux-arm-musleabihf@4.53.3": + resolution: + { + integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==, + } + cpu: [arm] + os: [linux] + + "@rollup/rollup-linux-arm64-gnu@4.53.3": + resolution: + { + integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==, + } + cpu: [arm64] + os: [linux] + + "@rollup/rollup-linux-arm64-musl@4.53.3": + resolution: + { + integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==, + } cpu: [arm64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-x64-gnu@14.1.3: - resolution: {integrity: sha512-8uOgRlYEYiKo0L8YGeS+3TudHVDWDjPVDUcST+z+dUzgBbTEwSSIaSgF/vkcC1T/iwl4QX9iuUyUdQEl0Kxalg==} - engines: {node: '>= 10'} + "@rollup/rollup-linux-loong64-gnu@4.53.3": + resolution: + { + integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==, + } + cpu: [loong64] + os: [linux] + + "@rollup/rollup-linux-ppc64-gnu@4.53.3": + resolution: + { + integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==, + } + cpu: [ppc64] + os: [linux] + + "@rollup/rollup-linux-riscv64-gnu@4.53.3": + resolution: + { + integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==, + } + cpu: [riscv64] + os: [linux] + + "@rollup/rollup-linux-riscv64-musl@4.53.3": + resolution: + { + integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==, + } + cpu: [riscv64] + os: [linux] + + "@rollup/rollup-linux-s390x-gnu@4.53.3": + resolution: + { + integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==, + } + cpu: [s390x] + os: [linux] + + "@rollup/rollup-linux-x64-gnu@4.53.3": + resolution: + { + integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==, + } cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-x64-musl@14.1.3: - resolution: {integrity: sha512-DX2zqz05ziElLoxskgHasaJBREC5Y9TJcbR2LYqu4r7naff25B4iXkfXWfcp69uD75/0URmmoSgT8JclJtrBoQ==} - engines: {node: '>= 10'} + "@rollup/rollup-linux-x64-musl@4.53.3": + resolution: + { + integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==, + } cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-arm64-msvc@14.1.3: - resolution: {integrity: sha512-HjssFsCdsD4GHstXSQxsi2l70F/5FsRTRQp8xNgmQs15SxUfUJRvSI9qKny/jLkY3gLgiCR3+6A7wzzK0DBlfA==} - engines: {node: '>= 10'} + "@rollup/rollup-openharmony-arm64@4.53.3": + resolution: + { + integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==, + } + cpu: [arm64] + os: [openharmony] + + "@rollup/rollup-win32-arm64-msvc@4.53.3": + resolution: + { + integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==, + } cpu: [arm64] os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-ia32-msvc@14.1.3: - resolution: {integrity: sha512-DRuxD5axfDM1/Ue4VahwSxl1O5rn61hX8/sF0HY8y0iCbpqdxw3rB3QasdHn/LJ6Wb2y5DoWzXcz3L1Cr+Thrw==} - engines: {node: '>= 10'} + "@rollup/rollup-win32-ia32-msvc@4.53.3": + resolution: + { + integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==, + } cpu: [ia32] os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-x64-msvc@14.1.3: - resolution: {integrity: sha512-uC2DaDoWH7h1P/aJ4Fok3Xiw6P0Lo4ez7NbowW2VGNXw/Xv6tOuLUcxhBYZxsSUJtpeknCi8/fvnSpyCFp4Rcg==} - engines: {node: '>= 10'} + "@rollup/rollup-win32-x64-gnu@4.53.3": + resolution: + { + integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==, + } cpu: [x64] os: [win32] - requiresBuild: true - dev: false - optional: true - /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - dependencies: - eslint-scope: 5.1.1 - dev: true + "@rollup/rollup-win32-x64-msvc@4.53.3": + resolution: + { + integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==, + } + cpu: [x64] + os: [win32] - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true + "@solid-primitives/event-listener@2.4.3": + resolution: + { + integrity: sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg==, + } + peerDependencies: + solid-js: ^1.6.12 - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + "@solid-primitives/keyboard@1.3.3": + resolution: + { + integrity: sha512-9dQHTTgLBqyAI7aavtO+HnpTVJgWQA1ghBSrmLtMu1SMxLPDuLfuNr+Tk5udb4AL4Ojg7h9JrKOGEEDqsJXWJA==, + } + peerDependencies: + solid-js: ^1.6.12 - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - dev: true + "@solid-primitives/resize-observer@2.1.3": + resolution: + { + integrity: sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ==, + } + peerDependencies: + solid-js: ^1.6.12 - /@phosphor-icons/react@2.0.15(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-PQKNcRrfERlC8gJGNz0su0i9xVmeubXSNxucPcbCLDd9u0cwJVTEyYK87muul/svf0UXFdL2Vl6bbeOhT1Mwow==} - engines: {node: '>=10'} + "@solid-primitives/rootless@1.5.2": + resolution: + { + integrity: sha512-9HULb0QAzL2r47CCad0M+NKFtQ+LrGGNHZfteX/ThdGvKIg2o2GYhBooZubTCd/RTu2l2+Nw4s+dEfiDGvdrrQ==, + } peerDependencies: - react: '>= 16.8' - react-dom: '>= 16.8' - dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true - optional: true + solid-js: ^1.6.12 - /@pkgr/core@0.1.1: - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dev: true + "@solid-primitives/static-store@0.1.2": + resolution: + { + integrity: sha512-ReK+5O38lJ7fT+L6mUFvUr6igFwHBESZF+2Ug842s7fvlVeBdIVEdTCErygff6w7uR6+jrr7J8jQo+cYrEq4Iw==, + } + peerDependencies: + solid-js: ^1.6.12 - /@popperjs/core@2.11.8: - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - dev: false + "@solid-primitives/utils@6.3.2": + resolution: + { + integrity: sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ==, + } + peerDependencies: + solid-js: ^1.6.12 + + "@standard-schema/spec@1.0.0": + resolution: + { + integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==, + } + + "@stoplight/json@3.21.7": + resolution: + { + integrity: sha512-xcJXgKFqv/uCEgtGlPxy3tPA+4I+ZI4vAuMJ885+ThkTHFVkC+0Fm58lA9NlsyjnkpxFh4YiQWpH+KefHdbA0A==, + } + engines: { node: ">=8.3.0" } + + "@stoplight/ordered-object-literal@1.0.5": + resolution: + { + integrity: sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==, + } + engines: { node: ">=8" } + + "@stoplight/path@1.3.2": + resolution: + { + integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==, + } + engines: { node: ">=8" } + + "@stoplight/types@13.20.0": + resolution: + { + integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==, + } + engines: { node: ^12.20 || >=14.13 } + + "@tailwindcss/node@4.1.18": + resolution: + { + integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==, + } + + "@tailwindcss/oxide-android-arm64@4.1.18": + resolution: + { + integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [android] + + "@tailwindcss/oxide-darwin-arm64@4.1.18": + resolution: + { + integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [darwin] - /@rushstack/eslint-patch@1.7.2: - resolution: {integrity: sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==} - dev: true + "@tailwindcss/oxide-darwin-x64@4.1.18": + resolution: + { + integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [darwin] - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true + "@tailwindcss/oxide-freebsd-x64@4.1.18": + resolution: + { + integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [freebsd] + + "@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18": + resolution: + { + integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==, + } + engines: { node: ">= 10" } + cpu: [arm] + os: [linux] - /@sinonjs/commons@3.0.1: - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - dependencies: - type-detect: 4.0.8 - dev: true + "@tailwindcss/oxide-linux-arm64-gnu@4.1.18": + resolution: + { + integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] - /@sinonjs/fake-timers@10.3.0: - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - dependencies: - '@sinonjs/commons': 3.0.1 - dev: true + "@tailwindcss/oxide-linux-arm64-musl@4.1.18": + resolution: + { + integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] - /@swc/helpers@0.5.2: - resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} - dependencies: - tslib: 2.6.2 - dev: false + "@tailwindcss/oxide-linux-x64-gnu@4.1.18": + resolution: + { + integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] - /@testing-library/dom@9.3.4: - resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} - engines: {node: '>=14'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/runtime': 7.24.0 - '@types/aria-query': 5.0.4 - aria-query: 5.1.3 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - dev: true + "@tailwindcss/oxide-linux-x64-musl@4.1.18": + resolution: + { + integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@tailwindcss/oxide-wasm32-wasi@4.1.18": + resolution: + { + integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==, + } + engines: { node: ">=14.0.0" } + cpu: [wasm32] + bundledDependencies: + - "@napi-rs/wasm-runtime" + - "@emnapi/core" + - "@emnapi/runtime" + - "@tybys/wasm-util" + - "@emnapi/wasi-threads" + - tslib + + "@tailwindcss/oxide-win32-arm64-msvc@4.1.18": + resolution: + { + integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [win32] + + "@tailwindcss/oxide-win32-x64-msvc@4.1.18": + resolution: + { + integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [win32] + + "@tailwindcss/oxide@4.1.18": + resolution: + { + integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==, + } + engines: { node: ">= 10" } + + "@tailwindcss/vite@4.1.18": + resolution: + { + integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==, + } + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 + + "@tanstack/devtools-client@0.0.5": + resolution: + { + integrity: sha512-hsNDE3iu4frt9cC2ppn1mNRnLKo2uc1/1hXAyY9z4UYb+o40M2clFAhiFoo4HngjfGJDV3x18KVVIq7W4Un+zA==, + } + engines: { node: ">=18" } + + "@tanstack/devtools-event-bus@0.3.3": + resolution: + { + integrity: sha512-lWl88uLAz7ZhwNdLH6A3tBOSEuBCrvnY9Fzr5JPdzJRFdM5ZFdyNWz1Bf5l/F3GU57VodrN0KCFi9OA26H5Kpg==, + } + engines: { node: ">=18" } + + "@tanstack/devtools-event-client@0.4.0": + resolution: + { + integrity: sha512-RPfGuk2bDZgcu9bAJodvO2lnZeHuz4/71HjZ0bGb/SPg8+lyTA+RLSKQvo7fSmPSi8/vcH3aKQ8EM9ywf1olaw==, + } + engines: { node: ">=18" } + + "@tanstack/devtools-ui@0.4.4": + resolution: + { + integrity: sha512-5xHXFyX3nom0UaNfiOM92o6ziaHjGo3mcSGe2HD5Xs8dWRZNpdZ0Smd0B9ddEhy0oB+gXyMzZgUJb9DmrZV0Mg==, + } + engines: { node: ">=18" } + peerDependencies: + solid-js: ">=1.9.7" + + "@tanstack/devtools-vite@0.3.12": + resolution: + { + integrity: sha512-fGJgu4xUhKmGk+a+/aHD8l5HKVk6+ObA+6D3YC3xCXbai/YmaGhztqcZf1tKUqjZyYyQLHsjqmKzvJgVpQP1jw==, + } + engines: { node: ">=18" } + peerDependencies: + vite: ^6.0.0 || ^7.0.0 + + "@tanstack/devtools@0.9.1": + resolution: + { + integrity: sha512-fW/1ewT+g0LgJGraS/Irwle3uRgM1VDwfhi/NP3aGHhGyCDAWJI0+Id9FBzjChQ5BuEU5qD5fdegcFqTZShXHw==, + } + engines: { node: ">=18" } + peerDependencies: + solid-js: ">=1.9.7" + + "@tanstack/form-core@1.27.7": + resolution: + { + integrity: sha512-nvogpyE98fhb0NDw1Bf2YaCH+L7ZIUgEpqO9TkHucDn6zg3ni521boUpv0i8HKIrmmFwDYjWZoCnrgY4HYWTkw==, + } + + "@tanstack/history@1.141.0": + resolution: + { + integrity: sha512-LS54XNyxyTs5m/pl1lkwlg7uZM3lvsv2FIIV1rsJgnfwVCnI+n4ZGZ2CcjNT13BPu/3hPP+iHmliBSscJxW5FQ==, + } + engines: { node: ">=12" } + + "@tanstack/pacer-lite@0.1.1": + resolution: + { + integrity: sha512-y/xtNPNt/YeyoVxE/JCx+T7yjEzpezmbb+toK8DDD1P4m7Kzs5YR956+7OKexG3f8aXgC3rLZl7b1V+yNUSy5w==, + } + engines: { node: ">=18" } + + "@tanstack/query-core@5.90.14": + resolution: + { + integrity: sha512-/6di2yNI+YxpVrH9Ig74Q+puKnkCE+D0LGyagJEGndJHJc6ahkcc/UqirHKy8zCYE/N9KLggxcQvzYCsUBWgdw==, + } + + "@tanstack/query-devtools@5.92.0": + resolution: + { + integrity: sha512-N8D27KH1vEpVacvZgJL27xC6yPFUy0Zkezn5gnB3L3gRCxlDeSuiya7fKge8Y91uMTnC8aSxBQhcK6ocY7alpQ==, + } + + "@tanstack/react-devtools@0.8.4": + resolution: + { + integrity: sha512-fq7GrpHIRdIBa5HmNN+CmC7CopY3tfKE4AXoszNSLk4yHKjC8iEjx7rh4r4RO5iUxHnmoCKX+NPXDgfsIKtaog==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/react": ">=16.8" + "@types/react-dom": ">=16.8" + react: ">=16.8" + react-dom: ">=16.8" + + "@tanstack/react-form@1.27.7": + resolution: + { + integrity: sha512-xTg4qrUY0fuLaSnkATLZcK3BWlnwLp7IuAb6UTbZKngiDEvvDCNTvVvHgPlgef1O2qN4klZxInRyRY6oEkXZ2A==, + } + peerDependencies: + "@tanstack/react-start": "*" + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@tanstack/react-start": + optional: true + + "@tanstack/react-query-devtools@5.91.2": + resolution: + { + integrity: sha512-ZJ1503ay5fFeEYFUdo7LMNFzZryi6B0Cacrgr2h1JRkvikK1khgIq6Nq2EcblqEdIlgB/r7XDW8f8DQ89RuUgg==, + } + peerDependencies: + "@tanstack/react-query": ^5.90.14 + react: ^18 || ^19 + + "@tanstack/react-query@5.90.14": + resolution: + { + integrity: sha512-JAMuULej09hrZ14W9+mxoRZ44rR2BuZfCd6oKTQVNfynQxCN3muH3jh3W46gqZNw5ZqY0ZVaS43Imb3dMr6tgw==, + } + peerDependencies: + react: ^18 || ^19 + + "@tanstack/react-router-devtools@1.141.2": + resolution: + { + integrity: sha512-E55O6sYRCHpTMDB+jDaZ8so4G+/Sg5D/bPvomx35hsHrXEc6RaiGHzzWy0bfrc+PVcmhP2sTTBfVakjJfQolAQ==, + } + engines: { node: ">=12" } + peerDependencies: + "@tanstack/react-router": ^1.141.2 + "@tanstack/router-core": ^1.141.2 + react: ">=18.0.0 || >=19.0.0" + react-dom: ">=18.0.0 || >=19.0.0" + peerDependenciesMeta: + "@tanstack/router-core": + optional: true + + "@tanstack/react-router@1.141.2": + resolution: + { + integrity: sha512-inPEgxYuGPNJvd7wo9BYVKW/BP9GwZO0EaZLBE7+l0RtPcIqAQQLqYhYwb2xikuQg6ueZectj7LObAGivkBpSw==, + } + engines: { node: ">=12" } + peerDependencies: + react: ">=18.0.0 || >=19.0.0" + react-dom: ">=18.0.0 || >=19.0.0" + + "@tanstack/react-store@0.8.0": + resolution: + { + integrity: sha512-1vG9beLIuB7q69skxK9r5xiLN3ztzIPfSQSs0GfeqWGO2tGIyInZx0x1COhpx97RKaONSoAb8C3dxacWksm1ow==, + } + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + "@tanstack/react-table@8.21.3": + resolution: + { + integrity: sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==, + } + engines: { node: ">=12" } + peerDependencies: + react: ">=16.8" + react-dom: ">=16.8" + + "@tanstack/router-core@1.141.2": + resolution: + { + integrity: sha512-6fJSQ+Xcqy6xvB+CTEJljynf5wxQXC/YbtvxAc7wkzBLQwXvwoYrkmUTzqWHFtDZVGKr0cxA+Tg1FikSAZOiQQ==, + } + engines: { node: ">=12" } + + "@tanstack/router-devtools-core@1.141.2": + resolution: + { + integrity: sha512-ZvXuq8ASvIzffyl61BwSdAWh//Tp+wBn0GcSIP/LOrp0f/bW8aODPXm1RSGY2/tXrSjntdP7XPID50YXZdyKfg==, + } + engines: { node: ">=12" } + peerDependencies: + "@tanstack/router-core": ^1.141.2 + csstype: ^3.0.10 + solid-js: ">=1.9.5" + peerDependenciesMeta: + csstype: + optional: true - /@testing-library/jest-dom@6.4.2(@types/jest@29.5.12)(jest@29.7.0): - resolution: {integrity: sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw==} - engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + "@tanstack/router-generator@1.141.2": + resolution: + { + integrity: sha512-90xDdtHE1zHfL5J0sBV06h3H9Rv1qO+gQuGYUEEmRPGxluifx+ivIk/rD/8dpuqcjErofKi8io/DuKxxJ5kOmA==, + } + engines: { node: ">=12" } + + "@tanstack/router-plugin@1.141.2": + resolution: + { + integrity: sha512-9dordZdt1C8D6O5kp5iASa3DDCLGV/7v4MDB9nx0WXKnBRLv9ZpLt58jevIQ6Wov8V9zH5gLWKaRVfiWMAE4Gg==, + } + engines: { node: ">=12" } peerDependencies: - '@jest/globals': '>= 28' - '@types/bun': latest - '@types/jest': '>= 28' - jest: '>= 28' - vitest: '>= 0.32' + "@rsbuild/core": ">=1.0.2" + "@tanstack/react-router": ^1.141.2 + vite: ">=5.0.0 || >=6.0.0 || >=7.0.0" + vite-plugin-solid: ^2.11.10 + webpack: ">=5.92.0" peerDependenciesMeta: - '@jest/globals': + "@rsbuild/core": optional: true - '@types/bun': + "@tanstack/react-router": optional: true - '@types/jest': + vite: optional: true - jest: + vite-plugin-solid: optional: true - vitest: + webpack: optional: true - dependencies: - '@adobe/css-tools': 4.3.3 - '@babel/runtime': 7.24.0 - '@types/jest': 29.5.12 - aria-query: 5.3.0 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.6.3 - jest: 29.7.0(@types/node@20.11.25) - lodash: 4.17.21 - redent: 3.0.0 - dev: true - /@testing-library/react@14.2.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-sGdjws32ai5TLerhvzThYFbpnF9XtL65Cjf+gB0Dhr29BGqK+mAeN7SURSdu+eqgET4ANcWoC7FQpkaiGvBr+A==} - engines: {node: '>=14'} + "@tanstack/router-utils@1.141.0": + resolution: + { + integrity: sha512-/eFGKCiix1SvjxwgzrmH4pHjMiMxc+GA4nIbgEkG2RdAJqyxLcRhd7RPLG0/LZaJ7d0ad3jrtRqsHLv2152Vbw==, + } + engines: { node: ">=12" } + + "@tanstack/store@0.7.7": + resolution: + { + integrity: sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ==, + } + + "@tanstack/store@0.8.0": + resolution: + { + integrity: sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==, + } + + "@tanstack/table-core@8.21.3": + resolution: + { + integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==, + } + engines: { node: ">=12" } + + "@tanstack/virtual-file-routes@1.141.0": + resolution: + { + integrity: sha512-CJrWtr6L9TVzEImm9S7dQINx+xJcYP/aDkIi6gnaWtIgbZs1pnzsE0yJc2noqXZ+yAOqLx3TBGpBEs9tS0P9/A==, + } + engines: { node: ">=12" } + + "@testing-library/dom@10.4.1": + resolution: + { + integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==, + } + engines: { node: ">=18" } + + "@testing-library/react@16.3.0": + resolution: + { + integrity: sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==, + } + engines: { node: ">=18" } peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - dependencies: - '@babel/runtime': 7.24.0 - '@testing-library/dom': 9.3.4 - '@types/react-dom': 18.2.21 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: true + "@testing-library/dom": ^10.0.0 + "@types/react": ^18.0.0 || ^19.0.0 + "@types/react-dom": ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true - /@types/aria-query@5.0.4: - resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - dev: true + "@types/aria-query@5.0.4": + resolution: + { + integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==, + } + + "@types/babel__core@7.20.5": + resolution: + { + integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, + } + + "@types/babel__generator@7.27.0": + resolution: + { + integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==, + } + + "@types/babel__template@7.4.4": + resolution: + { + integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, + } + + "@types/babel__traverse@7.28.0": + resolution: + { + integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==, + } + + "@types/chai@5.2.3": + resolution: + { + integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==, + } + + "@types/deep-eql@4.0.2": + resolution: + { + integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==, + } + + "@types/estree@1.0.8": + resolution: + { + integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, + } + + "@types/har-format@1.2.16": + resolution: + { + integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==, + } + + "@types/json-schema@7.0.15": + resolution: + { + integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, + } + + "@types/node@25.0.2": + resolution: + { + integrity: sha512-gWEkeiyYE4vqjON/+Obqcoeffmk0NF15WSBwSs7zwVA2bAbTaE0SJ7P0WNGoJn8uE7fiaV5a7dKYIJriEqOrmA==, + } + + "@types/react-dom@19.2.3": + resolution: + { + integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==, + } + peerDependencies: + "@types/react": ^19.2.0 + + "@types/react@19.2.7": + resolution: + { + integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==, + } + + "@types/statuses@2.0.6": + resolution: + { + integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==, + } + + "@vitejs/plugin-react@5.1.2": + resolution: + { + integrity: sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + + "@vitest/expect@4.0.15": + resolution: + { + integrity: sha512-Gfyva9/GxPAWXIWjyGDli9O+waHDC0Q0jaLdFP1qPAUUfo1FEXPXUfUkp3eZA0sSq340vPycSyOlYUeM15Ft1w==, + } + + "@vitest/mocker@4.0.15": + resolution: + { + integrity: sha512-CZ28GLfOEIFkvCFngN8Sfx5h+Se0zN+h4B7yOsPVCcgtiO7t5jt9xQh2E1UkFep+eb9fjyMfuC5gBypwb07fvQ==, + } + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - dependencies: - '@babel/parser': 7.24.0 - '@babel/types': 7.24.0 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.5 - dev: true + "@vitest/pretty-format@4.0.15": + resolution: + { + integrity: sha512-SWdqR8vEv83WtZcrfLNqlqeQXlQLh2iilO1Wk1gv4eiHKjEzvgHb2OVc3mIPyhZE6F+CtfYjNlDJwP5MN6Km7A==, + } + + "@vitest/runner@4.0.15": + resolution: + { + integrity: sha512-+A+yMY8dGixUhHmNdPUxOh0la6uVzun86vAbuMT3hIDxMrAOmn5ILBHm8ajrqHE0t8R9T1dGnde1A5DTnmi3qw==, + } + + "@vitest/snapshot@4.0.15": + resolution: + { + integrity: sha512-A7Ob8EdFZJIBjLjeO0DZF4lqR6U7Ydi5/5LIZ0xcI+23lYlsYJAfGn8PrIWTYdZQRNnSRlzhg0zyGu37mVdy5g==, + } + + "@vitest/spy@4.0.15": + resolution: + { + integrity: sha512-+EIjOJmnY6mIfdXtE/bnozKEvTC4Uczg19yeZ2vtCz5Yyb0QQ31QWVQ8hswJ3Ysx/K2EqaNsVanjr//2+P3FHw==, + } + + "@vitest/utils@4.0.15": + resolution: + { + integrity: sha512-HXjPW2w5dxhTD0dLwtYHDnelK3j8sR8cWIaLxr22evTyY6q8pRCjZSmhRWVjBaOVXChQd6AwMzi9pucorXCPZA==, + } + + "@yellow-ticket/seed-json-schema@0.1.6": + resolution: + { + integrity: sha512-RtI85ohEQpARt8qRLeqglOpPFu/00YGmw3Mi7iNphbjoDCwm4QrZWnVBy9uEn2veUC6fuw0GHjHAFzAfJxaEZQ==, + } + + acorn@8.15.0: + resolution: + { + integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==, + } + engines: { node: ">=0.4.0" } + hasBin: true - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - dependencies: - '@babel/types': 7.24.0 - dev: true + agent-base@7.1.4: + resolution: + { + integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==, + } + engines: { node: ">= 14" } + + ansi-colors@4.1.3: + resolution: + { + integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==, + } + engines: { node: ">=6" } + + ansi-regex@5.0.1: + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, + } + engines: { node: ">=8" } + + ansi-styles@4.3.0: + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, + } + engines: { node: ">=8" } + + ansi-styles@5.2.0: + resolution: + { + integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, + } + engines: { node: ">=10" } + + ansis@4.2.0: + resolution: + { + integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==, + } + engines: { node: ">=14" } + + anymatch@3.1.3: + resolution: + { + integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, + } + engines: { node: ">= 8" } + + argparse@2.0.1: + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, + } + + aria-hidden@1.2.6: + resolution: + { + integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==, + } + engines: { node: ">=10" } + + aria-query@5.3.0: + resolution: + { + integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==, + } + + assertion-error@2.0.1: + resolution: + { + integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, + } + engines: { node: ">=12" } + + ast-types@0.16.1: + resolution: + { + integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==, + } + engines: { node: ">=4" } + + babel-dead-code-elimination@1.0.10: + resolution: + { + integrity: sha512-DV5bdJZTzZ0zn0DC24v3jD7Mnidh6xhKa4GfKCbq3sfW8kaWhDdZjP3i81geA8T33tdYqWKw4D3fVv0CwEgKVA==, + } + + balanced-match@1.0.2: + resolution: + { + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, + } + + baseline-browser-mapping@2.9.7: + resolution: + { + integrity: sha512-k9xFKplee6KIio3IDbwj+uaCLpqzOwakOgmqzPezM0sFJlFKcg30vk2wOiAJtkTSfx0SSQDSe8q+mWA/fSH5Zg==, + } + hasBin: true - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - dependencies: - '@babel/parser': 7.24.0 - '@babel/types': 7.24.0 - dev: true + bidi-js@1.0.3: + resolution: + { + integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==, + } + + binary-extensions@2.3.0: + resolution: + { + integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==, + } + engines: { node: ">=8" } + + brace-expansion@2.0.2: + resolution: + { + integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==, + } + + braces@3.0.3: + resolution: + { + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, + } + engines: { node: ">=8" } + + browserslist@4.28.1: + resolution: + { + integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==, + } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + hasBin: true - /@types/babel__traverse@7.20.5: - resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} - dependencies: - '@babel/types': 7.24.0 - dev: true + caniuse-lite@1.0.30001760: + resolution: + { + integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==, + } + + chai@6.2.1: + resolution: + { + integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==, + } + engines: { node: ">=18" } + + chalk@5.6.2: + resolution: + { + integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==, + } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } + + change-case@5.4.4: + resolution: + { + integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==, + } + + chokidar@3.6.0: + resolution: + { + integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==, + } + engines: { node: ">= 8.10.0" } + + class-variance-authority@0.7.1: + resolution: + { + integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==, + } + + cli-width@4.1.0: + resolution: + { + integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==, + } + engines: { node: ">= 12" } + + cliui@8.0.1: + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, + } + engines: { node: ">=12" } + + clsx@2.1.1: + resolution: + { + integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, + } + engines: { node: ">=6" } + + cmdk@1.1.1: + resolution: + { + integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==, + } + peerDependencies: + react: ^18 || ^19 || ^19.0.0-rc + react-dom: ^18 || ^19 || ^19.0.0-rc + + color-convert@2.0.1: + resolution: + { + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, + } + engines: { node: ">=7.0.0" } + + color-name@1.1.4: + resolution: + { + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, + } + + colorette@1.4.0: + resolution: + { + integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==, + } + + convert-source-map@2.0.0: + resolution: + { + integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, + } + + cookie-es@2.0.0: + resolution: + { + integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==, + } + + cookie@1.1.1: + resolution: + { + integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==, + } + engines: { node: ">=18" } + + css-tree@3.1.0: + resolution: + { + integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==, + } + engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0 } + + cssstyle@5.3.4: + resolution: + { + integrity: sha512-KyOS/kJMEq5O9GdPnaf82noigg5X5DYn0kZPJTaAsCUaBizp6Xa1y9D4Qoqf/JazEXWuruErHgVXwjN5391ZJw==, + } + engines: { node: ">=20" } + + csstype@3.2.3: + resolution: + { + integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==, + } + + data-urls@6.0.0: + resolution: + { + integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==, + } + engines: { node: ">=20" } + + debug@4.4.3: + resolution: + { + integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, + } + engines: { node: ">=6.0" } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true - /@types/geojson@7946.0.14: - resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==} - dev: true + decimal.js@10.6.0: + resolution: + { + integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==, + } + + dequal@2.0.3: + resolution: + { + integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, + } + engines: { node: ">=6" } + + detect-libc@2.1.2: + resolution: + { + integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, + } + engines: { node: ">=8" } + + detect-node-es@1.1.0: + resolution: + { + integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==, + } + + diff@8.0.2: + resolution: + { + integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==, + } + engines: { node: ">=0.3.1" } + + dom-accessibility-api@0.5.16: + resolution: + { + integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==, + } + + drange@1.1.1: + resolution: + { + integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==, + } + engines: { node: ">=4" } + + electron-to-chromium@1.5.267: + resolution: + { + integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==, + } + + emoji-regex@8.0.0: + resolution: + { + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, + } + + enhanced-resolve@5.18.4: + resolution: + { + integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==, + } + engines: { node: ">=10.13.0" } + + entities@6.0.1: + resolution: + { + integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==, + } + engines: { node: ">=0.12" } + + es-module-lexer@1.7.0: + resolution: + { + integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==, + } + + esbuild@0.25.12: + resolution: + { + integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==, + } + engines: { node: ">=18" } + hasBin: true - /@types/graceful-fs@4.1.9: - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - dependencies: - '@types/node': 20.11.25 - dev: true + esbuild@0.27.1: + resolution: + { + integrity: sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==, + } + engines: { node: ">=18" } + hasBin: true - /@types/istanbul-lib-coverage@2.0.6: - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - dev: true + escalade@3.2.0: + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, + } + engines: { node: ">=6" } + + esprima@4.0.1: + resolution: + { + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, + } + engines: { node: ">=4" } + hasBin: true - /@types/istanbul-lib-report@3.0.3: - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - dev: true + estree-walker@3.0.3: + resolution: + { + integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, + } + + expect-type@1.3.0: + resolution: + { + integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==, + } + engines: { node: ">=12.0.0" } + + fast-deep-equal@3.1.3: + resolution: + { + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, + } + + fast-uri@3.1.0: + resolution: + { + integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==, + } + + fdir@6.5.0: + resolution: + { + integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, + } + engines: { node: ">=12.0.0" } + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true - /@types/istanbul-reports@3.0.4: - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - dependencies: - '@types/istanbul-lib-report': 3.0.3 - dev: true + fill-range@7.1.1: + resolution: + { + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, + } + engines: { node: ">=8" } + + fsevents@2.3.3: + resolution: + { + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [darwin] - /@types/jest@29.5.12: - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - dev: true + gensync@1.0.0-beta.2: + resolution: + { + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, + } + engines: { node: ">=6.9.0" } + + get-caller-file@2.0.5: + resolution: + { + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, + } + engines: { node: 6.* || 8.* || >= 10.* } + + get-nonce@1.0.1: + resolution: + { + integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==, + } + engines: { node: ">=6" } + + get-tsconfig@4.13.0: + resolution: + { + integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==, + } + + glob-parent@5.1.2: + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, + } + engines: { node: ">= 6" } + + goober@2.1.18: + resolution: + { + integrity: sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==, + } + peerDependencies: + csstype: ^3.0.10 + + graceful-fs@4.2.11: + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, + } + + graphql@16.12.0: + resolution: + { + integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==, + } + engines: { node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0 } + + headers-polyfill@4.0.3: + resolution: + { + integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==, + } + + html-encoding-sniffer@4.0.0: + resolution: + { + integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==, + } + engines: { node: ">=18" } + + http-proxy-agent@7.0.2: + resolution: + { + integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==, + } + engines: { node: ">= 14" } + + https-proxy-agent@7.0.6: + resolution: + { + integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==, + } + engines: { node: ">= 14" } + + iconv-lite@0.6.3: + resolution: + { + integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, + } + engines: { node: ">=0.10.0" } + + index-to-position@1.2.0: + resolution: + { + integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==, + } + engines: { node: ">=18" } + + is-binary-path@2.1.0: + resolution: + { + integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, + } + engines: { node: ">=8" } + + is-extglob@2.1.1: + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: ">=0.10.0" } + + is-fullwidth-code-point@3.0.0: + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, + } + engines: { node: ">=8" } + + is-glob@4.0.3: + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: ">=0.10.0" } + + is-node-process@1.2.0: + resolution: + { + integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==, + } + + is-number@7.0.0: + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: ">=0.12.0" } + + is-potential-custom-element-name@1.0.1: + resolution: + { + integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==, + } + + isbot@5.1.32: + resolution: + { + integrity: sha512-VNfjM73zz2IBZmdShMfAUg10prm6t7HFUQmNAEOAVS4YH92ZrZcvkMcGX6cIgBJAzWDzPent/EeAtYEHNPNPBQ==, + } + engines: { node: ">=18" } + + jiti@2.6.1: + resolution: + { + integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==, + } + hasBin: true - /@types/jsdom@20.0.1: - resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} - dependencies: - '@types/node': 20.11.25 - '@types/tough-cookie': 4.0.5 - parse5: 7.1.2 - dev: true + js-levenshtein@1.1.6: + resolution: + { + integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==, + } + engines: { node: ">=0.10.0" } + + js-tokens@4.0.0: + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } + + js-yaml@4.1.1: + resolution: + { + integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==, + } + hasBin: true - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true + jsdom@27.3.0: + resolution: + { + integrity: sha512-GtldT42B8+jefDUC4yUKAvsaOrH7PDHmZxZXNgF2xMmymjUbRYJvpAybZAKEmXDGTM0mCsz8duOa4vTm5AY2Kg==, + } + engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true + jsesc@3.1.0: + resolution: + { + integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, + } + engines: { node: ">=6" } + hasBin: true - /@types/mapbox-gl@3.1.0: - resolution: {integrity: sha512-hI6cQDjw1bkJw7MC/eHMqq5TWUamLwsujnUUeiIX2KDRjxRNSYMjnHz07+LATz9I9XIsKumOtUz4gRYnZOJ/FA==} - dependencies: - '@types/geojson': 7946.0.14 - dev: true + json-schema-traverse@1.0.0: + resolution: + { + integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, + } + + json5@2.2.3: + resolution: + { + integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, + } + engines: { node: ">=6" } + hasBin: true - /@types/node@20.11.25: - resolution: {integrity: sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==} - dependencies: - undici-types: 5.26.5 - dev: true + jsonc-parser@2.2.1: + resolution: + { + integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==, + } + + launch-editor@2.12.0: + resolution: + { + integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==, + } + + lightningcss-android-arm64@1.30.2: + resolution: + { + integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.30.2: + resolution: + { + integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [darwin] - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true + lightningcss-darwin-x64@1.30.2: + resolution: + { + integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [darwin] - /@types/parse-json@4.0.2: - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - dev: false + lightningcss-freebsd-x64@1.30.2: + resolution: + { + integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: + { + integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm] + os: [linux] - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + lightningcss-linux-arm64-gnu@1.30.2: + resolution: + { + integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [linux] - /@types/react-dom@18.2.21: - resolution: {integrity: sha512-gnvBA/21SA4xxqNXEwNiVcP0xSGHh/gi1VhWv9Bl46a0ItbTT5nFY+G9VSQpaG/8N/qdJpJ+vftQ4zflTtnjLw==} - dependencies: - '@types/react': 18.2.64 - dev: true + lightningcss-linux-arm64-musl@1.30.2: + resolution: + { + integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [linux] - /@types/react-syntax-highlighter@15.5.11: - resolution: {integrity: sha512-ZqIJl+Pg8kD+47kxUjvrlElrraSUrYa4h0dauY/U/FTUuprSCqvUj+9PNQNQzVc6AJgIWUUxn87/gqsMHNbRjw==} - dependencies: - '@types/react': 18.2.64 - dev: true + lightningcss-linux-x64-gnu@1.30.2: + resolution: + { + integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [linux] - /@types/react-transition-group@4.4.10: - resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} - dependencies: - '@types/react': 18.2.64 - dev: false + lightningcss-linux-x64-musl@1.30.2: + resolution: + { + integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [linux] - /@types/react@18.2.64: - resolution: {integrity: sha512-MlmPvHgjj2p3vZaxbQgFUQFvD8QiZwACfGqEdDSWou5yISWxDQ4/74nCAwsUiX7UFLKZz3BbVSPj+YxeoGGCfg==} - dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 - csstype: 3.1.3 + lightningcss-win32-arm64-msvc@1.30.2: + resolution: + { + integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [win32] - /@types/scheduler@0.16.8: - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + lightningcss-win32-x64-msvc@1.30.2: + resolution: + { + integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [win32] - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true + lightningcss@1.30.2: + resolution: + { + integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==, + } + engines: { node: ">= 12.0.0" } + + lodash@4.17.21: + resolution: + { + integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, + } + + lru-cache@11.2.4: + resolution: + { + integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==, + } + engines: { node: 20 || >=22 } + + lru-cache@5.1.1: + resolution: + { + integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, + } + + lucide-react@0.561.0: + resolution: + { + integrity: sha512-Y59gMY38tl4/i0qewcqohPdEbieBy7SovpBL9IFebhc2mDd8x4PZSOsiFRkpPcOq6bj1r/mjH/Rk73gSlIJP2A==, + } + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - /@types/stack-utils@2.0.3: - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - dev: true + lz-string@1.5.0: + resolution: + { + integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==, + } + hasBin: true - /@types/tough-cookie@4.0.5: - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - dev: true + magic-string@0.30.21: + resolution: + { + integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, + } + + mdn-data@2.12.2: + resolution: + { + integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==, + } + + minimatch@5.1.6: + resolution: + { + integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, + } + engines: { node: ">=10" } + + ms@2.1.3: + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } + + msw@2.12.7: + resolution: + { + integrity: sha512-retd5i3xCZDVWMYjHEVuKTmhqY8lSsxujjVrZiGbbdoxxIBg5S7rCuYy/YQpfrTYIxpd/o0Kyb/3H+1udBMoYg==, + } + engines: { node: ">=18" } + hasBin: true + peerDependencies: + typescript: ">= 4.8.x" + peerDependenciesMeta: + typescript: + optional: true - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - dev: true + mute-stream@2.0.0: + resolution: + { + integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==, + } + engines: { node: ^18.17.0 || >=20.5.0 } + + nanoid@3.3.11: + resolution: + { + integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==, + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + hasBin: true - /@types/yargs@17.0.32: - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: true + next-themes@0.4.6: + resolution: + { + integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==, + } + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + node-releases@2.0.27: + resolution: + { + integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==, + } + + normalize-path@3.0.0: + resolution: + { + integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, + } + engines: { node: ">=0.10.0" } + + obug@2.1.1: + resolution: + { + integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==, + } + + openapi-fetch@0.15.0: + resolution: + { + integrity: sha512-OjQUdi61WO4HYhr9+byCPMj0+bgste/LtSBEcV6FzDdONTs7x0fWn8/ndoYwzqCsKWIxEZwo4FN/TG1c1rI8IQ==, + } + + openapi-react-query@0.5.1: + resolution: + { + integrity: sha512-BzUDxICV9v8584pBiGM9jgCqSBBp/mP91SJ68Pu7PqeppqfWxazi3vVaMup5Acjxv3cN9GbV6xuVHfbGsJfexw==, + } + peerDependencies: + "@tanstack/react-query": ^5.80.0 + openapi-fetch: ^0.15.0 + + openapi-types@12.1.3: + resolution: + { + integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==, + } + + openapi-typescript-helpers@0.0.15: + resolution: + { + integrity: sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==, + } + + openapi-typescript@7.10.1: + resolution: + { + integrity: sha512-rBcU8bjKGGZQT4K2ekSTY2Q5veOQbVG/lTKZ49DeCyT9z62hM2Vj/LLHjDHC9W7LJG8YMHcdXpRZDqC1ojB/lw==, + } + hasBin: true + peerDependencies: + typescript: ^5.x + + outvariant@1.4.3: + resolution: + { + integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==, + } + + parse-json@8.3.0: + resolution: + { + integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==, + } + engines: { node: ">=18" } + + parse5@8.0.0: + resolution: + { + integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==, + } + + path-to-regexp@6.3.0: + resolution: + { + integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==, + } + + pathe@2.0.3: + resolution: + { + integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==, + } + + picocolors@1.1.1: + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, + } + + picomatch@2.3.1: + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, + } + engines: { node: ">=8.6" } + + picomatch@4.0.3: + resolution: + { + integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==, + } + engines: { node: ">=12" } + + pluralize@8.0.0: + resolution: + { + integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==, + } + engines: { node: ">=4" } + + postcss@8.5.6: + resolution: + { + integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==, + } + engines: { node: ^10 || ^12 || >=14 } + + prettier@3.7.4: + resolution: + { + integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==, + } + engines: { node: ">=14" } + hasBin: true - /@typescript-eslint/eslint-plugin@7.1.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw==} - engines: {node: ^16.0.0 || >=18.0.0} + pretty-format@27.5.1: + resolution: + { + integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==, + } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } + + punycode@2.3.1: + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + } + engines: { node: ">=6" } + + randexp@0.5.3: + resolution: + { + integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==, + } + engines: { node: ">=4" } + + react-dom@19.2.3: + resolution: + { + integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==, + } + peerDependencies: + react: ^19.2.3 + + react-is@17.0.2: + resolution: + { + integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==, + } + + react-refresh@0.18.0: + resolution: + { + integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==, + } + engines: { node: ">=0.10.0" } + + react-remove-scroll-bar@2.3.8: + resolution: + { + integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==, + } + engines: { node: ">=10" } peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: - typescript: + "@types/react": optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.4.2) - '@typescript-eslint/scope-manager': 7.1.1 - '@typescript-eslint/type-utils': 7.1.1(eslint@8.57.0)(typescript@5.4.2) - '@typescript-eslint/utils': 7.1.1(eslint@8.57.0)(typescript@5.4.2) - '@typescript-eslint/visitor-keys': 7.1.1 - debug: 4.3.4 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.6.0 - ts-api-utils: 1.2.1(typescript@5.4.2) - typescript: 5.4.2 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} + react-remove-scroll@2.7.2: + resolution: + { + integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==, + } + engines: { node: ">=10" } peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - typescript: + "@types/react": optional: true - dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.2) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 - eslint: 8.57.0 - typescript: 5.4.2 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ==} - engines: {node: ^16.0.0 || >=18.0.0} + react-style-singleton@2.2.3: + resolution: + { + integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==, + } + engines: { node: ">=10" } peerDependencies: - eslint: ^8.56.0 - typescript: '*' + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - typescript: + "@types/react": optional: true - dependencies: - '@typescript-eslint/scope-manager': 7.1.1 - '@typescript-eslint/types': 7.1.1 - '@typescript-eslint/typescript-estree': 7.1.1(typescript@5.4.2) - '@typescript-eslint/visitor-keys': 7.1.1 - debug: 4.3.4 - eslint: 8.57.0 - typescript: 5.4.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - dev: true - /@typescript-eslint/scope-manager@6.21.0: - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - dev: true + react@19.2.3: + resolution: + { + integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==, + } + engines: { node: ">=0.10.0" } + + readdirp@3.6.0: + resolution: + { + integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, + } + engines: { node: ">=8.10.0" } + + recast@0.23.11: + resolution: + { + integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==, + } + engines: { node: ">= 4" } + + require-directory@2.1.1: + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, + } + engines: { node: ">=0.10.0" } + + require-from-string@2.0.2: + resolution: + { + integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, + } + engines: { node: ">=0.10.0" } + + resolve-pkg-maps@1.0.0: + resolution: + { + integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, + } + + ret@0.2.2: + resolution: + { + integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==, + } + engines: { node: ">=4" } + + rettime@0.7.0: + resolution: + { + integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==, + } + + rollup@4.53.3: + resolution: + { + integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==, + } + engines: { node: ">=18.0.0", npm: ">=8.0.0" } + hasBin: true - /@typescript-eslint/scope-manager@7.1.1: - resolution: {integrity: sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 7.1.1 - '@typescript-eslint/visitor-keys': 7.1.1 - dev: true + safe-stable-stringify@1.1.1: + resolution: + { + integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==, + } + + safer-buffer@2.1.2: + resolution: + { + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, + } + + saxes@6.0.0: + resolution: + { + integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==, + } + engines: { node: ">=v12.22.7" } + + scheduler@0.27.0: + resolution: + { + integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==, + } + + semver@6.3.1: + resolution: + { + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, + } + hasBin: true - /@typescript-eslint/type-utils@7.1.1(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g==} - engines: {node: ^16.0.0 || >=18.0.0} + seroval-plugins@1.3.3: + resolution: + { + integrity: sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==, + } + engines: { node: ">=10" } peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 7.1.1(typescript@5.4.2) - '@typescript-eslint/utils': 7.1.1(eslint@8.57.0)(typescript@5.4.2) - debug: 4.3.4 - eslint: 8.57.0 - ts-api-utils: 1.2.1(typescript@5.4.2) - typescript: 5.4.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@typescript-eslint/types@6.21.0: - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true - - /@typescript-eslint/types@7.1.1: - resolution: {integrity: sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true - - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.2): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + seroval: ^1.0 + + seroval-plugins@1.4.0: + resolution: + { + integrity: sha512-zir1aWzoiax6pbBVjoYVd0O1QQXgIL3eVGBMsBsNmM8Ukq90yGaWlfx0AB9dTS8GPqrOrbXn79vmItCUP9U3BQ==, + } + engines: { node: ">=10" } peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.2) - typescript: 5.4.2 - transitivePeerDependencies: - - supports-color - dev: true + seroval: ^1.0 + + seroval@1.3.2: + resolution: + { + integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==, + } + engines: { node: ">=10" } + + seroval@1.4.0: + resolution: + { + integrity: sha512-BdrNXdzlofomLTiRnwJTSEAaGKyHHZkbMXIywOh7zlzp4uZnXErEwl9XZ+N1hJSNpeTtNxWvVwN0wUzAIQ4Hpg==, + } + engines: { node: ">=10" } + + shell-quote@1.8.3: + resolution: + { + integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==, + } + engines: { node: ">= 0.4" } + + siginfo@2.0.0: + resolution: + { + integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, + } + + signal-exit@4.1.0: + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, + } + engines: { node: ">=14" } + + solid-js@1.9.10: + resolution: + { + integrity: sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==, + } + + sonner@2.0.7: + resolution: + { + integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==, + } + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + source-map-js@1.2.1: + resolution: + { + integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, + } + engines: { node: ">=0.10.0" } + + source-map@0.6.1: + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, + } + engines: { node: ">=0.10.0" } + + source-map@0.7.6: + resolution: + { + integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==, + } + engines: { node: ">= 12" } + + stackback@0.0.2: + resolution: + { + integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, + } + + statuses@2.0.2: + resolution: + { + integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==, + } + engines: { node: ">= 0.8" } + + std-env@3.10.0: + resolution: + { + integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==, + } + + strict-event-emitter@0.5.1: + resolution: + { + integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==, + } + + string-width@4.2.3: + resolution: + { + integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, + } + engines: { node: ">=8" } + + strip-ansi@6.0.1: + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, + } + engines: { node: ">=8" } + + supports-color@10.2.2: + resolution: + { + integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==, + } + engines: { node: ">=18" } + + symbol-tree@3.2.4: + resolution: + { + integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==, + } + + tagged-tag@1.0.0: + resolution: + { + integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==, + } + engines: { node: ">=20" } + + tailwind-merge@3.4.0: + resolution: + { + integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==, + } + + tailwindcss@4.1.18: + resolution: + { + integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==, + } + + tapable@2.3.0: + resolution: + { + integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==, + } + engines: { node: ">=6" } + + tiny-invariant@1.3.3: + resolution: + { + integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==, + } + + tiny-warning@1.0.3: + resolution: + { + integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==, + } + + tinybench@2.9.0: + resolution: + { + integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==, + } + + tinyexec@1.0.2: + resolution: + { + integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==, + } + engines: { node: ">=18" } + + tinyglobby@0.2.15: + resolution: + { + integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==, + } + engines: { node: ">=12.0.0" } + + tinyrainbow@3.0.3: + resolution: + { + integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==, + } + engines: { node: ">=14.0.0" } + + tldts-core@7.0.19: + resolution: + { + integrity: sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==, + } + + tldts@7.0.19: + resolution: + { + integrity: sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==, + } + hasBin: true + + to-regex-range@5.0.1: + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: ">=8.0" } + + tough-cookie@6.0.0: + resolution: + { + integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==, + } + engines: { node: ">=16" } + + tr46@6.0.0: + resolution: + { + integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==, + } + engines: { node: ">=20" } + + tslib@2.8.1: + resolution: + { + integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, + } + + tsx@4.21.0: + resolution: + { + integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==, + } + engines: { node: ">=18.0.0" } + hasBin: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.2): - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} + tw-animate-css@1.4.0: + resolution: + { + integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==, + } + + type-fest@4.41.0: + resolution: + { + integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==, + } + engines: { node: ">=16" } + + type-fest@5.3.1: + resolution: + { + integrity: sha512-VCn+LMHbd4t6sF3wfU/+HKT63C9OoyrSIf4b+vtWHpt2U7/4InZG467YDNMFMR70DdHjAdpPWmw2lzRdg0Xqqg==, + } + engines: { node: ">=20" } + + typescript@5.9.3: + resolution: + { + integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==, + } + engines: { node: ">=14.17" } + hasBin: true + + undici-types@7.16.0: + resolution: + { + integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==, + } + + unplugin@2.3.11: + resolution: + { + integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==, + } + engines: { node: ">=18.12.0" } + + until-async@3.0.2: + resolution: + { + integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==, + } + + update-browserslist-db@1.2.2: + resolution: + { + integrity: sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==, + } + hasBin: true peerDependencies: - typescript: '*' + browserslist: ">= 4.21.0" + + use-callback-ref@1.3.3: + resolution: + { + integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==, + } + engines: { node: ">=10" } + peerDependencies: + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - typescript: + "@types/react": optional: true - 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.6.0 - ts-api-utils: 1.2.1(typescript@5.4.2) - typescript: 5.4.2 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/typescript-estree@7.1.1(typescript@5.4.2): - resolution: {integrity: sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==} - engines: {node: ^16.0.0 || >=18.0.0} + use-sidecar@1.1.3: + resolution: + { + integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==, + } + engines: { node: ">=10" } peerDependencies: - typescript: '*' + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - typescript: + "@types/react": optional: true - dependencies: - '@typescript-eslint/types': 7.1.1 - '@typescript-eslint/visitor-keys': 7.1.1 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.0 - ts-api-utils: 1.2.1(typescript@5.4.2) - typescript: 5.4.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.2) - eslint: 8.57.0 - eslint-scope: 5.1.1 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} + use-sync-external-store@1.6.0: + resolution: + { + integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==, + } peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.2) - eslint: 8.57.0 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/utils@7.1.1(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg==} - engines: {node: ^16.0.0 || >=18.0.0} + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + utility-types@3.11.0: + resolution: + { + integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==, + } + engines: { node: ">= 4" } + + vite@7.2.7: + resolution: + { + integrity: sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + hasBin: true peerDependencies: - eslint: ^8.56.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.1.1 - '@typescript-eslint/types': 7.1.1 - '@typescript-eslint/typescript-estree': 7.1.1(typescript@5.4.2) - eslint: 8.57.0 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@typescript-eslint/visitor-keys@6.21.0: - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@typescript-eslint/visitor-keys@7.1.1: - resolution: {integrity: sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 7.1.1 - eslint-visitor-keys: 3.4.3 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true - /@vercel/style-guide@6.0.0(eslint@8.57.0)(jest@29.7.0)(prettier@3.2.5)(typescript@5.4.2): - resolution: {integrity: sha512-tu0wFINGz91EPwaT5VjSqUwbvCY9pvLach7SPG4XyfJKPU9Vku2TFa6+AyzJ4oroGbo9fK+TQhIFHrnFl0nCdg==} - engines: {node: '>=18.18'} + vitest@4.0.15: + resolution: + { + integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==, + } + engines: { node: ^20.0.0 || ^22.0.0 || >=24.0.0 } + hasBin: true peerDependencies: - '@next/eslint-plugin-next': '>=12.3.0 <15.0.0-0' - eslint: '>=8.48.0 <9' - prettier: '>=3.0.0 <4' - typescript: '>=4.8.0 <6' + "@edge-runtime/vm": "*" + "@opentelemetry/api": ^1.9.0 + "@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0 + "@vitest/browser-playwright": 4.0.15 + "@vitest/browser-preview": 4.0.15 + "@vitest/browser-webdriverio": 4.0.15 + "@vitest/ui": 4.0.15 + happy-dom: "*" + jsdom: "*" peerDependenciesMeta: - '@next/eslint-plugin-next': + "@edge-runtime/vm": optional: true - eslint: + "@opentelemetry/api": optional: true - prettier: + "@types/node": optional: true - typescript: + "@vitest/browser-playwright": + optional: true + "@vitest/browser-preview": + optional: true + "@vitest/browser-webdriverio": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: optional: true - dependencies: - '@babel/core': 7.24.0 - '@babel/eslint-parser': 7.23.10(@babel/core@7.24.0)(eslint@8.57.0) - '@rushstack/eslint-patch': 1.7.2 - '@typescript-eslint/eslint-plugin': 7.1.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0)(typescript@5.4.2) - '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.4.2) - eslint: 8.57.0 - eslint-config-prettier: 9.1.0(eslint@8.57.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.1.1)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.1.1)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.2) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-playwright: 1.5.2(eslint-plugin-jest@27.9.0)(eslint@8.57.0) - eslint-plugin-react: 7.34.0(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.4.2) - eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 51.0.1(eslint@8.57.0) - eslint-plugin-vitest: 0.3.22(@typescript-eslint/eslint-plugin@7.1.1)(eslint@8.57.0)(typescript@5.4.2) - prettier: 3.2.5 - prettier-plugin-packagejson: 2.4.12(prettier@3.2.5) - typescript: 5.4.2 - transitivePeerDependencies: - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - jest - - supports-color - - vitest - dev: true - - /@yr/monotone-cubic-spline@1.0.3: - resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} - dev: false - - /abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - deprecated: Use your platform's native atob() and btoa() methods instead - dev: true - /acorn-globals@7.0.1: - resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} - dependencies: - acorn: 8.11.3 - acorn-walk: 8.3.2 - dev: true + w3c-xmlserializer@5.0.0: + resolution: + { + integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==, + } + engines: { node: ">=18" } + + web-vitals@5.1.0: + resolution: + { + integrity: sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg==, + } + + webidl-conversions@8.0.0: + resolution: + { + integrity: sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==, + } + engines: { node: ">=20" } + + webpack-virtual-modules@0.6.2: + resolution: + { + integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==, + } + + whatwg-encoding@3.1.1: + resolution: + { + integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==, + } + engines: { node: ">=18" } + + whatwg-mimetype@4.0.0: + resolution: + { + integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==, + } + engines: { node: ">=18" } + + whatwg-url@15.1.0: + resolution: + { + integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==, + } + engines: { node: ">=20" } + + why-is-node-running@2.3.0: + resolution: + { + integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==, + } + engines: { node: ">=8" } + hasBin: true - /acorn-jsx@5.3.2(acorn@8.11.3): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + wrap-ansi@6.2.0: + resolution: + { + integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, + } + engines: { node: ">=8" } + + wrap-ansi@7.0.0: + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, + } + engines: { node: ">=10" } + + ws@8.18.3: + resolution: + { + integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==, + } + engines: { node: ">=10.0.0" } peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.3 - dev: true - - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - dev: true + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} + xml-name-validator@5.0.0: + resolution: + { + integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==, + } + engines: { node: ">=18" } + + xmlchars@2.2.0: + resolution: + { + integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==, + } + + y18n@5.0.8: + resolution: + { + integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, + } + engines: { node: ">=10" } + + yallist@3.1.1: + resolution: + { + integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, + } + + yaml-ast-parser@0.0.43: + resolution: + { + integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==, + } + + yaml@2.8.2: + resolution: + { + integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==, + } + engines: { node: ">= 14.6" } hasBin: true - dev: true - - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + yargs-parser@21.1.1: + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, + } + engines: { node: ">=12" } + + yargs@17.7.2: + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, + } + engines: { node: ">=12" } + + yoctocolors-cjs@2.1.3: + resolution: + { + integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==, + } + engines: { node: ">=18" } + + zod@3.25.76: + resolution: + { + integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==, + } + + zod@4.2.1: + resolution: + { + integrity: sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==, + } + +snapshots: + "@acemir/cssom@0.9.29": {} + + "@asamuzakjp/css-color@4.1.0": + dependencies: + "@csstools/css-calc": 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + "@csstools/css-color-parser": 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + "@csstools/css-parser-algorithms": 3.0.5(@csstools/css-tokenizer@3.0.4) + "@csstools/css-tokenizer": 3.0.4 + lru-cache: 11.2.4 + + "@asamuzakjp/dom-selector@6.7.6": + dependencies: + "@asamuzakjp/nwsapi": 2.3.9 + bidi-js: 1.0.3 + css-tree: 3.1.0 + is-potential-custom-element-name: 1.0.1 + lru-cache: 11.2.4 - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true + "@asamuzakjp/nwsapi@2.3.9": {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + "@babel/code-frame@7.27.1": dependencies: - color-convert: 1.9.3 + "@babel/helper-validator-identifier": 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + "@babel/compat-data@7.28.5": {} + + "@babel/core@7.28.5": + dependencies: + "@babel/code-frame": 7.27.1 + "@babel/generator": 7.28.5 + "@babel/helper-compilation-targets": 7.27.2 + "@babel/helper-module-transforms": 7.28.3(@babel/core@7.28.5) + "@babel/helpers": 7.28.4 + "@babel/parser": 7.28.5 + "@babel/template": 7.27.2 + "@babel/traverse": 7.28.5 + "@babel/types": 7.28.5 + "@jridgewell/remapping": 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3(supports-color@10.2.2) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + "@babel/generator@7.28.5": dependencies: - color-convert: 2.0.1 - dev: true - - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true - - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + "@babel/parser": 7.28.5 + "@babel/types": 7.28.5 + "@jridgewell/gen-mapping": 0.3.13 + "@jridgewell/trace-mapping": 0.3.31 + jsesc: 3.1.0 - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true + "@babel/helper-annotate-as-pure@7.27.3": + dependencies: + "@babel/types": 7.28.5 - /apexcharts@3.46.0: - resolution: {integrity: sha512-ELAY6vj8JQD7QLktKasTzwm9Wt0qxqfQSo+3QWS7G7I774iK8HCkG1toGsqJH0mkK6PtYBtnSIe66uUcwoCw1w==} + "@babel/helper-compilation-targets@7.27.2": dependencies: - '@yr/monotone-cubic-spline': 1.0.3 - svg.draggable.js: 2.2.2 - svg.easing.js: 2.0.0 - svg.filter.js: 2.0.2 - svg.pathmorphing.js: 0.1.3 - svg.resize.js: 1.4.3 - svg.select.js: 3.0.1 - dev: false + "@babel/compat-data": 7.28.5 + "@babel/helper-validator-option": 7.27.1 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 6.3.1 - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + "@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)": dependencies: - sprintf-js: 1.0.3 - dev: true + "@babel/core": 7.28.5 + "@babel/helper-annotate-as-pure": 7.27.3 + "@babel/helper-member-expression-to-functions": 7.28.5 + "@babel/helper-optimise-call-expression": 7.27.1 + "@babel/helper-replace-supers": 7.27.1(@babel/core@7.28.5) + "@babel/helper-skip-transparent-expression-wrappers": 7.27.1 + "@babel/traverse": 7.28.5 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + "@babel/helper-globals@7.28.0": {} - /aria-query@5.1.3: - resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + "@babel/helper-member-expression-to-functions@7.28.5": dependencies: - deep-equal: 2.2.3 - dev: true + "@babel/traverse": 7.28.5 + "@babel/types": 7.28.5 + transitivePeerDependencies: + - supports-color - /aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + "@babel/helper-module-imports@7.27.1": dependencies: - dequal: 2.0.3 - dev: true - - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - dev: true - - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - dev: true - - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true - - /array.prototype.filter@1.0.3: - resolution: {integrity: sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - es-array-method-boxes-properly: 1.0.0 - is-string: 1.0.7 - dev: true - - /array.prototype.findlast@1.2.4: - resolution: {integrity: sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.findlastindex@1.2.4: - resolution: {integrity: sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.toreversed@1.1.2: - resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.tosorted@1.1.3: - resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 - dev: true - - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - dev: true - - /ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - dev: true - - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - dependencies: - has-symbols: 1.0.3 - dev: true - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true - - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - dependencies: - possible-typed-array-names: 1.0.0 - dev: true - - /axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - dev: true - - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - dependencies: - dequal: 2.0.3 - dev: true - - /babel-jest@29.7.0(@babel/core@7.24.0): - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.24.0 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.0) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 + "@babel/traverse": 7.28.5 + "@babel/types": 7.28.5 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} + "@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)": dependencies: - '@babel/helper-plugin-utils': 7.24.0 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 + "@babel/core": 7.28.5 + "@babel/helper-module-imports": 7.27.1 + "@babel/helper-validator-identifier": 7.28.5 + "@babel/traverse": 7.28.5 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + "@babel/helper-optimise-call-expression@7.27.1": dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.5 - dev: true + "@babel/types": 7.28.5 - /babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} + "@babel/helper-plugin-utils@7.27.1": {} + + "@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)": dependencies: - '@babel/runtime': 7.24.0 - cosmiconfig: 7.1.0 - resolve: 1.22.8 - dev: false + "@babel/core": 7.28.5 + "@babel/helper-member-expression-to-functions": 7.28.5 + "@babel/helper-optimise-call-expression": 7.27.1 + "@babel/traverse": 7.28.5 + transitivePeerDependencies: + - supports-color - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.0): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.0 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.0) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.0) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.24.0): - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 + "@babel/helper-skip-transparent-expression-wrappers@7.27.1": dependencies: - '@babel/core': 7.24.0 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.0) - dev: true + "@babel/traverse": 7.28.5 + "@babel/types": 7.28.5 + transitivePeerDependencies: + - supports-color - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + "@babel/helper-string-parser@7.27.1": {} - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true + "@babel/helper-validator-identifier@7.28.5": {} - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: true + "@babel/helper-validator-option@7.27.1": {} - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + "@babel/helpers@7.28.4": dependencies: - fill-range: 7.0.1 - dev: true + "@babel/template": 7.27.2 + "@babel/types": 7.28.5 - /browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + "@babel/parser@7.28.5": dependencies: - caniuse-lite: 1.0.30001596 - electron-to-chromium: 1.4.698 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.23.0) + "@babel/types": 7.28.5 - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + "@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)": dependencies: - node-int64: 0.4.0 - dev: true - - /buffer-from@0.1.2: - resolution: {integrity: sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==} - dev: false - - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + "@babel/core": 7.28.5 + "@babel/helper-plugin-utils": 7.27.1 - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true + "@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)": + dependencies: + "@babel/core": 7.28.5 + "@babel/helper-plugin-utils": 7.27.1 - /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} + "@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.5)": dependencies: - streamsearch: 1.1.0 - dev: false + "@babel/core": 7.28.5 + "@babel/helper-module-transforms": 7.28.3(@babel/core@7.28.5) + "@babel/helper-plugin-utils": 7.27.1 + transitivePeerDependencies: + - supports-color - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + "@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)": 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 - dev: true + "@babel/core": 7.28.5 + "@babel/helper-plugin-utils": 7.27.1 - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + "@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)": + dependencies: + "@babel/core": 7.28.5 + "@babel/helper-plugin-utils": 7.27.1 - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + "@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)": + dependencies: + "@babel/core": 7.28.5 + "@babel/helper-annotate-as-pure": 7.27.3 + "@babel/helper-create-class-features-plugin": 7.28.5(@babel/core@7.28.5) + "@babel/helper-plugin-utils": 7.27.1 + "@babel/helper-skip-transparent-expression-wrappers": 7.27.1 + "@babel/plugin-syntax-typescript": 7.27.1(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true + "@babel/preset-typescript@7.28.5(@babel/core@7.28.5)": + dependencies: + "@babel/core": 7.28.5 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/helper-validator-option": 7.27.1 + "@babel/plugin-syntax-jsx": 7.27.1(@babel/core@7.28.5) + "@babel/plugin-transform-modules-commonjs": 7.27.1(@babel/core@7.28.5) + "@babel/plugin-transform-typescript": 7.28.5(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color - /caniuse-lite@1.0.30001596: - resolution: {integrity: sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ==} + "@babel/runtime@7.28.4": {} - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + "@babel/template@7.27.2": dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 + "@babel/code-frame": 7.27.1 + "@babel/parser": 7.28.5 + "@babel/types": 7.28.5 - /chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} + "@babel/traverse@7.28.5": dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true + "@babel/code-frame": 7.27.1 + "@babel/generator": 7.28.5 + "@babel/helper-globals": 7.28.0 + "@babel/parser": 7.28.5 + "@babel/template": 7.27.2 + "@babel/types": 7.28.5 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + "@babel/types@7.28.5": dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: true - - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: true + "@babel/helper-string-parser": 7.27.1 + "@babel/helper-validator-identifier": 7.28.5 - /ci-info@4.0.0: - resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} - engines: {node: '>=8'} - dev: true + "@csstools/color-helpers@5.1.0": {} - /cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - dev: true - - /clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} + "@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)": dependencies: - escape-string-regexp: 1.0.5 - dev: true + "@csstools/css-parser-algorithms": 3.0.5(@csstools/css-tokenizer@3.0.4) + "@csstools/css-tokenizer": 3.0.4 - /client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - dev: false + "@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)": + dependencies: + "@csstools/color-helpers": 5.1.0 + "@csstools/css-calc": 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + "@csstools/css-parser-algorithms": 3.0.5(@csstools/css-tokenizer@3.0.4) + "@csstools/css-tokenizer": 3.0.4 - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + "@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)": dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true + "@csstools/css-tokenizer": 3.0.4 - /clsx@2.1.0: - resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} - engines: {node: '>=6'} - dev: false + "@csstools/css-syntax-patches-for-csstree@1.0.14(postcss@8.5.6)": + dependencies: + postcss: 8.5.6 - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true + "@csstools/css-tokenizer@3.0.4": {} - /collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - dev: true + "@esbuild/aix-ppc64@0.25.12": + optional: true - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 + "@esbuild/aix-ppc64@0.27.1": + optional: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true + "@esbuild/android-arm64@0.25.12": + optional: true - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + "@esbuild/android-arm64@0.27.1": + optional: true - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + "@esbuild/android-arm@0.25.12": + optional: true - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: true + "@esbuild/android-arm@0.27.1": + optional: true - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + "@esbuild/android-x64@0.25.12": + optional: true - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: false + "@esbuild/android-x64@0.27.1": + optional: true - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + "@esbuild/darwin-arm64@0.25.12": + optional: true - /core-js-compat@3.36.0: - resolution: {integrity: sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==} - dependencies: - browserslist: 4.23.0 - dev: true + "@esbuild/darwin-arm64@0.27.1": + optional: true - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: false + "@esbuild/darwin-x64@0.25.12": + optional: true - /cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: false + "@esbuild/darwin-x64@0.27.1": + optional: true - /create-jest@29.7.0(@types/node@20.11.25): - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.11.25) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true + "@esbuild/freebsd-arm64@0.25.12": + optional: true - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true + "@esbuild/freebsd-arm64@0.27.1": + optional: true - /css.escape@1.5.1: - resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - dev: true + "@esbuild/freebsd-x64@0.25.12": + optional: true - /cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: true + "@esbuild/freebsd-x64@0.27.1": + optional: true - /cssom@0.5.0: - resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} - dev: true + "@esbuild/linux-arm64@0.25.12": + optional: true - /cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - dependencies: - cssom: 0.3.8 - dev: true + "@esbuild/linux-arm64@0.27.1": + optional: true - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + "@esbuild/linux-arm@0.25.12": + optional: true - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true + "@esbuild/linux-arm@0.27.1": + optional: true - /data-urls@3.0.2: - resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} - engines: {node: '>=12'} - dependencies: - abab: 2.0.6 - whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - dev: true + "@esbuild/linux-ia32@0.25.12": + optional: true - /dayjs@1.11.10: - resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} - dev: false + "@esbuild/linux-ia32@0.27.1": + optional: true - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: true + "@esbuild/linux-loong64@0.25.12": + optional: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 + "@esbuild/linux-loong64@0.27.1": + optional: true - /decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - dev: true + "@esbuild/linux-mips64el@0.25.12": + optional: true - /dedent@1.5.1: - resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - dev: true - - /deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - es-get-iterator: 1.1.3 - get-intrinsic: 1.2.4 - is-arguments: 1.1.1 - is-array-buffer: 3.0.4 - is-date-object: 1.0.5 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - isarray: 2.0.5 - object-is: 1.1.6 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - side-channel: 1.0.6 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.14 - dev: true - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true - - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - dev: true - - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - dev: true - - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: true - - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: true - - /detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} - engines: {node: '>=12.20'} - dev: true - - /detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: true - - /detect-newline@4.0.1: - resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /dom-accessibility-api@0.5.16: - resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dev: true - - /dom-accessibility-api@0.6.3: - resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} - dev: true - - /dom-helpers@5.2.1: - resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - dependencies: - '@babel/runtime': 7.24.0 - csstype: 3.1.3 - dev: false - - /domexception@4.0.0: - resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} - engines: {node: '>=12'} - deprecated: Use your platform's native DOMException instead - dependencies: - webidl-conversions: 7.0.0 - dev: true + "@esbuild/linux-mips64el@0.27.1": + optional: true - /duplexer2@0.1.4: - resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} - dependencies: - readable-stream: 2.3.8 - dev: false + "@esbuild/linux-ppc64@0.25.12": + optional: true - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + "@esbuild/linux-ppc64@0.27.1": + optional: true - /electron-to-chromium@1.4.698: - resolution: {integrity: sha512-f9iZD1t3CLy1AS6vzM5EKGa6p9pRcOeEFXRFbaG2Ta+Oe7MkfRQ3fsvPYidzHe1h4i0JvIvpcY55C+B6BZNGtQ==} + "@esbuild/linux-riscv64@0.25.12": + optional: true - /emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - dev: true + "@esbuild/linux-riscv64@0.27.1": + optional: true - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + "@esbuild/linux-s390x@0.25.12": + optional: true - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + "@esbuild/linux-s390x@0.27.1": + optional: true - /enhanced-resolve@5.15.1: - resolution: {integrity: sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - dev: true - - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - dev: true - - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - - /es-abstract@1.22.5: - resolution: {integrity: sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==} - engines: {node: '>= 0.4'} - 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 - es-define-property: 1.0.0 - es-errors: 1.3.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.1 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - 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.0 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - 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.5 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.14 - dev: true - - /es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - dev: true - - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - dev: true - - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true - - /es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - is-arguments: 1.1.1 - is-map: 2.0.2 - is-set: 2.0.2 - is-string: 1.0.7 - isarray: 2.0.5 - stop-iteration-iterator: 1.0.0 - dev: true - - /es-iterator-helpers@1.0.17: - resolution: {integrity: sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==} - engines: {node: '>= 0.4'} - dependencies: - asynciterator.prototype: 1.0.0 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - globalthis: 1.0.3 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - iterator.prototype: 1.1.2 - safe-array-concat: 1.1.0 - dev: true - - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.1 - dev: true - - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - dependencies: - hasown: 2.0.1 - dev: true - - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - /escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - dev: true + "@esbuild/linux-x64@0.25.12": + optional: true - /eslint-config-next@14.1.3(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-sUCpWlGuHpEhI0pIT0UtdSLJk5Z8E2DYinPTwsBiWaSYQomchdl0i60pjynY48+oXvtyWMQ7oE+G3m49yrfacg==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@next/eslint-plugin-next': 14.1.3 - '@rushstack/eslint-patch': 1.7.2 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.2) - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-react: 7.34.0(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - typescript: 5.4.2 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - supports-color - dev: true + "@esbuild/linux-x64@0.27.1": + optional: true - /eslint-config-prettier@9.1.0(eslint@8.57.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.57.0 - dev: true + "@esbuild/netbsd-arm64@0.25.12": + optional: true - /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} - peerDependencies: - eslint-plugin-import: '>=1.4.0' - dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - dev: true + "@esbuild/netbsd-arm64@0.27.1": + optional: true - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: true + "@esbuild/netbsd-x64@0.25.12": + optional: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - dependencies: - debug: 4.3.4 - enhanced-resolve: 5.15.1 - eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.3 - is-core-module: 2.13.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - dev: true + "@esbuild/netbsd-x64@0.27.1": + optional: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.1)(eslint-plugin-import@2.29.1)(eslint@8.57.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - dependencies: - debug: 4.3.4 - enhanced-resolve: 5.15.1 - eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.3 - is-core-module: 2.13.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - dev: true + "@esbuild/openbsd-arm64@0.25.12": + optional: true - /eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.2) - debug: 3.2.7 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - transitivePeerDependencies: - - supports-color - dev: true + "@esbuild/openbsd-arm64@0.27.1": + optional: true - /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.4.2) - debug: 3.2.7 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.1.1)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - transitivePeerDependencies: - - supports-color - dev: true + "@esbuild/openbsd-x64@0.25.12": + optional: true - /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.4.2) - debug: 3.2.7 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - dev: true + "@esbuild/openbsd-x64@0.27.1": + optional: true - /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.4.2) - debug: 3.2.7 - eslint: 8.57.0 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.1.1)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - transitivePeerDependencies: - - supports-color - dev: true + "@esbuild/openharmony-arm64@0.25.12": + optional: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.57.0): - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' - dependencies: - escape-string-regexp: 1.0.5 - eslint: 8.57.0 - ignore: 5.3.1 - dev: true + "@esbuild/openharmony-arm64@0.27.1": + optional: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.4.2) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.4 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - hasown: 2.0.1 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.2 - object.values: 1.1.7 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true + "@esbuild/sunos-x64@0.25.12": + optional: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.4.2) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.4 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) - hasown: 2.0.1 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.2 - object.values: 1.1.7 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true + "@esbuild/sunos-x64@0.27.1": + optional: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.1.1)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.2): - resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 7.1.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0)(typescript@5.4.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) - eslint: 8.57.0 - jest: 29.7.0(@types/node@20.11.25) - transitivePeerDependencies: - - supports-color - - typescript - dev: true + "@esbuild/win32-arm64@0.25.12": + optional: true - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - '@babel/runtime': 7.24.0 - aria-query: 5.3.0 - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.17 - eslint: 8.57.0 - hasown: 2.0.1 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - dev: true - - /eslint-plugin-playwright@1.5.2(eslint-plugin-jest@27.9.0)(eslint@8.57.0): - resolution: {integrity: sha512-TMzLrLGQMccngU8GogtzIc9u5RzXGnfsQEUjLfEfshINuVR2fS4SHfDtU7xYP90Vwm5vflHECf610KTdGvO53w==} - engines: {node: '>=16.6.0'} - peerDependencies: - eslint: '>=8.40.0' - eslint-plugin-jest: '>=25' - peerDependenciesMeta: - eslint-plugin-jest: - optional: true - dependencies: - eslint: 8.57.0 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.1.1)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.2) - globals: 13.24.0 - dev: true + "@esbuild/win32-arm64@0.27.1": + optional: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.57.0 - dev: true + "@esbuild/win32-ia32@0.25.12": + optional: true - /eslint-plugin-react@7.34.0(eslint@8.57.0): - resolution: {integrity: sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.7 - array.prototype.findlast: 1.2.4 - array.prototype.flatmap: 1.3.2 - array.prototype.toreversed: 1.1.2 - array.prototype.tosorted: 1.1.3 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.17 - eslint: 8.57.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.10 - dev: true + "@esbuild/win32-ia32@0.27.1": + optional: true - /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) - eslint: 8.57.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true + "@esbuild/win32-x64@0.25.12": + optional: true - /eslint-plugin-tsdoc@0.2.17: - resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} - dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - dev: true + "@esbuild/win32-x64@0.27.1": + optional: true - /eslint-plugin-unicorn@51.0.1(eslint@8.57.0): - resolution: {integrity: sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==} - engines: {node: '>=16'} - peerDependencies: - eslint: '>=8.56.0' - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint/eslintrc': 2.1.4 - ci-info: 4.0.0 - clean-regexp: 1.0.0 - core-js-compat: 3.36.0 - eslint: 8.57.0 - esquery: 1.5.0 - indent-string: 4.0.0 - is-builtin-module: 3.2.1 - jsesc: 3.0.2 - pluralize: 8.0.0 - read-pkg-up: 7.0.1 - regexp-tree: 0.1.27 - regjsparser: 0.10.0 - semver: 7.6.0 - strip-indent: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true + "@faker-js/faker@8.4.1": {} - /eslint-plugin-vitest@0.3.22(@typescript-eslint/eslint-plugin@7.1.1)(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-atkFGQ7aVgcuSeSMDqnyevIyUpfBPMnosksgEPrKE7Y8xQlqG/5z2IQ6UDau05zXaaFv7Iz8uzqvIuKshjZ0Zw==} - engines: {node: ^18.0.0 || >= 20.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': '*' - eslint: '>=8.0.0' - vitest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - vitest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 7.1.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0)(typescript@5.4.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.2) - eslint: 8.57.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: true - - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + "@floating-ui/core@1.7.3": dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.1 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true + "@floating-ui/utils": 0.2.10 - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + "@floating-ui/dom@1.7.4": dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 - dev: true + "@floating-ui/core": 1.7.3 + "@floating-ui/utils": 0.2.10 - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: true - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: true - - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: true - - /expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - dev: true - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - dev: true + "@floating-ui/react-dom@2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@floating-ui/dom": 1.7.4 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + "@floating-ui/utils@0.2.10": {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + "@inquirer/ansi@1.0.2": {} - /fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + "@inquirer/confirm@5.1.21(@types/node@25.0.2)": dependencies: - reusify: 1.0.4 - dev: true + "@inquirer/core": 10.3.2(@types/node@25.0.2) + "@inquirer/type": 3.0.10(@types/node@25.0.2) + optionalDependencies: + "@types/node": 25.0.2 - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + "@inquirer/core@10.3.2(@types/node@25.0.2)": dependencies: - bser: 2.1.1 - dev: true + "@inquirer/ansi": 1.0.2 + "@inquirer/figures": 1.0.15 + "@inquirer/type": 3.0.10(@types/node@25.0.2) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 25.0.2 + + "@inquirer/figures@1.0.15": {} - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + "@inquirer/type@3.0.10(@types/node@25.0.2)": + optionalDependencies: + "@types/node": 25.0.2 + + "@jridgewell/gen-mapping@0.3.13": dependencies: - flat-cache: 3.2.0 - dev: true + "@jridgewell/sourcemap-codec": 1.5.5 + "@jridgewell/trace-mapping": 0.3.31 - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + "@jridgewell/remapping@2.3.5": dependencies: - to-regex-range: 5.0.1 - dev: true + "@jridgewell/gen-mapping": 0.3.13 + "@jridgewell/trace-mapping": 0.3.31 + + "@jridgewell/resolve-uri@3.1.2": {} - /find-root@1.1.0: - resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - dev: false + "@jridgewell/sourcemap-codec@1.5.5": {} - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + "@jridgewell/trace-mapping@0.3.31": dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: true + "@jridgewell/resolve-uri": 3.1.2 + "@jridgewell/sourcemap-codec": 1.5.5 - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + "@msw/source@0.6.0(msw@2.12.7(@types/node@25.0.2)(typescript@5.9.3))": dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true + "@stoplight/json": 3.21.7 + "@types/har-format": 1.2.16 + "@yellow-ticket/seed-json-schema": 0.1.6 + msw: 2.12.7(@types/node@25.0.2)(typescript@5.9.3) + openapi-types: 12.1.3 + outvariant: 1.4.3 + yaml: 2.8.2 - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + "@mswjs/interceptors@0.40.0": dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - rimraf: 3.0.2 - dev: true + "@open-draft/deferred-promise": 2.2.0 + "@open-draft/logger": 0.3.0 + "@open-draft/until": 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - dev: true + "@open-draft/deferred-promise@2.2.0": {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + "@open-draft/logger@0.3.0": dependencies: - is-callable: 1.2.7 - dev: true + is-node-process: 1.2.0 + outvariant: 1.4.3 - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} + "@open-draft/until@2.1.0": {} + + "@radix-ui/number@1.1.1": {} + + "@radix-ui/primitive@1.1.3": {} + + "@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.1.0 - dev: true + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) + + "@radix-ui/react-avatar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@radix-ui/react-context": 1.1.3(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-is-hydrated": 0.1.0(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) + + "@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) + + "@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} + "@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: true + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + "@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.7)(react@19.2.3)": + dependencies: + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true + "@radix-ui/react-context@1.1.2(@types/react@19.2.7)(react@19.2.3)": + dependencies: + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - functions-have-names: 1.2.3 - dev: true - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true - - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.1 - dev: true - - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true - - /get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - dev: true - - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true - - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - dev: true - - /get-tsconfig@4.7.3: - resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + "@radix-ui/react-context@1.1.3(@types/react@19.2.7)(react@19.2.3)": dependencies: - resolve-pkg-maps: 1.0.0 - dev: true + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 + + "@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.7)(react@19.2.3) + aria-hidden: 1.2.6 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-remove-scroll: 2.7.2(@types/react@19.2.7)(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) - /git-hooks-list@3.1.0: - resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} - dev: true + "@radix-ui/react-direction@1.1.1(@types/react@19.2.7)(react@19.2.3)": + dependencies: + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + "@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": dependencies: - is-glob: 4.0.3 - dev: true + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-escape-keydown": 1.1.1(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) + + "@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-menu": 2.1.16(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + "@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.7)(react@19.2.3)": dependencies: - is-glob: 4.0.3 - dev: true + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + "@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.3 - minipass: 7.0.4 - path-scurry: 1.10.1 - dev: true - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + "@radix-ui/react-id@1.1.1(@types/react@19.2.7)(react@19.2.3)": + dependencies: + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + "@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": dependencies: - type-fest: 0.20.2 - dev: true + "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) + + "@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-popper": 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-roving-focus": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.7)(react@19.2.3) + aria-hidden: 1.2.6 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-remove-scroll: 2.7.2(@types/react@19.2.7)(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) + + "@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-popper": 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.7)(react@19.2.3) + aria-hidden: 1.2.6 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-remove-scroll: 2.7.2(@types/react@19.2.7)(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) + + "@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@floating-ui/react-dom": 2.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-arrow": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-rect": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/rect": 1.1.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + "@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": dependencies: - define-properties: 1.2.1 - dev: true + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + "@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 3.0.0 - dev: true + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + "@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 4.0.0 - dev: true + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + "@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": dependencies: - get-intrinsic: 1.2.4 - dev: true + "@radix-ui/react-slot": 1.2.4(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + "@radix-ui/react-progress@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@radix-ui/react-context": 1.1.3(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) + + "@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) + + "@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@radix-ui/number": 1.1.1 + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + "@radix-ui/react-separator@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + "@radix-ui/react-slot@1.2.3(@types/react@19.2.7)(react@19.2.3)": + dependencies: + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + "@radix-ui/react-slot@1.2.4(@types/react@19.2.7)(react@19.2.3)": + dependencies: + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 + + "@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-popper": 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-visually-hidden": 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + "@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.7)(react@19.2.3)": + dependencies: + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + "@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.7)(react@19.2.3)": dependencies: - es-define-property: 1.0.0 - dev: true + "@radix-ui/react-use-effect-event": 0.0.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - dev: true + "@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.7)(react@19.2.3)": + dependencies: + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true - - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + "@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.7)(react@19.2.3)": dependencies: - has-symbols: 1.0.3 - dev: true + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 - /hasown@2.0.1: - resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} - engines: {node: '>= 0.4'} + "@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.7)(react@19.2.3)": dependencies: - function-bind: 1.1.2 + react: 19.2.3 + use-sync-external-store: 1.6.0(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 - /hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + "@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.7)(react@19.2.3)": dependencies: - react-is: 16.13.1 - dev: false + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + "@radix-ui/react-use-previous@1.1.1(@types/react@19.2.7)(react@19.2.3)": + dependencies: + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 - /html-encoding-sniffer@3.0.0: - resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} - engines: {node: '>=12'} + "@radix-ui/react-use-rect@1.1.1(@types/react@19.2.7)(react@19.2.3)": dependencies: - whatwg-encoding: 2.0.0 - dev: true + "@radix-ui/rect": 1.1.1 + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true + "@radix-ui/react-use-size@1.1.1(@types/react@19.2.7)(react@19.2.3)": + dependencies: + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.7)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + "@types/react": 19.2.7 - /html-tokenize@2.0.1: - resolution: {integrity: sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==} - hasBin: true + "@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": dependencies: - buffer-from: 0.1.2 - inherits: 2.0.4 - minimist: 1.2.8 - readable-stream: 1.0.34 - through2: 0.4.2 - dev: false + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) + + "@radix-ui/rect@1.1.1": {} - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + "@redocly/ajv@8.17.1": dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + "@redocly/config@0.22.2": {} - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + "@redocly/openapi-core@1.34.6(supports-color@10.2.2)": dependencies: - agent-base: 6.0.2 - debug: 4.3.4 + "@redocly/ajv": 8.17.1 + "@redocly/config": 0.22.2 + colorette: 1.4.0 + https-proxy-agent: 7.0.6(supports-color@10.2.2) + js-levenshtein: 1.1.6 + js-yaml: 4.1.1 + minimatch: 5.1.6 + pluralize: 8.0.0 + yaml-ast-parser: 0.0.43 transitivePeerDependencies: - supports-color - dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + "@rolldown/pluginutils@1.0.0-beta.53": {} - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true + "@rollup/rollup-android-arm-eabi@4.53.3": + optional: true - /ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - dev: true + "@rollup/rollup-android-arm64@4.53.3": + optional: true - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 + "@rollup/rollup-darwin-arm64@4.53.3": + optional: true - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - dev: true + "@rollup/rollup-darwin-x64@4.53.3": + optional: true + + "@rollup/rollup-freebsd-arm64@4.53.3": + optional: true - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + "@rollup/rollup-freebsd-x64@4.53.3": + optional: true - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + "@rollup/rollup-linux-arm-gnueabihf@4.53.3": + optional: true - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true + "@rollup/rollup-linux-arm-musleabihf@4.53.3": + optional: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + "@rollup/rollup-linux-arm64-gnu@4.53.3": + optional: true - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - hasown: 2.0.1 - side-channel: 1.0.6 - dev: true + "@rollup/rollup-linux-arm64-musl@4.53.3": + optional: true - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: true + "@rollup/rollup-linux-loong64-gnu@4.53.3": + optional: true - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - dev: true + "@rollup/rollup-linux-ppc64-gnu@4.53.3": + optional: true + + "@rollup/rollup-linux-riscv64-gnu@4.53.3": + optional: true - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + "@rollup/rollup-linux-riscv64-musl@4.53.3": + optional: true - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true + "@rollup/rollup-linux-s390x-gnu@4.53.3": + optional: true - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + "@rollup/rollup-linux-x64-gnu@4.53.3": + optional: true + + "@rollup/rollup-linux-x64-musl@4.53.3": + optional: true + + "@rollup/rollup-openharmony-arm64@4.53.3": + optional: true + + "@rollup/rollup-win32-arm64-msvc@4.53.3": + optional: true + + "@rollup/rollup-win32-ia32-msvc@4.53.3": + optional: true + + "@rollup/rollup-win32-x64-gnu@4.53.3": + optional: true + + "@rollup/rollup-win32-x64-msvc@4.53.3": + optional: true + + "@solid-primitives/event-listener@2.4.3(solid-js@1.9.10)": dependencies: - has-bigints: 1.0.2 - dev: true + "@solid-primitives/utils": 6.3.2(solid-js@1.9.10) + solid-js: 1.9.10 - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + "@solid-primitives/keyboard@1.3.3(solid-js@1.9.10)": dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: true + "@solid-primitives/event-listener": 2.4.3(solid-js@1.9.10) + "@solid-primitives/rootless": 1.5.2(solid-js@1.9.10) + "@solid-primitives/utils": 6.3.2(solid-js@1.9.10) + solid-js: 1.9.10 - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} + "@solid-primitives/resize-observer@2.1.3(solid-js@1.9.10)": dependencies: - builtin-modules: 3.3.0 - dev: true + "@solid-primitives/event-listener": 2.4.3(solid-js@1.9.10) + "@solid-primitives/rootless": 1.5.2(solid-js@1.9.10) + "@solid-primitives/static-store": 0.1.2(solid-js@1.9.10) + "@solid-primitives/utils": 6.3.2(solid-js@1.9.10) + solid-js: 1.9.10 - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + "@solid-primitives/rootless@1.5.2(solid-js@1.9.10)": + dependencies: + "@solid-primitives/utils": 6.3.2(solid-js@1.9.10) + solid-js: 1.9.10 - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + "@solid-primitives/static-store@0.1.2(solid-js@1.9.10)": dependencies: - hasown: 2.0.1 + "@solid-primitives/utils": 6.3.2(solid-js@1.9.10) + solid-js: 1.9.10 - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + "@solid-primitives/utils@6.3.2(solid-js@1.9.10)": dependencies: - has-tostringtag: 1.0.2 - dev: true + solid-js: 1.9.10 - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + "@standard-schema/spec@1.0.0": {} - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + "@stoplight/json@3.21.7": dependencies: - call-bind: 1.0.7 - dev: true + "@stoplight/ordered-object-literal": 1.0.5 + "@stoplight/path": 1.3.2 + "@stoplight/types": 13.20.0 + jsonc-parser: 2.2.1 + lodash: 4.17.21 + safe-stable-stringify: 1.1.1 - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + "@stoplight/ordered-object-literal@1.0.5": {} - /is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: true + "@stoplight/path@1.3.2": {} - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + "@stoplight/types@13.20.0": dependencies: - has-tostringtag: 1.0.2 - dev: true + "@types/json-schema": 7.0.15 + utility-types: 3.11.0 - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + "@tailwindcss/node@4.1.18": dependencies: - is-extglob: 2.1.1 - dev: true + "@jridgewell/remapping": 2.3.5 + enhanced-resolve: 5.18.4 + jiti: 2.6.1 + lightningcss: 1.30.2 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.1.18 - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: true + "@tailwindcss/oxide-android-arm64@4.1.18": + optional: true - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - dev: true + "@tailwindcss/oxide-darwin-arm64@4.1.18": + optional: true - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true + "@tailwindcss/oxide-darwin-x64@4.1.18": + optional: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + "@tailwindcss/oxide-freebsd-x64@4.1.18": + optional: true - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + "@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18": + optional: true - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - dev: true + "@tailwindcss/oxide-linux-arm64-gnu@4.1.18": + optional: true - /is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: true + "@tailwindcss/oxide-linux-arm64-musl@4.1.18": + optional: true - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: true + "@tailwindcss/oxide-linux-x64-gnu@4.1.18": + optional: true - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: true + "@tailwindcss/oxide-linux-x64-musl@4.1.18": + optional: true - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - dev: true + "@tailwindcss/oxide-wasm32-wasi@4.1.18": + optional: true - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + "@tailwindcss/oxide-win32-arm64-msvc@4.1.18": + optional: true - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.2 - dev: true + "@tailwindcss/oxide-win32-x64-msvc@4.1.18": + optional: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true + "@tailwindcss/oxide@4.1.18": + optionalDependencies: + "@tailwindcss/oxide-android-arm64": 4.1.18 + "@tailwindcss/oxide-darwin-arm64": 4.1.18 + "@tailwindcss/oxide-darwin-x64": 4.1.18 + "@tailwindcss/oxide-freebsd-x64": 4.1.18 + "@tailwindcss/oxide-linux-arm-gnueabihf": 4.1.18 + "@tailwindcss/oxide-linux-arm64-gnu": 4.1.18 + "@tailwindcss/oxide-linux-arm64-musl": 4.1.18 + "@tailwindcss/oxide-linux-x64-gnu": 4.1.18 + "@tailwindcss/oxide-linux-x64-musl": 4.1.18 + "@tailwindcss/oxide-wasm32-wasi": 4.1.18 + "@tailwindcss/oxide-win32-arm64-msvc": 4.1.18 + "@tailwindcss/oxide-win32-x64-msvc": 4.1.18 - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} + "@tailwindcss/vite@4.1.18(vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))": dependencies: - which-typed-array: 1.1.14 - dev: true + "@tailwindcss/node": 4.1.18 + "@tailwindcss/oxide": 4.1.18 + tailwindcss: 4.1.18 + vite: 7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: true + "@tanstack/devtools-client@0.0.5": + dependencies: + "@tanstack/devtools-event-client": 0.4.0 - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + "@tanstack/devtools-event-bus@0.3.3": dependencies: - call-bind: 1.0.7 - dev: true + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + "@tanstack/devtools-event-client@0.4.0": {} - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + "@tanstack/devtools-ui@0.4.4(csstype@3.2.3)(solid-js@1.9.10)": dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - dev: true + clsx: 2.1.1 + goober: 2.1.18(csstype@3.2.3) + solid-js: 1.9.10 + transitivePeerDependencies: + - csstype + + "@tanstack/devtools-vite@0.3.12(vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))": + dependencies: + "@babel/core": 7.28.5 + "@babel/generator": 7.28.5 + "@babel/parser": 7.28.5 + "@babel/traverse": 7.28.5 + "@babel/types": 7.28.5 + "@tanstack/devtools-client": 0.0.5 + "@tanstack/devtools-event-bus": 0.3.3 + chalk: 5.6.2 + launch-editor: 2.12.0 + picomatch: 4.0.3 + vite: 7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - /isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - dev: false + "@tanstack/devtools@0.9.1(csstype@3.2.3)(solid-js@1.9.10)": + dependencies: + "@solid-primitives/event-listener": 2.4.3(solid-js@1.9.10) + "@solid-primitives/keyboard": 1.3.3(solid-js@1.9.10) + "@solid-primitives/resize-observer": 2.1.3(solid-js@1.9.10) + "@tanstack/devtools-client": 0.0.5 + "@tanstack/devtools-event-bus": 0.3.3 + "@tanstack/devtools-ui": 0.4.4(csstype@3.2.3)(solid-js@1.9.10) + clsx: 2.1.1 + goober: 2.1.18(csstype@3.2.3) + solid-js: 1.9.10 + transitivePeerDependencies: + - bufferutil + - csstype + - utf-8-validate - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: false + "@tanstack/form-core@1.27.7": + dependencies: + "@tanstack/devtools-event-client": 0.4.0 + "@tanstack/pacer-lite": 0.1.1 + "@tanstack/store": 0.7.7 - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + "@tanstack/history@1.141.0": {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + "@tanstack/pacer-lite@0.1.1": {} - /istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - dev: true + "@tanstack/query-core@5.90.14": {} - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.24.0 - '@babel/parser': 7.24.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true + "@tanstack/query-devtools@5.92.0": {} - /istanbul-lib-instrument@6.0.2: - resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} - engines: {node: '>=10'} + "@tanstack/react-devtools@0.8.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(csstype@3.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.10)": dependencies: - '@babel/core': 7.24.0 - '@babel/parser': 7.24.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.6.0 + "@tanstack/devtools": 0.9.1(csstype@3.2.3)(solid-js@1.9.10) + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - dev: true + - bufferutil + - csstype + - solid-js + - utf-8-validate - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} + "@tanstack/react-form@1.27.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 + "@tanstack/form-core": 1.27.7 + "@tanstack/react-store": 0.8.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 transitivePeerDependencies: - - supports-color - dev: true + - react-dom - /istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} + "@tanstack/react-query-devtools@5.91.2(@tanstack/react-query@5.90.14(react@19.2.3))(react@19.2.3)": dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - dev: true + "@tanstack/query-devtools": 5.92.0 + "@tanstack/react-query": 5.90.14(react@19.2.3) + react: 19.2.3 - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + "@tanstack/react-query@5.90.14(react@19.2.3)": dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.5 - set-function-name: 2.0.2 - dev: true + "@tanstack/query-core": 5.90.14 + react: 19.2.3 - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + "@tanstack/react-router-devtools@1.141.2(@tanstack/react-router@1.141.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@tanstack/router-core@1.141.2)(csstype@3.2.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(solid-js@1.9.10)": dependencies: - '@isaacs/cliui': 8.0.2 + "@tanstack/react-router": 1.141.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@tanstack/router-devtools-core": 1.141.2(@tanstack/router-core@1.141.2)(csstype@3.2.3)(solid-js@1.9.10) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - dev: true - - /jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - execa: 5.1.1 - jest-util: 29.7.0 - p-limit: 3.1.0 - dev: true - - /jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.25 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.5.1 - is-generator-fn: 2.1.0 - jest-each: 29.7.0 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - p-limit: 3.1.0 - pretty-format: 29.7.0 - pure-rand: 6.0.4 - slash: 3.0.0 - stack-utils: 2.0.6 + "@tanstack/router-core": 1.141.2 + transitivePeerDependencies: + - csstype + - solid-js + + "@tanstack/react-router@1.141.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@tanstack/history": 1.141.0 + "@tanstack/react-store": 0.8.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@tanstack/router-core": 1.141.2 + isbot: 5.1.32 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + tiny-invariant: 1.3.3 + tiny-warning: 1.0.3 + + "@tanstack/react-store@0.8.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@tanstack/store": 0.8.0 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + use-sync-external-store: 1.6.0(react@19.2.3) + + "@tanstack/react-table@8.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@tanstack/table-core": 8.21.3 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + "@tanstack/router-core@1.141.2": + dependencies: + "@tanstack/history": 1.141.0 + "@tanstack/store": 0.8.0 + cookie-es: 2.0.0 + seroval: 1.4.0 + seroval-plugins: 1.4.0(seroval@1.4.0) + tiny-invariant: 1.3.3 + tiny-warning: 1.0.3 + + "@tanstack/router-devtools-core@1.141.2(@tanstack/router-core@1.141.2)(csstype@3.2.3)(solid-js@1.9.10)": + dependencies: + "@tanstack/router-core": 1.141.2 + clsx: 2.1.1 + goober: 2.1.18(csstype@3.2.3) + solid-js: 1.9.10 + tiny-invariant: 1.3.3 + optionalDependencies: + csstype: 3.2.3 + + "@tanstack/router-generator@1.141.2": + dependencies: + "@tanstack/router-core": 1.141.2 + "@tanstack/router-utils": 1.141.0 + "@tanstack/virtual-file-routes": 1.141.0 + prettier: 3.7.4 + recast: 0.23.11 + source-map: 0.7.6 + tsx: 4.21.0 + zod: 3.25.76 transitivePeerDependencies: - - babel-plugin-macros - supports-color - dev: true - /jest-cli@29.7.0(@types/node@20.11.25): - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.11.25) - exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.11.25) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 + "@tanstack/router-plugin@1.141.2(@tanstack/react-router@1.141.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))": + dependencies: + "@babel/core": 7.28.5 + "@babel/plugin-syntax-jsx": 7.27.1(@babel/core@7.28.5) + "@babel/plugin-syntax-typescript": 7.27.1(@babel/core@7.28.5) + "@babel/template": 7.27.2 + "@babel/traverse": 7.28.5 + "@babel/types": 7.28.5 + "@tanstack/router-core": 1.141.2 + "@tanstack/router-generator": 1.141.2 + "@tanstack/router-utils": 1.141.0 + "@tanstack/virtual-file-routes": 1.141.0 + babel-dead-code-elimination: 1.0.10 + chokidar: 3.6.0 + unplugin: 2.3.11 + zod: 3.25.76 + optionalDependencies: + "@tanstack/react-router": 1.141.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + vite: 7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - supports-color - - ts-node - dev: true - /jest-config@29.7.0(@types/node@20.11.25): - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true + "@tanstack/router-utils@1.141.0": dependencies: - '@babel/core': 7.24.0 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.25 - babel-jest: 29.7.0(@babel/core@7.24.0) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.5 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 + "@babel/core": 7.28.5 + "@babel/generator": 7.28.5 + "@babel/parser": 7.28.5 + "@babel/preset-typescript": 7.28.5(@babel/core@7.28.5) + ansis: 4.2.0 + diff: 8.0.2 + pathe: 2.0.3 + tinyglobby: 0.2.15 transitivePeerDependencies: - - babel-plugin-macros - supports-color - dev: true - - /jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true - - /jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - detect-newline: 3.1.0 - dev: true - - /jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 - dev: true - - /jest-environment-jsdom@29.7.0: - resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true + + "@tanstack/store@0.7.7": {} + + "@tanstack/store@0.8.0": {} + + "@tanstack/table-core@8.21.3": {} + + "@tanstack/virtual-file-routes@1.141.0": {} + + "@testing-library/dom@10.4.1": dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/jsdom': 20.0.1 - '@types/node': 20.11.25 - jest-mock: 29.7.0 - jest-util: 29.7.0 - jsdom: 20.0.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.25 - jest-mock: 29.7.0 - jest-util: 29.7.0 - dev: true - - /jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - - /jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 20.11.25 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.5 - walker: 1.0.8 + "@babel/code-frame": 7.27.1 + "@babel/runtime": 7.28.4 + "@types/aria-query": 5.0.4 + aria-query: 5.3.0 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + picocolors: 1.1.1 + pretty-format: 27.5.1 + + "@testing-library/react@16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@babel/runtime": 7.28.4 + "@testing-library/dom": 10.4.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) optionalDependencies: - fsevents: 2.3.3 - dev: true - - /jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true - - /jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true - - /jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/code-frame': 7.23.5 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - - /jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.11.25 - jest-util: 29.7.0 - dev: true - - /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true + "@types/react": 19.2.7 + "@types/react-dom": 19.2.3(@types/react@19.2.7) + + "@types/aria-query@5.0.4": {} + + "@types/babel__core@7.20.5": dependencies: - jest-resolve: 29.7.0 - dev: true + "@babel/parser": 7.28.5 + "@babel/types": 7.28.5 + "@types/babel__generator": 7.27.0 + "@types/babel__template": 7.4.4 + "@types/babel__traverse": 7.28.0 - /jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + "@types/babel__generator@7.27.0": + dependencies: + "@babel/types": 7.28.5 - /jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + "@types/babel__template@7.4.4": dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - dev: true + "@babel/parser": 7.28.5 + "@babel/types": 7.28.5 - /jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + "@types/babel__traverse@7.28.0": dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.8 - resolve.exports: 2.0.2 - slash: 3.0.0 - dev: true - - /jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/console': 29.7.0 - '@jest/environment': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.25 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.11 - jest-docblock: 29.7.0 - jest-environment-node: 29.7.0 - jest-haste-map: 29.7.0 - jest-leak-detector: 29.7.0 - jest-message-util: 29.7.0 - jest-resolve: 29.7.0 - jest-runtime: 29.7.0 - jest-util: 29.7.0 - jest-watcher: 29.7.0 - jest-worker: 29.7.0 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0 - '@jest/source-map': 29.6.3 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.25 - chalk: 4.1.2 - cjs-module-lexer: 1.2.3 - collect-v8-coverage: 1.0.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/core': 7.24.0 - '@babel/generator': 7.23.6 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) - '@babel/types': 7.24.0 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.0) - chalk: 4.1.2 - expect: 29.7.0 - graceful-fs: 4.2.11 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - natural-compare: 1.4.0 - pretty-format: 29.7.0 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - dev: true + "@babel/types": 7.28.5 - /jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + "@types/chai@5.2.3": dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.11.25 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true - - /jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - dev: true - - /jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.25 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.7.0 - string-length: 4.0.2 - dev: true - - /jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@types/node': 20.11.25 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: true - - /jest@29.7.0(@types/node@20.11.25): - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + "@types/deep-eql": 4.0.2 + assertion-error: 2.0.1 + + "@types/deep-eql@4.0.2": {} + + "@types/estree@1.0.8": {} + + "@types/har-format@1.2.16": {} + + "@types/json-schema@7.0.15": {} + + "@types/node@25.0.2": + dependencies: + undici-types: 7.16.0 + + "@types/react-dom@19.2.3(@types/react@19.2.7)": dependencies: - '@jest/core': 29.7.0 - '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.11.25) + "@types/react": 19.2.7 + + "@types/react@19.2.7": + dependencies: + csstype: 3.2.3 + + "@types/statuses@2.0.6": {} + + "@vitejs/plugin-react@5.1.2(vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))": + dependencies: + "@babel/core": 7.28.5 + "@babel/plugin-transform-react-jsx-self": 7.27.1(@babel/core@7.28.5) + "@babel/plugin-transform-react-jsx-source": 7.27.1(@babel/core@7.28.5) + "@rolldown/pluginutils": 1.0.0-beta.53 + "@types/babel__core": 7.20.5 + react-refresh: 0.18.0 + vite: 7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - supports-color - - ts-node - dev: true - /jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - dev: true + "@vitest/expect@4.0.15": + dependencies: + "@standard-schema/spec": 1.0.0 + "@types/chai": 5.2.3 + "@vitest/spy": 4.0.15 + "@vitest/utils": 4.0.15 + chai: 6.2.1 + tinyrainbow: 3.0.3 + + "@vitest/mocker@4.0.15(msw@2.12.7(@types/node@25.0.2)(typescript@5.9.3))(vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))": + dependencies: + "@vitest/spy": 4.0.15 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + msw: 2.12.7(@types/node@25.0.2)(typescript@5.9.3) + vite: 7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) + + "@vitest/pretty-format@4.0.15": + dependencies: + tinyrainbow: 3.0.3 - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + "@vitest/runner@4.0.15": + dependencies: + "@vitest/utils": 4.0.15 + pathe: 2.0.3 - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + "@vitest/snapshot@4.0.15": dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: true + "@vitest/pretty-format": 4.0.15 + magic-string: 0.30.21 + pathe: 2.0.3 - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + "@vitest/spy@4.0.15": {} + + "@vitest/utils@4.0.15": dependencies: - argparse: 2.0.1 - dev: true + "@vitest/pretty-format": 4.0.15 + tinyrainbow: 3.0.3 - /jsdom@20.0.3: - resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} - engines: {node: '>=14'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true + "@yellow-ticket/seed-json-schema@0.1.6": dependencies: - abab: 2.0.6 - acorn: 8.11.3 - acorn-globals: 7.0.1 - cssom: 0.5.0 - cssstyle: 2.3.0 - data-urls: 3.0.2 - decimal.js: 10.4.3 - domexception: 4.0.0 - escodegen: 2.1.0 - form-data: 4.0.0 - html-encoding-sniffer: 3.0.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 - parse5: 7.1.2 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 4.1.3 - w3c-xmlserializer: 4.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 2.0.0 - whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - ws: 8.16.0 - xml-name-validator: 4.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true + "@faker-js/faker": 8.4.1 + "@types/json-schema": 7.0.15 + outvariant: 1.4.3 + randexp: 0.5.3 - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: true + acorn@8.15.0: {} - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true + agent-base@7.1.4: {} - /jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - dev: true + ansi-colors@4.1.3: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + ansi-regex@5.0.1: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + ansi-styles@5.2.0: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + ansis@4.2.0: {} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + anymatch@3.1.3: dependencies: - minimist: 1.2.8 - dev: true + normalize-path: 3.0.0 + picomatch: 2.3.1 - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + argparse@2.0.1: {} - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + aria-hidden@1.2.6: dependencies: - array-includes: 3.1.7 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.1.7 - dev: true + tslib: 2.8.1 - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + aria-query@5.3.0: dependencies: - json-buffer: 3.0.1 - dev: true + dequal: 2.0.3 - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true + assertion-error@2.0.1: {} - /language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: true + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 - /language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} + babel-dead-code-elimination@1.0.10: dependencies: - language-subtag-registry: 0.3.22 - dev: true + "@babel/core": 7.28.5 + "@babel/parser": 7.28.5 + "@babel/traverse": 7.28.5 + "@babel/types": 7.28.5 + transitivePeerDependencies: + - supports-color + + balanced-match@1.0.2: {} - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true + baseline-browser-mapping@2.9.7: {} - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + bidi-js@1.0.3: dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true + require-from-string: 2.0.2 - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + binary-extensions@2.3.0: {} + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: - p-locate: 4.1.0 - dev: true + fill-range: 7.1.1 - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + browserslist@4.28.1: dependencies: - p-locate: 5.0.0 - dev: true + baseline-browser-mapping: 2.9.7 + caniuse-lite: 1.0.30001760 + electron-to-chromium: 1.5.267 + node-releases: 2.0.27 + update-browserslist-db: 1.2.2(browserslist@4.28.1) - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + caniuse-lite@1.0.30001760: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + chai@6.2.1: {} - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 + chalk@5.6.2: {} - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} - engines: {node: 14 || >=16.14} - dev: true + change-case@5.4.4: {} - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + chokidar@3.6.0: dependencies: - yallist: 3.1.1 + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + class-variance-authority@0.7.1: dependencies: - yallist: 4.0.0 - dev: true + clsx: 2.1.1 - /lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true - dev: true + cli-width@4.1.0: {} - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + cliui@8.0.1: dependencies: - semver: 7.6.0 - dev: true + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clsx@2.1.1: {} - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + cmdk@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - tmpl: 1.0.5 - dev: true + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-dialog": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.7)(react@19.2.3) + "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + transitivePeerDependencies: + - "@types/react" + - "@types/react-dom" - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + color-name@1.1.4: {} - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: true + colorette@1.4.0: {} + + convert-source-map@2.0.0: {} - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true + cookie-es@2.0.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + cookie@1.1.1: {} + + css-tree@3.1.0: dependencies: - mime-db: 1.52.0 - dev: true + mdn-data: 2.12.2 + source-map-js: 1.2.1 - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + cssstyle@5.3.4(postcss@8.5.6): + dependencies: + "@asamuzakjp/css-color": 4.1.0 + "@csstools/css-syntax-patches-for-csstree": 1.0.14(postcss@8.5.6) + css-tree: 3.1.0 + transitivePeerDependencies: + - postcss - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + csstype@3.2.3: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + data-urls@6.0.0: dependencies: - brace-expansion: 1.1.11 - dev: true + whatwg-mimetype: 4.0.0 + whatwg-url: 15.1.0 - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} + debug@4.4.3(supports-color@10.2.2): dependencies: - brace-expansion: 2.0.1 - dev: true + ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + decimal.js@10.6.0: {} - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true + dequal@2.0.3: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + detect-libc@2.1.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + detect-node-es@1.1.0: {} - /multipipe@1.0.2: - resolution: {integrity: sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ==} - dependencies: - duplexer2: 0.1.4 - object-assign: 4.1.1 - dev: false + diff@8.0.2: {} - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: false + dom-accessibility-api@0.5.16: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + drange@1.1.1: {} - /next@14.1.3(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-oexgMV2MapI0UIWiXKkixF8J8ORxpy64OuJ/J9oVUmIthXOUCcuVEZX+dtpgq7wIfIqtBwQsKEDXejcjTsan9g==} - engines: {node: '>=18.17.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - sass: - optional: true + electron-to-chromium@1.5.267: {} + + emoji-regex@8.0.0: {} + + enhanced-resolve@5.18.4: dependencies: - '@next/env': 14.1.3 - '@swc/helpers': 0.5.2 - busboy: 1.6.0 - caniuse-lite: 1.0.30001596 graceful-fs: 4.2.11 - postcss: 8.4.31 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.24.0)(react@18.2.0) + tapable: 2.3.0 + + entities@6.0.1: {} + + es-module-lexer@1.7.0: {} + + esbuild@0.25.12: optionalDependencies: - '@next/swc-darwin-arm64': 14.1.3 - '@next/swc-darwin-x64': 14.1.3 - '@next/swc-linux-arm64-gnu': 14.1.3 - '@next/swc-linux-arm64-musl': 14.1.3 - '@next/swc-linux-x64-gnu': 14.1.3 - '@next/swc-linux-x64-musl': 14.1.3 - '@next/swc-win32-arm64-msvc': 14.1.3 - '@next/swc-win32-ia32-msvc': 14.1.3 - '@next/swc-win32-x64-msvc': 14.1.3 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: false - - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: true - - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: true - - /nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} - dev: true - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true - - /object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - dev: true - - /object-keys@0.4.0: - resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==} - dev: false - - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true - - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - dev: true - - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - dev: true - - /object.groupby@1.0.2: - resolution: {integrity: sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==} - dependencies: - array.prototype.filter: 1.0.3 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - es-errors: 1.3.0 - dev: true + "@esbuild/aix-ppc64": 0.25.12 + "@esbuild/android-arm": 0.25.12 + "@esbuild/android-arm64": 0.25.12 + "@esbuild/android-x64": 0.25.12 + "@esbuild/darwin-arm64": 0.25.12 + "@esbuild/darwin-x64": 0.25.12 + "@esbuild/freebsd-arm64": 0.25.12 + "@esbuild/freebsd-x64": 0.25.12 + "@esbuild/linux-arm": 0.25.12 + "@esbuild/linux-arm64": 0.25.12 + "@esbuild/linux-ia32": 0.25.12 + "@esbuild/linux-loong64": 0.25.12 + "@esbuild/linux-mips64el": 0.25.12 + "@esbuild/linux-ppc64": 0.25.12 + "@esbuild/linux-riscv64": 0.25.12 + "@esbuild/linux-s390x": 0.25.12 + "@esbuild/linux-x64": 0.25.12 + "@esbuild/netbsd-arm64": 0.25.12 + "@esbuild/netbsd-x64": 0.25.12 + "@esbuild/openbsd-arm64": 0.25.12 + "@esbuild/openbsd-x64": 0.25.12 + "@esbuild/openharmony-arm64": 0.25.12 + "@esbuild/sunos-x64": 0.25.12 + "@esbuild/win32-arm64": 0.25.12 + "@esbuild/win32-ia32": 0.25.12 + "@esbuild/win32-x64": 0.25.12 + + esbuild@0.27.1: + optionalDependencies: + "@esbuild/aix-ppc64": 0.27.1 + "@esbuild/android-arm": 0.27.1 + "@esbuild/android-arm64": 0.27.1 + "@esbuild/android-x64": 0.27.1 + "@esbuild/darwin-arm64": 0.27.1 + "@esbuild/darwin-x64": 0.27.1 + "@esbuild/freebsd-arm64": 0.27.1 + "@esbuild/freebsd-x64": 0.27.1 + "@esbuild/linux-arm": 0.27.1 + "@esbuild/linux-arm64": 0.27.1 + "@esbuild/linux-ia32": 0.27.1 + "@esbuild/linux-loong64": 0.27.1 + "@esbuild/linux-mips64el": 0.27.1 + "@esbuild/linux-ppc64": 0.27.1 + "@esbuild/linux-riscv64": 0.27.1 + "@esbuild/linux-s390x": 0.27.1 + "@esbuild/linux-x64": 0.27.1 + "@esbuild/netbsd-arm64": 0.27.1 + "@esbuild/netbsd-x64": 0.27.1 + "@esbuild/openbsd-arm64": 0.27.1 + "@esbuild/openbsd-x64": 0.27.1 + "@esbuild/openharmony-arm64": 0.27.1 + "@esbuild/sunos-x64": 0.27.1 + "@esbuild/win32-arm64": 0.27.1 + "@esbuild/win32-ia32": 0.27.1 + "@esbuild/win32-x64": 0.27.1 + + escalade@3.2.0: {} + + esprima@4.0.1: {} + + estree-walker@3.0.3: + dependencies: + "@types/estree": 1.0.8 + + expect-type@1.3.0: {} + + fast-deep-equal@3.1.3: {} + + fast-uri@3.1.0: {} + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} - dependencies: - define-properties: 1.2.1 - es-abstract: 1.22.5 - dev: true - - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + fill-range@7.1.1: dependencies: - mimic-fn: 2.1.0 - dev: true + to-regex-range: 5.0.1 - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - dependencies: - p-try: 2.2.0 - dev: true - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - dependencies: - p-limit: 2.3.0 - dev: true - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true - - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.23.5 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 + fsevents@2.3.3: + optional: true - /parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} - dependencies: - entities: 4.5.0 - dev: true - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + gensync@1.0.0-beta.2: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + get-caller-file@2.0.5: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + get-nonce@1.0.1: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + get-tsconfig@4.13.0: + dependencies: + resolve-pkg-maps: 1.0.0 - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} + glob-parent@5.1.2: dependencies: - lru-cache: 10.2.0 - minipass: 7.0.4 - dev: true + is-glob: 4.0.3 - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + goober@2.1.18(csstype@3.2.3): + dependencies: + csstype: 3.2.3 - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + graceful-fs@4.2.11: {} - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true + graphql@16.12.0: {} - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - dev: true + headers-polyfill@4.0.3: {} - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - dev: true + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} + https-proxy-agent@7.0.6(supports-color@10.2.2): dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: false - - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + agent-base: 7.1.4 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color - /prettier-plugin-packagejson@2.4.12(prettier@3.2.5): - resolution: {integrity: sha512-hifuuOgw5rHHTdouw9VrhT8+Nd7UwxtL1qco8dUfd4XUFQL6ia3xyjSxhPQTsGnSYFraTWy5Omb+MZm/OWDTpQ==} - peerDependencies: - prettier: '>= 1.16.0' - peerDependenciesMeta: - prettier: - optional: true + iconv-lite@0.6.3: dependencies: - prettier: 3.2.5 - sort-package-json: 2.8.0 - synckit: 0.9.0 - dev: true + safer-buffer: 2.1.2 - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} - engines: {node: '>=14'} - hasBin: true - dev: true + index-to-position@1.2.0: {} - /pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + is-binary-path@2.1.0: dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - dev: true + binary-extensions: 2.3.0 - /pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.2.0 - dev: true + is-extglob@2.1.1: {} - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: false + is-fullwidth-code-point@3.0.0: {} - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} + is-glob@4.0.3: dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: true + is-extglob: 2.1.1 - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 + is-node-process@1.2.0: {} - /psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - dev: true + is-number@7.0.0: {} - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true + is-potential-custom-element-name@1.0.1: {} - /pure-rand@6.0.4: - resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} - dev: true + isbot@5.1.32: {} - /querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - dev: true + jiti@2.6.1: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + js-levenshtein@1.1.6: {} - /react-apexcharts@1.4.1(apexcharts@3.46.0)(react@18.2.0): - resolution: {integrity: sha512-G14nVaD64Bnbgy8tYxkjuXEUp/7h30Q0U33xc3AwtGFijJB9nHqOt1a6eG0WBn055RgRg+NwqbKGtqPxy15d0Q==} - peerDependencies: - apexcharts: ^3.41.0 - react: '>=0.13' - dependencies: - apexcharts: 3.46.0 - prop-types: 15.8.1 - react: 18.2.0 - dev: false + js-tokens@4.0.0: {} - /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 + js-yaml@4.1.1: dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 + argparse: 2.0.1 - /react-hook-form@7.51.0(react@18.2.0): - resolution: {integrity: sha512-BggOy5j58RdhdMzzRUHGOYhSz1oeylFAv6jUSG86OvCIvlAvS7KvnRY7yoAf2pfEiPN7BesnR0xx73nEk3qIiw==} - engines: {node: '>=12.22.0'} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 + jsdom@27.3.0(postcss@8.5.6): dependencies: - react: 18.2.0 - dev: false + "@acemir/cssom": 0.9.29 + "@asamuzakjp/dom-selector": 6.7.6 + cssstyle: 5.3.4(postcss@8.5.6) + data-urls: 6.0.0 + decimal.js: 10.6.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6(supports-color@10.2.2) + is-potential-custom-element-name: 1.0.1 + parse5: 8.0.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 6.0.0 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 8.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 15.1.0 + ws: 8.18.3 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - postcss + - supports-color + - utf-8-validate - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + jsesc@3.1.0: {} - /react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - dev: true + json-schema-traverse@1.0.0: {} - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + json5@2.2.3: {} - /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} - peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' - dependencies: - '@babel/runtime': 7.24.0 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - dev: true - - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - dev: true - - /readable-stream@1.0.34: - resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 - dev: false - - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: false - - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - dev: true - - /reflect.getprototypeof@1.0.5: - resolution: {integrity: sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - globalthis: 1.0.3 - which-builtin-type: 1.1.3 - dev: true - - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - /regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - dev: true + jsonc-parser@2.2.1: {} - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} + launch-editor@2.12.0: dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.2 - dev: true + picocolors: 1.1.1 + shell-quote: 1.8.3 - /regjsparser@0.10.0: - resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} - hasBin: true - dependencies: - jsesc: 0.5.0 - dev: true + lightningcss-android-arm64@1.30.2: + optional: true - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + lightningcss-darwin-arm64@1.30.2: + optional: true - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: true + lightningcss-darwin-x64@1.30.2: + optional: true - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - dependencies: - resolve-from: 5.0.0 - dev: true + lightningcss-freebsd-x64@1.30.2: + optional: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + lightningcss-linux-arm64-gnu@1.30.2: + optional: true - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true + lightningcss-linux-arm64-musl@1.30.2: + optional: true - /resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - dev: true + lightningcss-linux-x64-gnu@1.30.2: + optional: true - /resolve@1.19.0: - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - dev: true + lightningcss-linux-x64-musl@1.30.2: + optional: true - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 + lightningcss-win32-arm64-msvc@1.30.2: + optional: true - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true + lightningcss-win32-x64-msvc@1.30.2: + optional: true + + lightningcss@1.30.2: dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + lodash@4.17.21: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true + lru-cache@11.2.4: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + lru-cache@5.1.1: dependencies: - queue-microtask: 1.2.3 - dev: true + yallist: 3.1.1 - /safe-array-concat@1.1.0: - resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} - engines: {node: '>=0.4'} + lucide-react@0.561.0(react@19.2.3): dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - dev: true + react: 19.2.3 - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: false + lz-string@1.5.0: {} - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + magic-string@0.30.21: dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - dev: true + "@jridgewell/sourcemap-codec": 1.5.5 - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + mdn-data@2.12.2: {} - /saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} + minimatch@5.1.6: dependencies: - xmlchars: 2.2.0 - dev: true + brace-expansion: 2.0.2 + + ms@2.1.3: {} - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + msw@2.12.7(@types/node@25.0.2)(typescript@5.9.3): dependencies: - loose-envify: 1.4.0 + "@inquirer/confirm": 5.1.21(@types/node@25.0.2) + "@mswjs/interceptors": 0.40.0 + "@open-draft/deferred-promise": 2.2.0 + "@types/statuses": 2.0.6 + cookie: 1.1.1 + graphql: 16.12.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + rettime: 0.7.0 + statuses: 2.0.2 + strict-event-emitter: 0.5.1 + tough-cookie: 6.0.0 + type-fest: 5.3.1 + until-async: 3.0.2 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - "@types/node" - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true + mute-stream@2.0.0: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true + nanoid@3.3.11: {} - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true + next-themes@0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - lru-cache: 6.0.0 - dev: true - - /set-function-length@1.2.1: - resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} - engines: {node: '>= 0.4'} - 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 - dev: true - - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - dev: true - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true - - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 - dev: true - - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true - - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true - - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true - - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true - - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true - - /sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} - dev: true - - /sort-package-json@2.8.0: - resolution: {integrity: sha512-PxeNg93bTJWmDGnu0HADDucoxfFiKkIr73Kv85EBThlI1YQPdc0XovBgg2llD0iABZbu2SlKo8ntGmOP9wOj/g==} - hasBin: true - dependencies: - detect-indent: 7.0.1 - detect-newline: 4.0.1 - get-stdin: 9.0.0 - git-hooks-list: 3.1.0 - globby: 13.2.2 - is-plain-obj: 4.1.0 - sort-object-keys: 1.1.3 - dev: true + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: false + node-releases@2.0.27: {} - /source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true + normalize-path@3.0.0: {} - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - dev: false + obug@2.1.1: {} - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + openapi-fetch@0.15.0: + dependencies: + openapi-typescript-helpers: 0.0.15 - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + openapi-react-query@0.5.1(@tanstack/react-query@5.90.14(react@19.2.3))(openapi-fetch@0.15.0): dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.17 - dev: true + "@tanstack/react-query": 5.90.14(react@19.2.3) + openapi-fetch: 0.15.0 + openapi-typescript-helpers: 0.0.15 - /spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - dev: true + openapi-types@12.1.3: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.17 - dev: true + openapi-typescript-helpers@0.0.15: {} - /spdx-license-ids@3.0.17: - resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} - dev: true + openapi-typescript@7.10.1(typescript@5.9.3): + dependencies: + "@redocly/openapi-core": 1.34.6(supports-color@10.2.2) + ansi-colors: 4.1.3 + change-case: 5.4.4 + parse-json: 8.3.0 + supports-color: 10.2.2 + typescript: 5.9.3 + yargs-parser: 21.1.1 - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + outvariant@1.4.3: {} - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + parse-json@8.3.0: dependencies: - escape-string-regexp: 2.0.0 - dev: true + "@babel/code-frame": 7.27.1 + index-to-position: 1.2.0 + type-fest: 4.41.0 - /stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} + parse5@8.0.0: dependencies: - internal-slot: 1.0.7 - dev: true + entities: 6.0.1 - /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: false + path-to-regexp@6.3.0: {} - /string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - dev: true + pathe@2.0.3: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + picomatch@4.0.3: {} + + pluralize@8.0.0: {} + + postcss@8.5.6: dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: true - - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - dev: true - - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 - set-function-name: 2.0.2 - side-channel: 1.0.6 - dev: true - - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - dev: true - - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - dev: true - - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.5 - dev: true - - /string_decoder@0.10.31: - resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} - dev: false - - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: false - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prettier@3.7.4: {} + + pretty-format@27.5.1: dependencies: ansi-regex: 5.0.1 - dev: true + ansi-styles: 5.2.0 + react-is: 17.0.2 + + punycode@2.3.1: {} - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + randexp@0.5.3: dependencies: - ansi-regex: 6.0.1 - dev: true + drange: 1.1.1 + ret: 0.2.2 - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + react-dom@19.2.3(react@19.2.3): + dependencies: + react: 19.2.3 + scheduler: 0.27.0 - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: true + react-is@17.0.2: {} - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + react-refresh@0.18.0: {} - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + react-remove-scroll-bar@2.3.8(@types/react@19.2.7)(react@19.2.3): dependencies: - min-indent: 1.0.1 - dev: true + react: 19.2.3 + react-style-singleton: 2.2.3(@types/react@19.2.7)(react@19.2.3) + tslib: 2.8.1 + optionalDependencies: + "@types/react": 19.2.7 - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + react-remove-scroll@2.7.2(@types/react@19.2.7)(react@19.2.3): + dependencies: + react: 19.2.3 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.7)(react@19.2.3) + react-style-singleton: 2.2.3(@types/react@19.2.7)(react@19.2.3) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.7)(react@19.2.3) + use-sidecar: 1.1.3(@types/react@19.2.7)(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.7 - /styled-jsx@5.1.1(@babel/core@7.24.0)(react@18.2.0): - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true + react-style-singleton@2.2.3(@types/react@19.2.7)(react@19.2.3): dependencies: - '@babel/core': 7.24.0 - client-only: 0.0.1 - react: 18.2.0 - dev: false + get-nonce: 1.0.1 + react: 19.2.3 + tslib: 2.8.1 + optionalDependencies: + "@types/react": 19.2.7 - /stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - dev: false + react@19.2.3: {} - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + readdirp@3.6.0: dependencies: - has-flag: 3.0.0 + picomatch: 2.3.1 - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + recast@0.23.11: dependencies: - has-flag: 4.0.0 - dev: true + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + resolve-pkg-maps@1.0.0: {} + + ret@0.2.2: {} + + rettime@0.7.0: {} + + rollup@4.53.3: dependencies: - has-flag: 4.0.0 - dev: true + "@types/estree": 1.0.8 + optionalDependencies: + "@rollup/rollup-android-arm-eabi": 4.53.3 + "@rollup/rollup-android-arm64": 4.53.3 + "@rollup/rollup-darwin-arm64": 4.53.3 + "@rollup/rollup-darwin-x64": 4.53.3 + "@rollup/rollup-freebsd-arm64": 4.53.3 + "@rollup/rollup-freebsd-x64": 4.53.3 + "@rollup/rollup-linux-arm-gnueabihf": 4.53.3 + "@rollup/rollup-linux-arm-musleabihf": 4.53.3 + "@rollup/rollup-linux-arm64-gnu": 4.53.3 + "@rollup/rollup-linux-arm64-musl": 4.53.3 + "@rollup/rollup-linux-loong64-gnu": 4.53.3 + "@rollup/rollup-linux-ppc64-gnu": 4.53.3 + "@rollup/rollup-linux-riscv64-gnu": 4.53.3 + "@rollup/rollup-linux-riscv64-musl": 4.53.3 + "@rollup/rollup-linux-s390x-gnu": 4.53.3 + "@rollup/rollup-linux-x64-gnu": 4.53.3 + "@rollup/rollup-linux-x64-musl": 4.53.3 + "@rollup/rollup-openharmony-arm64": 4.53.3 + "@rollup/rollup-win32-arm64-msvc": 4.53.3 + "@rollup/rollup-win32-ia32-msvc": 4.53.3 + "@rollup/rollup-win32-x64-gnu": 4.53.3 + "@rollup/rollup-win32-x64-msvc": 4.53.3 + fsevents: 2.3.3 + + safe-stable-stringify@1.1.1: {} - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + safer-buffer@2.1.2: {} - /svg.draggable.js@2.2.2: - resolution: {integrity: sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==} - engines: {node: '>= 0.8.0'} + saxes@6.0.0: dependencies: - svg.js: 2.7.1 - dev: false + xmlchars: 2.2.0 + + scheduler@0.27.0: {} - /svg.easing.js@2.0.0: - resolution: {integrity: sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==} - engines: {node: '>= 0.8.0'} + semver@6.3.1: {} + + seroval-plugins@1.3.3(seroval@1.3.2): dependencies: - svg.js: 2.7.1 - dev: false + seroval: 1.3.2 - /svg.filter.js@2.0.2: - resolution: {integrity: sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==} - engines: {node: '>= 0.8.0'} + seroval-plugins@1.4.0(seroval@1.4.0): dependencies: - svg.js: 2.7.1 - dev: false + seroval: 1.4.0 + + seroval@1.3.2: {} + + seroval@1.4.0: {} + + shell-quote@1.8.3: {} - /svg.js@2.7.1: - resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==} - dev: false + siginfo@2.0.0: {} - /svg.pathmorphing.js@0.1.3: - resolution: {integrity: sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==} - engines: {node: '>= 0.8.0'} + signal-exit@4.1.0: {} + + solid-js@1.9.10: dependencies: - svg.js: 2.7.1 - dev: false + csstype: 3.2.3 + seroval: 1.3.2 + seroval-plugins: 1.3.3(seroval@1.3.2) - /svg.resize.js@1.4.3: - resolution: {integrity: sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==} - engines: {node: '>= 0.8.0'} + sonner@2.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - svg.js: 2.7.1 - svg.select.js: 2.1.2 - dev: false + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + source-map-js@1.2.1: {} + + source-map@0.6.1: {} + + source-map@0.7.6: {} + + stackback@0.0.2: {} + + statuses@2.0.2: {} + + std-env@3.10.0: {} + + strict-event-emitter@0.5.1: {} - /svg.select.js@2.1.2: - resolution: {integrity: sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==} - engines: {node: '>= 0.8.0'} + string-width@4.2.3: dependencies: - svg.js: 2.7.1 - dev: false + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 - /svg.select.js@3.0.1: - resolution: {integrity: sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==} - engines: {node: '>= 0.8.0'} + strip-ansi@6.0.1: dependencies: - svg.js: 2.7.1 - dev: false + ansi-regex: 5.0.1 - /symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: true + supports-color@10.2.2: {} - /synckit@0.9.0: - resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} - engines: {node: ^14.18.0 || >=16.0.0} - dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.6.2 - dev: true + symbol-tree@3.2.4: {} - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + tagged-tag@1.0.0: {} - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - dev: true + tailwind-merge@3.4.0: {} + + tailwindcss@4.1.18: {} + + tapable@2.3.0: {} - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + tiny-invariant@1.3.3: {} - /through2@0.4.2: - resolution: {integrity: sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==} + tiny-warning@1.0.3: {} + + tinybench@2.9.0: {} + + tinyexec@1.0.2: {} + + tinyglobby@0.2.15: dependencies: - readable-stream: 1.0.34 - xtend: 2.1.2 - dev: false + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: false + tinyrainbow@3.0.3: {} - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true + tldts-core@7.0.19: {} - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + tldts@7.0.19: + dependencies: + tldts-core: 7.0.19 - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} - engines: {node: '>=6'} + tough-cookie@6.0.0: dependencies: - psl: 1.9.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - dev: true + tldts: 7.0.19 - /tr46@3.0.0: - resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} - engines: {node: '>=12'} + tr46@6.0.0: dependencies: punycode: 2.3.1 - dev: true - /ts-api-utils@1.2.1(typescript@5.4.2): - resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - dependencies: - typescript: 5.4.2 - dev: true + tslib@2.8.1: {} - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsx@4.21.0: dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: true - - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true + esbuild: 0.27.1 + get-tsconfig: 4.13.0 + optionalDependencies: + fsevents: 2.3.3 - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tw-animate-css@1.4.0: {} - /tsutils@3.21.0(typescript@5.4.2): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 5.4.2 - dev: true - - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: true - - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true - - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true - - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true - - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - dev: true - - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - 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 - dev: true - - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - 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 - dev: true - - /typed-array-length@1.0.5: - resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} - engines: {node: '>= 0.4'} - 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 - dev: true - - /typescript@5.4.2: - resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + type-fest@4.41.0: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + type-fest@5.3.1: dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: true + tagged-tag: 1.0.0 - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + typescript@5.9.3: {} - /universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - dev: true + undici-types@7.16.0: {} - /update-browserslist-db@1.0.13(browserslist@4.23.0): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + unplugin@2.3.11: dependencies: - browserslist: 4.23.0 - escalade: 3.1.2 - picocolors: 1.0.0 + "@jridgewell/remapping": 2.3.5 + acorn: 8.15.0 + picomatch: 4.0.3 + webpack-virtual-modules: 0.6.2 - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - dev: true + until-async@3.0.2: {} - /url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + update-browserslist-db@1.2.2(browserslist@4.28.1): dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - dev: true + browserslist: 4.28.1 + escalade: 3.2.0 + picocolors: 1.1.1 - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false + use-callback-ref@1.3.3(@types/react@19.2.7)(react@19.2.3): + dependencies: + react: 19.2.3 + tslib: 2.8.1 + optionalDependencies: + "@types/react": 19.2.7 - /v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} - engines: {node: '>=10.12.0'} + use-sidecar@1.1.3(@types/react@19.2.7)(react@19.2.3): dependencies: - '@jridgewell/trace-mapping': 0.3.25 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - dev: true + detect-node-es: 1.1.0 + react: 19.2.3 + tslib: 2.8.1 + optionalDependencies: + "@types/react": 19.2.7 - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + use-sync-external-store@1.6.0(react@19.2.3): dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - dev: true + react: 19.2.3 - /w3c-xmlserializer@4.0.0: - resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} - engines: {node: '>=14'} + utility-types@3.11.0: {} + + vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2): dependencies: - xml-name-validator: 4.0.0 - dev: true + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.53.3 + tinyglobby: 0.2.15 + optionalDependencies: + "@types/node": 25.0.2 + fsevents: 2.3.3 + jiti: 2.6.1 + lightningcss: 1.30.2 + tsx: 4.21.0 + yaml: 2.8.2 + + vitest@4.0.15(@types/node@25.0.2)(jiti@2.6.1)(jsdom@27.3.0(postcss@8.5.6))(lightningcss@1.30.2)(msw@2.12.7(@types/node@25.0.2)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2): + dependencies: + "@vitest/expect": 4.0.15 + "@vitest/mocker": 4.0.15(msw@2.12.7(@types/node@25.0.2)(typescript@5.9.3))(vite@7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2)) + "@vitest/pretty-format": 4.0.15 + "@vitest/runner": 4.0.15 + "@vitest/snapshot": 4.0.15 + "@vitest/spy": 4.0.15 + "@vitest/utils": 4.0.15 + es-module-lexer: 1.7.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.2.7(@types/node@25.0.2)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2) + why-is-node-running: 2.3.0 + optionalDependencies: + "@types/node": 25.0.2 + jsdom: 27.3.0(postcss@8.5.6) + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + w3c-xmlserializer@5.0.0: dependencies: - makeerror: 1.0.12 - dev: true + xml-name-validator: 5.0.0 + + web-vitals@5.1.0: {} - /webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - dev: true + webidl-conversions@8.0.0: {} - /whatwg-encoding@2.0.0: - resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} - engines: {node: '>=12'} + webpack-virtual-modules@0.6.2: {} + + whatwg-encoding@3.1.1: dependencies: iconv-lite: 0.6.3 - dev: true - - /whatwg-mimetype@3.0.0: - resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} - engines: {node: '>=12'} - dev: true - - /whatwg-url@11.0.0: - resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} - engines: {node: '>=12'} - dependencies: - tr46: 3.0.0 - webidl-conversions: 7.0.0 - dev: true - - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: true - - /which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} - dependencies: - function.prototype.name: 1.1.6 - has-tostringtag: 1.0.2 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 - isarray: 2.0.5 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.14 - dev: true - - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} - dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 - dev: true - - /which-typed-array@1.1.14: - resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} - engines: {node: '>= 0.4'} - 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 - dev: true - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + + whatwg-mimetype@4.0.0: {} + + whatwg-url@15.1.0: + dependencies: + tr46: 6.0.0 + webidl-conversions: 8.0.0 + + why-is-node-running@2.3.0: dependencies: - isexe: 2.0.0 - dev: true + siginfo: 2.0.0 + stackback: 0.0.2 - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@7.0.0: dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - dev: true - - /ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} - 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 - dev: true + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 - /xml-name-validator@4.0.0: - resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} - engines: {node: '>=12'} - dev: true + ws@8.18.3: {} - /xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - dev: true + xml-name-validator@5.0.0: {} - /xtend@2.1.2: - resolution: {integrity: sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==} - engines: {node: '>=0.4'} - dependencies: - object-keys: 0.4.0 - dev: false + xmlchars@2.2.0: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@3.1.1: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + yaml-ast-parser@0.0.43: {} - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: false + yaml@2.8.2: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true + yargs-parser@21.1.1: {} - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yoctocolors-cjs@2.1.3: {} + + zod@3.25.76: {} - /zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - dev: false + zod@4.2.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..d726e96 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +onlyBuiltDependencies: + - msw diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d4f3b4aedfbe3f99d91fef3fa8f1ad13b1368ddf GIT binary patch literal 27288 zcmV)jK%u{hP)wzdu>ztqhW+EQI1QgNbK+CrSQNT<= zg&+5soewi~$0eK*!?X zFVPGyt9cFsu|WFU#r*Ej(tYoppQi!c%)EQ*;31@vlR(ARZ%9o5xj)!pEdmHPgric| z5K%(XfbT^B@J!McAU*>i&&di(CjRB=f(mE@djuB>2O@xPMr=2b0Lcac&*Lc3Z8J!d zjjbmy4d`Y8Z4#CMY788_55O6!Kqv5z9;u)esjLgjx~f{4x1vElnZHriRMyJs^&6$3 zu3oYM=5}q`NLl+L88M)}4Cs;}WqG;MCNERL&Ru}#$N;EGZT#9X9+D`X{a&$mO5tri zbsEsk0@}o`N#?jz1Z*KYy?SO;q7u@0ZF#-SUbI1`%;V2$Sz8&E>Ts4cK-PvM%0u)g zh!bYwCpSqGk*$#VHwmlL(czNKRIwvdnp11A>?V-Rw&2lG%X??+-W@f z5l92NIV{AD82}U|&!jM3J z%{)h|g;589nD%A$ZQ)-N{*oD~m%eSQ<%egFlY<7ffuuI7!T*?}#+^goOt5jMaZS@` z+Edsh4je9{J=y$qbiv zAc7wi!d_ga0$b)m3_$uvaNWX;N;!F4v3&Q`QPL*Ib^}r$GwqRaq!FDs>S;hXE1}`B z(>RTw)B~?iy}d~8eQ}YL*X2n=mYL83us>^LMM`5T%nG6^AV8fNXpoNi)$-l150>%! zb(bvXcjqw~bdjg@+NoHOyY?JuKsP)7l+18p1JH{%)ycK@Oq8jsvLH3Hol*xg8clL) zwSXxiWqZF1YEp|zw$hL6K&1?ATQ7HBb(r*Oo9BXpJqNY^6Tv(-SIvVGx8-Eu4Xa#}(+k1NDtMCIW(K9fJb zGGD5qB@%??fiR;BJE#~&oQB3S8}&%l%Nq(kTs8O~fbLq{AU`{IxEwjS4Hi|*Fqo># z?h)rn19}^jV{J`XZhm~8yfR}g0*rECN&|SIq=hJ=T`+$HzY}n&v^AK#rv-&Pov|Oh zUPN*-qjK(H9pwin4V3J3C`Xesmj-k*fTp}%w6R8h_?MY*Z^NPhyKhDWRu9;lBQV=p zw41rGHN`50kXBjGbHW*eXlh7jyo22#fR%H^;9Qw--U#Uc+7V3UD%vCDGgX?jr?APX zL}-z`HDi_B^27r9yfO>sGk_Y7js}gGgY?vhI{K=4WNHD;%oZ*X@^c3KlWt@n6g7Z* z=-;kNZUc`V)}t*LcKWsD2&4hs3?}OE{$F31CilIuNjAZ`(tImBW0OuUXf$ZbV&-bC4wtu<3{C0;hu| zW$teRnyFpPMr1s-B?5#sd^95Yk#hOL>0{)~gE}MBG>zso*Zw8?A)NCd}i(Mw*)LF+gDK*7i@C<6~gr<2jJB4AM_@Q2y zVmmY!hyj`bqX(CsHZjJ7t)hcL*p44K3+cnnSmQ0Rnn61oAJRm?Hn2 zSOGvIh9hDnzs%lDJ2X*DyELU|Y9*!R9HL;D0ve&B0CW(5W?`}1Xr)|p_Ha3kN?~fP zg)I%sZt;0qDQre5L=^(L3rgWr|J#f-t3q>cGj)nS4p=udIElgk$%F4~kj>$I zjckiV8Z`Vks-8mT0|L+*qNLhlicrD*fvbjA6#_ac*&!|_<~2s8dqIudcG*5Mu2*|F zds1}CJ?J!PKsPg)^#8r|(Ng)S&0Z+H!qyfpR3qTWyl#gb%GkbK)Ru0PVu-2zzI4EPQ0cNIjX#pC5mY-oq z2&nXD(+borg;Zu7b|9lpx)p@wri=HLaea$bGHa|~Ds|C41oLS?Zv)U_)_lh2b5~c% z_4j=uvsN<@i8O(w3rI64S@~)i&?<>FicT{Tm8wKp)DeJ=aA7FW31IF5Nb_P+A=_EN z23?X}FK6#xCYPNwTnbS_L61{@omz*^o`C5zpqrURO%l<7q^OjmFvqQr&y|;^Z2-WG zy~c~4^Y@ncGx5s!4=xD0%o~(?Ya1esX(qrawFy+7E(|4hD#6B zk5*p_ojJ^uNf&F}YWC8AZcZ$bDihE^(6Xuqx#rK4W%B0$qFN=aZwj+kXn`+0m{dnYP?4hI={&-^HGTtF&_sJkp6oIJQuN4Mr^j6&Axdr-<+06%OgDs^ek zPy-%naMVe=>{>bbfG%>;@q?ul75#GN zPab+@IVvcXSW61f1r~lGG_A3Z*^ZNavB0Bm2p2`46_v|cBbr&=l)|;rF|R^SI=F|N zaY%3JT9QLzqJ?LyGO3Rqp{H;=E}ZNQ?&im(0o}|5GM3}xrIm8qV^ihR&skh1PePeQ zH0{XFJE&HR?En=EEIQ6iNgvXZ2#gUyNrDjCQb00yDvHPjU+XW&?9&OJK~N8#pYhQw z3<)|?hg+acBp2^#yNdLy(Fmjg-2@=W05-z1@#lZfk*D5SE;W%tmVD7R6HJJu+gpLi z@2VYIe<5#hXG{D&egVEq1(3X%oSQYL`I8N9+%BtD#`Z0g6A$ep`=T=z%5JDqsHZ2* z(cHp-%wJU{i&j_4!9&}j*$|It&UDxGJ?!cD-wOfl;x06XnUl@{AcdMokJN$}zc+8A z{1Vc6`Q{9`I8bqv$7!`6a~Li9KnT|U>hVz zBejyB9gz`z%jC#09p&J`WsuO|%SiPi=Tm96*(+E(5A8Yk}fH((2Fl^BIK$-^&8Vx!`(eYmRF-5ht_`H#!DrmYjLbLiiniv z*2@(q4U$f!nX;h*DO_}EYm3+nDbCN4vf@1H+CB#{85xk!nUbaTHRw^%YSUKBjwKTu zthLc6c7O;L#*_bBju`FvDBLJ={YB$sWbYyr-G$WG;xw?rxXg4*+cndm0ebJ?+k2mc zcGS{`=Ie&e;5On3z+i#KUp+oeUYoWFsaMD))HsdiU*^t+@`ffq#7st@PL3X1CRd+6 zP}=6R{H|L$PD*+k2PL*O^>oeaDPf&3Hj_3zg_N^abcU9d+Hkf!^yX6e&GSpp87nMD z49b=3E*U3S8x~`tfl_qdaCzFvw1byE!`|U0-zx#FA)0O%CM{Nn2HvZOrQzk78{{qk zdR;A=XliCk3j$it1A2jM5=!?TZKIH!BV=5UVzfW@U^eL(|C2j``^?c^YtHGerNWgW z*LDtDgJIcRpCNyJZK?d_Kg(1>?2=b4KRs)>96h3=remoS-6^Qr`%u4_26RhvxO;!@ zB(zy`spMI>PzXTyd}D+B{J~FT^1@p61SY>tQ_@BxFDoSH9MMC*bzEOG%%p;7eNYsq z%Fk&fF@;iH*zSEQfGR&7eK8(v=Tt|GYxlN%Q;ppE*fe=_egj&{Ap;z-(#H(Rmm4k` zE2YSo4f5RXw01u0sI{HO#oc;-_dW@&^UUBLC!_VBfK&qskH5EE{`}l$vax~LDHa*m z@{82LtRKTViv0B4kutV-Az(;To6!+nLwdcqe-jlf-^P#LV0RXWcc_I1!sl#Oa*fz)lH;abf4~&D`-+Kq);HI|MmDBa=pyM5s zVo=JKRX4~F|1?!*Ew0gYE3Js6=C>9=tvppwTd7JeKC+8keC$9eL0uYcQ=tH*yPSJ~ zXYEcbyPzUd{k#Hb%SQ#YBO3fmEqr)y+HwH;-v7$d%0f6;5P1inv%TBs?m?Mw(QxSt zGHta=X)3fUdNA)DD&bxUXq41~X)FK;XRHOA&zl*qr5BB6 zY>+t`4Kjaz!9Fs$OP<=0%_!*UhKqr2Bq#0UYJ_mtaaLKsK=GH0ln@U_qc-t~{xSoOftXDO7K!x#Q_kqyaFA$7ty>cbm`mLJ3V17_m&) zU}FcEKU%y=Zh2&?ELcx0WP`erc=9J1$`M6F%m%q?d@nf-@fSIy5ZXv6&S$x3_?Lx? zdW0DziNBnd=)8iYJpNFc-f-9Q%*PvGgPtLqYDtM`L1Fg*TTo+qXUlcx43&YM@?#*j zc$2*g(R&@BSy#gxA;vd1)lAetEcdsshm1Bj3SZo~% zr<&(rCudG=Nmh+~b9{F>_lSOw*q;CMyLK;o%WDq>w5dYe=-tL1n@_@pE@ZPmN94mL zgC)8wRm$X{kBcyevdTPwxw0Nr`d|E1p7`Hd zse{vkQdG%--~HXDPf4gJ($5)-LAx`4GU{c&K{;~Ed1ItgA*>D#IF^lV61K5;Y-;~c zq&5C~G5M@#A%9-Asa~#o;1hXwDMC(}06<3!Khsn!t^r2o)ysK@x0lPt4@5k5qQvK- z^kd;}D-pmr!JfiQ_Ao%3T(t^EW-G98HIrjr9@5O#fGzv&dF$ln2PVnthGM`JeN-qA z6^tJCHqF|1+bL*jeq+WJ-sx6UE7x8)S`O_8CrUyJb{x=ORP1@nM|?RhSiM<(bk9dJ zryTBh?htH=!F$u(Erz9nTp<6jSKF}Mc=0~6Z?7Udj(4u7N#Gq@ss?)yCE23@Z8Fis zs{&i`sD40|*yctyTD-ixPHuT}hP*px6BI)#Su866fT;J_`UC2`Ys3<%fZ3B7PDcru z0~hy6<4Wa6rwxTt=!%jjfaXhqS})|I0QGKU+UFbP2fzDJme-dkLRELv-Gs;Sev#>d zT_+Dg9VZ{yNxpr`04at0ka>)5n{unG3G{k^?*YKxqX6yMsNzs{F#g9mGgLyG#HNDv z?C?-zdB zMiN@kqB$V{{CJ(*`OtK!2^46ii}xau0{Qk8L1wjJac1E@4;>6{fBpz*mrri*mpaEF z(VXZQej3nUc&c{j7d`XTV0Xe7|9Cb{C6IsBLaM!tNV?meoGKfu>BU3vKEP}B<+zEX zKcIq>$xj3{s(-2iMvo$+-s)vQ`wVn*9V259fTZ@2RQr`7X??5`|6NyAC*QmKBboj= zOE+dBS(om13k~HnvyQY$XgG~nS^?iF%R;69GyBVN7{y;u2&(oS7DxtB+ zf@~y&B^G8}2k8d(8}?zL2Q)uYCx;Cylxxo$CLIe=+|hEmj8!GDp){bAnvz{~kWLy+ z6?XlQN?OzO$%!i=t{;4Tu{`*n&!oJ8H8z-_3gEge-lV$K%uuxw-(h^SL?FdkhXWbe z!@5yA50@c`uxFi&2!NES878TG(FAE*45I+&uBnr6{q_S{U4?F3pc7%uYvitCfTlvL z4j5Ksq6ZXU=l;?*rwYX#yUQtu^p`xU08X#qf-%m&2Z?4k{CkvAXcNR(22%!EJA-a) z#zKU!56@g(EjQgiS>~*^IEj#pxFB#%&XRVRRl{3L5G9S2D9CvD$V-E@a=|e@<)Wke zAZEgQ;}{Z}+K35TUv^K()s>HyR3dO{lB}!A)u=tyPu23m-Gt9eucs-jbm(NT2qd06 zOR8l|pP*cK-dF@K<(Uaj&rKyZaRK_6>r^hvU30EI4$$VABcSPAA)qO-M9T5r-7n3P zr~bQIszQjSqafFq3$qw#j)%r2dz&?@j1mE+B<4UGkLsE&6TUGJj2IlIU@ z4x6eei~$8RP=ymyqw8B+sZp4Pw;yukA#c6OpRqsp|T48miCm&7d?Y!Wk#Gf zE`QI9pUC}htd`mg*q~juI%$Pvr?`UYDxvu`Uz5~%Hv#rhooZ#mCHu+1&PBRg(duEG z#!#FFbSh^r#pklf2jiAL@P2)@$ZwyYkDi08Kp^s+N01pIDDXnXkAartrY?3_V=**1 z-!eWJfOO>GLPWETl+MNQDC#xL(vW%+hr^mP0j>w<`1L<$$g>}=MhtYJ0#<#O^c1Q! zGVa!IZYT>g8sw5=x}lwNZ*A6T&zA7g*bx&2yZdVolF*zAlWacv*yL+K{x=ulp^wd$ z#pMi4!lzcV*4jRB60u!t5k}vCP{C>vuK`t_h_UsXI{OHb-jqlpz^T+>|S{Ou0 zA#?*l3`b2wZhT~hyfeETG0?~y&^>_?){)>O08I-|-!|3qi_7LS( zVl$SR!WD$g_t=3M^0V{yk&gM0&iF#id9$M?33%0zY@mAi<_5X?ff>kitinCA;Enpc z@zQudTbM1p0(hoeJpCD{V)~uq`=QJN%N=-k6V04lox8tuRtB}_q+pqJ_L7T#RYB7I zXWAP1#bdK%eLb{%q89-?DvfEfqe~m$4S`q^(3vP^o`uipfME(2PuHy^B)_<1xQy*p z0uNlAZ|dN+grqO}Id%t&%MO6^!}Rw1$+BcqmSfc}|4?1pEz=F#v5fEcD5{qm&K)KP z4enrt)xEUW^SEHHFM7|dJvpb1|$xvo+W-&wGsT5d!%-AA9pM2D0mdeW?H0X=}s z)uZEt;3c5pGKT3RsEsvQl$@ze$l^Y*Os+ar0$s-SD+CTH@qVm+cOXPPjcWr=~jwwrQV98i!dIIUN&^~}_cEhwnGHa`0 zSUn<{uz~>mgW5(A>pTp$+)}r-yBzKqf8~^D54F`O>N_44C02g*^SI-`OqEg>eIY2Hk^3x7u-wncii$7FqzTaq}# z-3=kSwk|9`{_Xqn$;u$iUB-vAkmhr6CxBeKnI}+GW$e%GbLX}wpP#|(jg2F+h`eq03>hGKTSuA6aJj5~RIZba%3vrWg3@qce?w>xX;#WB$$G+JXiBE`r*{K3in zyxRKC&%t7bX_2i?S= z$JlZk0CIMjLJUOaX1Vy79&+K)15^?8_8T zP?t*_ZfSwE=Fj&SK-)w`r3yUpZ~s{!e|u#a3{?o`QDcR>9cJgg$cC!QG`$E1ep3%Gk|`^lk&_xavh- z;h;l2s<+N052f0iRpoLM0^w&YBbT-S{UF2|trtouJfI<&`58}Tl|ZR%WlC|dUalP9 zL(V;{hvdVY$J8x)*32DEX>EWuw~9%}mSyC2K;5)BeU_&_SR{8oGheFea&Rr?aa#v1 z4uArhjXV84xJX02%LK`7-cpVc6BM*15xQz1a48s)VV%Nq^Mzw%aOZrxsMad6ovhIq z>mRl&rSw_1V_1?sbT zJwW-#muAbKVc`g&0yGz-WwO(&#}qMJO6Gv^p-Nno3{>JsSsas_CB3UX5!3? zRLbRF?Ijm{r5EZ{Go;kOtPMiF`^YUI>KJgU-fuz z;)0EG%R|#-NjapMN@LC?BZC=IX{8OcNSB)H_!$9VA~6&1bw&WvkIxt;M~>_uD6qfF zx=eAg!a*p%eP)h4{=fCSJKQX-FlK)?>B(3XYjdHwg{~ukuV|+YLfsBzaVI`RR#%M1 zf@jh+*)A$Szi5<zCi4K2MJrKWlKxAh+iXDT8#r?z};AIEsfu6|@a|7a*EX#g=jl*H+5U|2jpct|oW3 zj2O%A=3+GKhBvoyK~g^;uMTQBETy=$$q2!vZ*+qTpWM4nsg{Xd%Np<1CL*_8GE(+| ziBfalburt+J4&yAS$#ft{#`LRdPm!SwSGWjL}_AU+7Z$}jWau#8=x~}ZEZw;`}8b% ze#&~OfgL#j+cIj8YZs~z$g`T~*yqGi4gws;JT>J}Nymbivh}MpI6Gy{xVTMtAIktC_Cmgnw>)xJayo+fI8l%1`vhO1*5S<8h2xq22wYkwxeRFa~WjOjFVR;|gwS9Y$B^ZEU4Dj-kAD1KNoQ@?4gh zr4FuxN=czWCwGp@%b%>5J0AT+)`tt#vO&)uQ~J5@(r(KwmJ?`;!P*;Ze-kJ1`?m|r zO{lLtqGvIRh8w@u&vuEIfnBqr^5T>Y^6RIk%ZfSz8HyadoGKx;Y=Ql&ooumqH4jp| z(h_zkX{H`UQVZ+x!eTS3`f4`;8wZo*a4-?%7~LNE4RY-{!{zW{Wx6E%4|g*odE|Tq z^e*CJEs19Ld8-GsDI`id3}pP#cwtOD0*DqN0O^*8rpn|+4O%nVLWnH1M@?PiikMtV zCUbFvbN^K}eNZWKgx3>KxiMJhoSgQtf zoWJ@0+LTtVLMJ8!vG4NWTMOlZR~Ab-f_E%|ijvior6~BLnXf3_>oxsIEhOaCG(RC< zaA5neT#rKK`}Ba8&*(cw-r+Dt)op38+u^g}$U+V7{dX@emPg)Lg(8xavRIJ1NX@Lq zmXn~!aW5cZNajqMFa0=YB_`m z;=OC-Cua_o@uNDa=pa?oR5K4~mV(ey!9LAvXN<`9U87Y4nvY_}BCS55bir4(r_fov zi7xJ`GJQ$C)AWt_slurL8UzSplu864!E!Qd<^03D%Quc4ASF3aIUTRmYm&Nb z-&m&XXcSJ636D>gXFsTbM9zX_MVtv%qviubQfFbowlB$$0|phzv7@`osNQWQ4=uOm ztf-P(v0KeXY2Z5O66!_)2(6$aZ%+rs$}ezXxH4f`>QsWX$8NP>PuSrv7=vzJ;O$Nl z>p1AxIO~WmtJe8y^?)}V< zsm3RKHz%V;hIWd|gl`@sgUaZ*aDG3P-kkMaGikiT^7@Ee|HyQCZE6*s3Po~RTn1>) z2JbBl*T`rz+dS^TUUK-TGSuFnJ(++-027|=kvBeXP z8)YnU4cdbAC!f|*3<5J=1?pW7meUUGrd?_orO1(?t;L*DM*CXpYc~M2s~M_kRi>U$ z-}@L@+&4cuNj_UklU1SBm2;zPK|7X8WwU89(slq9OF?VmI=S+=?sCRqz2HQla^<9$ zQv`QZzF3=s;E@d z%o@SgbQ2z&CjVQEl4e*4R2uor3TQ59<(3b^{W{R) zZi0k+BS+Jhf^V(nj#dw74zh+LsH+=VIkw5oXd`hSYHU3G7TZW56Iv&vLAPWzVX-t8 zBo8OYCYu%lSa&rhg9TU`WdHuTa^nSPBT)hi0u^|*a;tOAUM}#xB><-SbJC4B=d6%h z?t|5)o;?A;ZHqGG(4lQ){DHkuil9)6QOrCD+F{C?m5ITS80bjXIyNE^9X7w2hCcc z*|SClcMQr+myDLdoeH(64u?XSx3~W6{Gmx|0qq8WhLojJhw!rqz`MRSB!7PCGx_^} z*T4o%D+X<;#2=&LoTQ?wn<1g9#e@AhHo+}8H&82wpr-TB&K-^h@UYn`6)`J{7G>1H z9zXFrUl3I`MC7s8=g7pVtK^_@1LdHRZKWp^v|JbBX}N?}4a#Vgk4y1|XJDI$lz#Wq zbu!_RPh|}%)p&uR^u@<#CL!d2i{ntbTeO}9ZqcmC^TFw4W*yz-7-GO@ z&%#)BD~O=&@<=2Dz$MP>(1hp)rIiY3nkrrNPcrb|>Bl&S3MC7ER+OVy%0Hm}&#Hi8 zSYq7Ho8z3qs10=hW=dQ&^FfNM@PW-a57k3Y9#BG!sx;1<6@lLvX5S-c7ETmb%*{oBY7Pah;DP*50Fs){9rz%HO;$-u9b0~+80 z_a(Qj1Lb&a`ckx!m@5lj+281 zmZ(Hyc8U*$R7vfCW33=Ohu-}XDa zkZ14wy(<|wbA7jJ32ll9=XQNfRBm{9lDspo0-i7?j51`>0@2OQZPJ!6l{nx`)7W zgXiROCxxJ$*q(*X54-nze0TEv4RR|K=ugXO-n7b4n!V#gPIdg)wZIZ3xFe9CYi0~? zARBJ=BZlV74d;!L4!JCJX-afjLMOMt8Xd(6<78pEpVh)ibN37L(Z_tbY)0XBE`CPkMR{KBZ9vOU zgIb3eyu{ii^e(da4zIy6>X=s}KRI=Pe0860@KSQDT5mE|tCr9lQpN_)SzRMH|Lr50 zg=A4gWH<$fa3d%!#=(qPd^zf2nv&9$61upL=`Ph_(6=;z8 zz^im|uY$W90Z2ajOSf8%iqQt63h~TtW0sUb4Kku@rbdyC=mP1i(wkqjbR&H!$ob>E zZVK*Q^YXirI);=i5zOA!PCy%)m_(~8g1d9uO_VF>^C<<>UW){;>J>`<42D&y9 zHYOGm%?TqCsAzHWvy_vn$56qvYexdOa|_EWSgrzJkirsf*B z6TxG~x;U8JX5|ld-*Vq(s4al`#D71Rdr?hl6WZCaz`NDRqdCvV%h)(t8*$P#E@~>F zP@oYLQX1GSSDe^K&N#f66tfc-X$f~nwdM0W770b6z(02dE!lN|RvWMx$J8pJ_SASh zK?4SA(xQzr;en53@n#lV+;%XhI(=F5m=#0;&IWMBvYcuZCLAIs?1RFDx z6pJf=I(7R8WGPa~Z$k0(_vcn&tSps{9kf(NsMj!2QD)*Ws7OY=CE7-FB`;JB+SVXH zyKt-w>ssVM>vM_JQ0naXdnKSvz?c)mIIN3}({>A+(2C)n7w5_2?<~_+4DndHrY7A> zdj_k68!`w7;^D}F`Evc)L*U{@>j@ifGfnMffL6@{(xV130RQ-4soeGST>PGE++1k~ zcRuq(`gY7(3|@s!NU5Kos#GTGmXri5!YJ(~Q?lFv3+EsYjmv}l0q(Wut|s*#U@|M~g*$aus; zT$;d8wl8NtFy+E5IGxpJW<4DKe0qEE;TPl(h2Qe$>prsq-Cq@8g`e& zGwgsvVpbEzi(`E1@cbVvtdJY;n<6XF$kR-IY6CQ#M&*my=8X~p%=E^p!GrmjSyF(& zrIW`N%a2b-;q+XFvhrKr0c4Wir2ful(Yr`ObKs0%Xp?wd%{G`77?0Oxtd_f;oFQwg z!JXOaHwlTV{z9B43s#WsC1IIx;b_?xnH|}BYD+XV<&Rg{`2)QJu$uHKZDcV*v_E4} zZ$jejZ~i$?p80Sc;>p>!#lrY?d=$)P_h!Zm2aKLYt^J31js~{wz%hLatC5R2Ob#5- zUVV<<(c?|0D&>=yx1=8;$pd#OpjCRXXSI60fMg8z{0(8b^@%C+-lvuL6m1xEj9aD% zw9C@Anu{6}XB~_h8(&924N{17YPe{;ElfRNEuSyR@!O3KbAWZC9j+3Sops3~1BMRi!i^gJ>Org|8p$?h2 zyMAYn^ezH4C9~70F$T^L2C@)9#m&#Vyib_Zf%BLh{-3Ug4Irnr6Fw@NrCu~=oAqNe~kpug-m2m^RO8X+z zxnpp;4z#ys?~O{Kn+c^37N}3S&RtUnXUj}TYqaEm14WlS=fzc4q7v!n&!&J9-mD%O zpdwk3IyrD)o?LzYDCtuQYN9)#<0S6*ohczw3~1-=(^bxgvf!FnJe=1{Flub8#-U<) zt_tK<{o&uA$zyLXN9QLhg1%jZ*OMC$Y10E_UPf-ISuiWL%|QxLn@l-uY;QRnSt^|i zbEJqRu2kaF^X1&NG-q)$R&S-1+G2wp6IOeMG&h5s+n+Q-42m*@ zYosy+-k@Q(JjP1!s)DDMC_kT^IF7ZYy-`7IlhYtqp4d~)Jh&SaMCN8%fPH{828WkYEaFUOJn_KHc#1m`P6 zN1%?#jT<+li}dZ9EBg-ZBAwtl%!9UQ8FqfLxUEBX2csr?2%foI@jpMF1gim6El5zD z7gyBEb+CARvKaLN5i>(eDKlo&gR3Sy9&40EEvys@3}^yiL-;%!7Lak>v*bDyyzF1b z=5dz4sAIU3H^UT5XlG6K7}S+);IJ$TmpboQ7K38S>jLrzXxsmIf2mYQ(Cfn$38a$Z zdu}I%EJ_^3q{T?+Qn~r9}xWop_)dd1j0@p$CLwl3&Lg7sbrZlS!3Z;N)vnykOJ?`TPHU> zGD}ugGNYJ*GG?O7fIZY&CvX;89+k#gwTmcl9Gp@}uZfdoA$>G2ScBSdIWn?eI}|!> zCj+~-kgAjh+hMgFf}2`em-G_&yAY9iXQ6x8 zx4zaB)t4AW>G+0jor!vo`|=JLnjHXWi=1;yoNL!?$);u5!pFz7JHI+}mHgtV*|NNf zQrl`f6OBv}(!q1|BN;%);;Qv5c0rpyQ*BtyKN^ASMoFEEB%@BQ+0S9Lp{PP>+FBXe zJr7D`ZyDCBjdW>K)k=eF7olp0lZqO2?vh-M9B=!j^2E^<9;rN$ z8ar*-kRmLdr6qaQnqdK?ES%0*zARP>f^D@ZCoJ9C<;t+WpduqX%9!3|s8Sl=9<(6j zZYs57luQ9mB-6srW$)70@K+sv|7a14U_LSpnL<T`g%zvshV(gU2 zzu!IHFGgq|V|(x+oSK-@(}4D2YK+Ga~(E`Go{m=usGM|M|0H`?qyptTd0IZk|p zIBil@n5bVrHASA9#9}^haA5*WL|II=se;y~g4r%~jSI@FMcJejVwzIAb8eknecllH z%7{)#uys16mh6qua@{%gl?0t^Nth*mz5@WAVCf)b)rz5%0w$d~XrHb_8;OS}qlYy= z%M--K;K2Z30H0Eo+ZQQ^nw64#XxdI~uq}dslEDhcK*fPH%0Zw_Ze|F8EtH-ei=;c+ z9{1^rx^W!~rK~t;0EQ_qOD!HoS*)PS?)~y$=D+$hURpXD;AxpYrP7Fie27{eH$Fa1 z7O&_0v0;$`*}R6_Z!I%Lt2b#O97t$Ne2tezmUy5By&enYn)8t*o^3jlIozFa(wo{% z0PT(VM50fvVi6Nn#<0cLV!$4KZ>ik<+-Fi1Le>ODH+ZZDE9nE%+(R(?tuDDGO!`2* zJ5!|&>M7$?`4~)gNbS*~P(}^tEJOO_N#{1%(!MZH;Ac_APwNutHSIbYvk;r~__nya zN@vBXTa$5@v;oSV*k;TiXLGg*j;`N5H%oS4WssaO*46T$Zt0XmyY6lSXe%Y4x2(W$Nt2G>E=6OTA0Yd9#!3v4 z8z@!>4Qg7wRsLb9qI#PUP_7+OU4&fRmZ~a^N^vzn0gRd8y0lt!YLf#K96;PIC`*|@n3|TvTOnZ$pYaJ6vD6^ z)F)H3hPt-NSLK@Oh$17t!rW3z-9JfFj>N6YR4!ZBUVgew+P%ZSY>@cSYS_VmRAW1O z;MMu^;2SGs6Qr|IV>>ft05iSSX{vn7sh5sFvqpq^w-m_rC@&jUGf`=7M7p*wk|Di2 z$sh#umzCyA$2NIVoFBk31h7#Z+w%O~ZXxv@wXyKY_>-h=n78jtHX_DZ-LH+frhnU8 zbCN$h&ursr|MM@W_u#}{Ue{q^KlJ7@x$osgvJu4|1DY(0Pu1b&zME*lP-%egV_vw! z@vl-Tm+ziDR8BdlhvcXk&p_?bp+Y5w0jF~{@i4JPki=%4G@uoeO`OpCpb~))2f5un z(_gu*&sbg~H#{&+=B>4wY>4iMXm+s!gdBm)G${@{Eea}uQHu?OL@PyZWD3WHE|HFK-9Ci2@{tm=HUgzeU$KnC<^BYiq# zNzbxknAQrVEu!c^ktGv*85ff)5T^8Fccuq^nydi?WvNC+;BD@6&Qzv5AEzP3%a#2f z)uCc~L@oY)`h#Wi`)B83N6puJvC<~gEt;||HwGE!r8uh!wLJRCIgrvt%D;W!7pV%} zIu^TQ3&dzlqqV|EbZ;fIBP9uFze)HN!Yedq0U$DMYqJ+ueNbkutdR+9Ikvi1LP+Vc z;@dRb(>=DEgxpw&>=?&|{=plV&bpKK*D}m;miGU&~)!I~Ew=NEjA5?CI zbXz+oj?VRN3~W3WoB8mEWDFHD9H4DX&35c&I)$LtC_DV$x&+wHy0oHRZg}t``EUVa zV%WdNl_g8Ul*+s14%@w?UVeMUzUVqusQZg1E31sQR()|VugS<*pPNLuIW)Djgp&re zb?@-Hu^UXkupDp|#yY@et2FA6AsbK%_udyjmB*3p!;XS1oSlo~^3bz4KPxO<+Z9N! zjs?=AW1jTt+(vqLE0MN^Frk5t(6QmuWK~g9QBJXL_GRV0{L@XePB^8E^6j)Fh4WL*VRKxoz6 ztdlWl+K$3DAa!!yVV&i&uMU(p*m_lnnW!_`MDDIgHQg+(TN%#0v&|OswqHpCdTYky zSyX}?w#zw9*;^(;;1usnUn{?OY$AH+A-WA_&C=W)=}}f7qXu?@DXmaC7G_Di0>mrl zFgx2=qP2$brlo{R%`xg`5LU|PK&|Ga1j)SHQV%?nCjGhzv<|pN&CFkA79NFF3MI7B z8e&k{txhKw&{}jI`_+?hiGN%!H53vAq(zNw16`O4cxW~D8t3iX7WKW)8z~3&Y2%}F z?YpWgsibl*GYk5?$d*og`J@ccjd+c_v?n6=;C4?zi`>-u8Vus!R8b>;e`OAe1U5() z)Mg&o9no#wK_iOEfnkN9SI~yf{dl@!rn$xsMh2zrKfFSb+?v}trV_P`&1Fr z748*sj=H(11r0w?xZye*sv6{vFV2>K{cnxbYT<$;s#&>PGny2V zUPX0s?RnM`gw;T-)R=RqxuTE0X_J2{n^mJOj$v;T)JX%{vnyLoPI@}WiAoQGQyGUD z+F2~oS{%^i=E_Q`j>7?>7&pacYg3?Gn~kt*=Z;Tioan@-v+>rH!fD>=r!pD^h6%Hm zcKPCt2ZbyfI)(Np)D$U;N=fN!OF(O05w#&JO)v%J*=~7wsw~)migvLcEzRA5(Flzf zp<@PT$%$6UA%oGS_QL(86WUwQj2G)<>pTU9p4DNC6UsEKOvC5h7byo zG$4%!1FpeH*(e)@A69(Nq?B=44EhjsrI;rJ53r>P$R5Z&mXSxdU_7k-ZV{i-6i;qS zk+Pj9)6I~J-uib>nz2yk%vmTWk3RyzR7iqQlO9r?Qp%rgWWBgD2ovFqTC~Etb&yqe zzc5Fh{O>Zfwm!$k4~jBc34;Gj52QR3xcqE zl}JGrOZu93G1(WKagMQVvD#zmfr3g4s*=V_EkZL_Y^aiVC(f5CGZ)F5?|mX`)^Aja zp*4`eg&MT>a8$BkTh@39CadNJ;FP93`jAj>Kwz#mq2cD3!wFNPw zoyN72sZmmTf@%FAT0Av1;*<@rXMtj6f}xkfX?DPvUNWFdu^c?COga=~Yb2yEgKSez zi=!qGoBG*mIq_S+k&RUX=@yWizJIEmc+?n3FeRxmJ8e9J-3_~rYU91{%RT@h zv}jX}TyxJPnYKC;ln8Wz;L@fqW*E@!S^%{5h-pq)Pn1a95ol1byVXn>0KNqA>I2Zd z?3Ba%px1d9X`h#^V$a54Q?y{=vGckjiLWySA zWG>AefYKW@179U;r>;e>VhQ@Y96P3+oO$E`>5F8HY^{f3W5l{HJlY#20wDl8zJ}~3 zl*2LD9yeKqLHYn4T>tpc%ktsJ3!xZfvTlwQ!M03R1+&%Mh+oJna+K^!BUI{mPY|~Y z7E+8LLaw7+dEVi2(pN@F5q;Zs2hIZGzPncmXzvd+#fY;r2Y?=b`JJ+=oPvWAu}+5c zYb&>2a~A51^hOrD8++XtImYoV*b%v85S8>XH0CYZ5RwTG&yYzA>tFz|_S3`!udluc z&STQ^#u@hu0J?$ePUgGfvae!}RLedCO5}pC_D7lI5_pg`Gt`8gI@9cWXh~ucnqad{ zfYiZ2U57VbpEz5t`{fg|2$dAsYeO4HKnjHY-Ky=`4Wa&Po*qLcHRO1}2^GN*7Dy)I zoROZTi;4UXZQ#gNdK{R+L# z0cg}`jxt9QQmYRN=ltIdm&(DzdupbQ&ye@r+Cl`p#7@;C^Zvq84X@ebZ_bn7zqk~N zYk{WDg&4n%Pg$vyQdZ-Pl9)StVvWC4EX8^zlEa5#=V2HCl;9v1@=(-N`O)bkWL$4_ zW^m8u)jwH%ZQPlGZ2da4 ztDY_3AqjU( zk39L_Ns!ci+8Qe$CS5=k08P^2n3i*;*5ih!f3^&g`AL~HdzIQkxeCmGPmdK(&XZ76 z^%*LfKkaCR>(!xB!$I0{9cDUkbj=oR^*6|!xI9>k?w;GeDF=`22YaNqd7HAa*St(z zDFCf8Jv!;4RNB`syF*rP_Q5>X-&-w77~c`d%K6Rp7s%)V9U-aBS!Ho-UMV!dr0hji z2%xFKPW{fOt6|2QD(k8Xa8Cp@87&L|h<(r*OajpM$Yv^}BaScLeHiCc;{x8xVn;5V zj&`#wP}M_w2eeB=rxIk!Xm|ike9A5$qFGr;wCv8{hHQw* zZ@5Z6DVvd2d?KA)a#0&6I;dtZ-Y6$s`b$||X_@dw>lST!k|yIdVK{{%+6zE-BcHYkNgMagkcF!)`GATc1)Zw$u90U;qwP(#W(9ZObC^)& z7C^N|L^wB$2O<31Hls#PJD{U{^Mpary%17?V}h`>D2G-JS=;4iz<3^%`~LNT-2SJR zWKAXF2mrWj+*kt!*vW^uf|rme$vO{edsNVq4S7*x273G3UY5>ku>j;+NCm`;CP3UM z%u-ihak5-;@&TG=W!^AT7Waym8w-w^0z|DG8|8#6ekE&=kI7+V(kdMuY$c(}IdU)y zVGcd%h!OIWOTQ-lkj+l^p%R`_4|D3{7E>{XTx2}=W+c--`qol;@a4}@xfE$yN)@1G zu_>oF<0i2&Xv!9TXaY884eyqm+MZXf7%KJHWq^1hCqoB;yn6Y;=|kkWF#Qm%$i2rnA|yP*p!=cg?C-b(phvXRbhs)@)f* zpRa-c7Sal%tnRA5;84p(SF?Z_{w(&H-=&ndn0GGj&$X&_1MrnfQW9Hrtj9vl?Xlp+f=c6QzHTGOZJ64!^Aj(a+-c4K9rW5m{Xwm0vwI zU0(ZSlT-)Tt&9r|_l^7Y2PuB* z_Nm!I8{0!051T!N87%GgogCqgfHe4h`nQ)q-hLq@O$UoG(^un3@xgvON`S`)y7?)O z-O+X(96z6G+hh8ryUiNDMnv-h841b|hjQ=%dQJrFZTS2a3i)V8JiKjMmpaCy} zy!DI%fnPdDw@ne_A8iMC06BwcX6+xNi zHrX}uhi~mGV|$eXJCS;fS*Fy0Zv5!x`{l_u=fL?vQ;2a~-A2@85-aBPCGIZat5hI3 zWUle10-8GkdP;Nk6+*#0`rzL3<14=|UCP=?d3m`s)HlGpYk^XYV2OKF|614w*EqmA zplYm$^13*p62Zu6Qb?(;!7bHn?TN^b2~r0>zbJGr^*a80jTfI^ggib7ArWLxK)WGB zE2#o)w+JQB(qmMPLUqa=^YikhUHej*JaegB@soRHZ52SH*fQr6EeiB7vk@j=)Im6J ze9mCFUfSk`<%FX~%1^I6MY^;rcKQ!4!C)f22S2B_Kicw8dk%Q$A6Fy=d8xf08||B*gb7AyI=bDoJdf{?@WPA^ubo59!SugEKF=3{vI~C zhji@FPBw2Ym%7?|EH>*S9V`zzFHGh zvg_h8@Txagq2dWb!j2Ia&5Czk{bMwEy87PtWl4201T(0Q1GM=StUQ5^mC}xu2*-AS z$xRg(wN-PXght5=bPqUgSUzg$?N5qgfPQz{Qu)q}56Pm{6__+eOYzoCVe>ZQ)ZH4X zhDj%Nsc8BQC&@B2v^tL(%J~Gw3squJqG&d^k1O+HgXc;dn3()^_=?NZIDBma69H{U z*?Zn9;D3)VlBUmP&@jQ<=;c6TXKwsmy}l}KZs*{!dOXE2kL3czLf7X-EfYNh9a1#0 zdJ14AAq!&|m;BnxRT@L9o0i>a#@ zhfbFo8PP3QCS0_y0h)!a?||wHwJ8M+T2}x*sE;T z@5i>_*mL>M_;KPgY5u`u3ZRpS{>a4lJ=f8wMKyu?s{1C@?W#_ydOG07!obc5YI`1f z+UTOr1eI%-8+Q!Ja%s0Q-ydSEHbUDkG<9Rq0Hg<>If;M2&v>j$wB_?8J1of^$3@EpY^F@JL~yT) z_y4mXL~|r)^fdc#>sXq_$X9*U(zkBhR38E&%1{I4+RKlZ3*m{)aWTt02O}X9NrzQt zvYmkUP5Q_GE!or{*P~JA`wP%42s^mN>ckBOY7f_{Sk9K*^6+if5q|yI-pj>qKId#a z%Pkl7A)uqt)f+10ySF_q&%M9EtbMp4ignwvE!ai3o$b1G^9So@q=U(a=UII!I{|H( z;t^OmXvXtRY8qdCYiRh2O4EUAZ8gK-$u#<{UTczu5A91Gi^JWmr{ck4pd0t`6+#Q zbVwIIX@hn>$KRAJj5nsPLuHyk=T6FR#v>uE(mqdN<~{vYxiT&NQ5n*`SSI}NR5{{+ z!LHOA7Lfxq*@YP>tS*NxDD2#974p%-wQ}uWCd;zw5}hwoCUIwK6E;Az7mF$KDzcIp zn(aD<7*)JDs!9h_KJ3xAUP!YYB=ky1=&NpiL|&e_KnI2()1rJTnXRTmT;bZTYd3kY zDm54}dX=)Mgkn-cxFKFstsBm);-di)Z4oxjetpKF7FY7@l1)LdWoY_U9|vAjayL=_ zCMoN;8VCQqEziXRH33ek7HJp3YE+CC1FI~AWKvk7G%;DjaLJoFFqV$R8qHP+k>G-Y zrrOS;&-QZHUB7M$LPI(bt3()%)O*ut}@?{--Z>J-Q6KR z3|0ZZ&;*21beBB8xxa~A<${E-%TbFW&B)xcdr|nPTO+m1qV^zrN@Qs7Fzy zu8}uW_)U6eVw`i4fV%(aUh=c6PLpv%y2EbGRmAUbUbstGbt7#ojYV+B)3fD?|7}!S zQLol2XI@oj2WgL27Po&XCi9GXFHVu=E|r0_tl?dd!E*6fypIg5FgV8Z@6MGU-u}3( z*;HlrUsXEH+R=PB&}1&(^f3x(HTigjhNEcOHo3LhUTNvT+ZwmvhSbjHIYuJaXe^cD zS8a-qZ27&of)_tOe{1UfEjQ6*&gH+eJ;(YdXzn}y{tejKh;+SKE z$x%tn1E)R+#a(Xr@!2v2jYqS!c#KtNVgQgicp!}-h5z{ce0kt))cVF8)n{ZIzgOU! z8{QOA?gmDCQunf0d+su{gb|k^O`ffmBL)WLh6@icKsSI|EI?)b%YJ&dOrG~SZU%}3 zZruCi%{a0}48xbaOM{B-1nL!2jnycKu5y+yQOUx|a5n2NdCk4|>&`@~V1ty#e5_r_aD<;uKCW1G6u=Fc`ne&TDDOMGc)R2b1LNK2PUI#bQXMcIfS{BdC5hIBVmepQbxLDbt{`0BmmXOrSA3O}BNU0&E!LoN?GmbY zW2sp_s~}aNur|fq0pLERlEY1q-D9Z;afs0Hk)e|Gd?{B-)rI%U^O$?viUFAb3A3HC zvwpA`Z$*a{pd({dZ54p?#1sVY8=)})ogfhKe;4|T9|2uJOMx-qgd6`8&wU_Q-}Qo2 zqr_JfK=a#GNDb?$G?G&`lOJ=nF;kedhQQ@J3_#-Mz?fRZC8)$s<+hcIk=?z{VNBL6 z6^1WUsu-!JW6!@eE){$f6r?z_LB4uOfBETEUzfgJJGxTj{2IA2vb`}s54^rq?s<6y zQn9RQs+xD5nXv&*4!Y%;g`H9swR?lXp3vkh(O`fkS%6-lOD16N>s*-=qy9gvO=BS zy3LTAxa&7XWBsiq($y{Bi9gg|n4s9S&%La~|ym+%*hrTO|H*#Je;q}~<{3wx2Kx1sIHb*M=R?Bc= z;F>l56xL4_0ssICJ4r-AR3tLg$`!}=lCux(A%$$~M=OVxaKdfYAhYG#+nqJ9NELthf-@`N!6;{ea@p| zSq;S|AXGoH7eDc|z?3`Vchp|Ar~sv*{idMywF}qPM&%cePm+I6y4E*vSn+r!+<`_wu!Xzb2MW0m-Mi_7J*pWh=h7p&Eq z9BfZ)$(X7qr)(0rQj7-k7b14|>MO>hI5w11m4d0eZpt2DcRG;{p9{_9 zaB9=}nAmP4FJkdKHX}OpYD-p5%rBeQxDG$>&08ZkpvcUII_NuevS=A)^Ylh(8PSE1 zeCvu9hg4(cff-~}Wx?HDnq4iI9N$;YKcW}7Kkt*&2NGKCzbp=d2dxM4|Mai7<&Jw^ zkxgh2!wrVj_kEsQix*Au03ZLrSOs!9O6eS2WXzy;@|&A4lEEmL!rEmzj70TL!?f97 zc8^yw_p0L7jUnkHpUv_SW33+4+ClZ(?8gjFGtmu9FtbJDvfUJ@PGbRUn;Js$$XlPv zU;n*Ks)8sLN2?SlWDwyDQRqJ=uu=$UH6-vpvY>g@$^rdz)8u1!&HJLn;YcTM`y?f^EYXJp#ae4`85fxfY!@5V^EB~5D!7*j`r;kkRP8lLJsMh5Bq^rdr>gmD)`5?bWJryR&Rz(gMv8W&cDmV znTw?sbr-ZPu4_}EgF(&K_8?R07+^?=8lw?*6UNavKn7(F6#umx7=|ZO84RO$VL+}p z>u9;+?8DIVjbIP;O>IWo zqu1Y`Er0miOEL>By&B+fv6V>Imd8eFN(k#Z^Q5Xt6gKo^yVhqGGV4Mb}PLxdOT3t}?>ol0>PB^HOloi0r z;e;X~LIi8XI00?9WPW#TFMyT6fD~FdY7j*=7csEc-|>`8nYBn7z+XbzazHz4I8wnt zA{UdZ1c7n8G}^m`q6T)FfQ&mau!JqXy0*)gE6+Jm&OKo)dV9l#>T07YGtsro0ZRkA zb>W&bKAS#rie|N`V8C@ zXuuG*a#Vv|5_Y^YL%fUOa^vp!v|EMdiSj|{w3r|m8_i$#AJt3FJ?Q{B zeB2-@%_Cb&2btw)& z_LQM%*`&Og?X)_Ioq#tM>s;hAiphC-yL5k7fr5NIdkL%`ljPY~CrWv3w)R|6NlI6w zavobNS{4;QN;eR>l?^jaA#BV8dY8%hrynPW?mIv_mlaA5yn?5O$l79EW%=6mQeIsxl~rh_hhuV}6tpQSkai_Ski=MFC~1|8Hp!W& zz^*$^LcEbd*43;_ELos9PJ_8Mfm!dxHg%&7`ZxdMLQG@2m^sX8Tp$;&ua5v9QCW$m zt?Mdl5Zze|{J?Dvnvsj1I_xl9T2LTmZ3@u-IaBiBhhR#W5nrz~noq)ZZYzxLo%DRm zI<8SdE31zK$4hFxXZOCc8!y4}4QEh`JrC;lxr&x?2&%=5P4yUv@e{LjP^dXu zSM1?D`h3J5f$L4f{_AEZ<0a|Ouv9%W@2dPZY07u4ldLBcX1X&#CvGSFf?JKs56l{& zD-hqNB(@H*4%zx${H3RhZ5pl#xzQCGUTmA6Gbo2vTVtAbv?geqi`>|( zf4R*&ew#Y4dYF^g&K&2VXuKdM{H&}O&Z(er-_;Oin|t$4+k%L}j8Jwbu?59T#VQ4w z+0I@G1UGRc(-3BWTKQeK*#qZTSbjvsX&cAu>-DMEOwc#{z$x;^zXZJ1RBjz zb2k!`Z}yA**T?&8>q}p7cWw;mT{%4IYo|vbH6!r<40ki_1VW{$00000NkvXXu0mjf D?ZlHN literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..eb60e02d1f91484a0a49bcd6fda1c2178ecc79f3 GIT binary patch literal 4022 zcmcgvdr(wW7~f`kH&ac2SZW!HX^wzeQ%$2*mW4gEOq4(hc^N(%gBe7$F;i306f$G9 z#?q;zOeZtrArCm=;Wx>3w=wW_)&pr2i&+|PF3dJq- z=Qm8jzlv|~Qz!;06pF_QeuPN`UKfMD`3Fgm78D9}4O^!L+Lk65+uPuBx!lVG`m~$$ z=+w5rX|?p?d+GFXY+oFPlxgF!Hsm>EeZ2)1gTB|E>v>^$4Y_-8@}rq3`EUv@_=zFkl(<gja&Ff{^@jpajyNZCL)&Sb?M$$B6a3JsB`-R47T9LUIQq zC-mWN@O#CkSge^jv5$P#gLR1XyHz&k4e#+^Ecq|<((17FPbn2sS&~095o%EN6)~Pm^ZOC_AR8vy^XZ_vydJif-e@# z#v4eDw+Zx@|p79qoc#?oUPjVI0`HM(FHG)2VAk z*~%G0es0*KD2yA2vXtp)K7J4`r=xqT#i)n6z7DlHKcF%HM;Me$IAWh-9C`5j55&t7!YRl=sH+T@{g zxAIq*=#}SCwD4&u-{`3)o31*@-kQu*5ihJWpH)uiP#j(G6fS&|0+Z_RtFqt?PP-N7 zwlC{G_qzRQvgmk|g>v>pQm{lzc~ZVM44TR!VLv%Q79aKL9OOlg68e{tAGz-OGE_zT zaAfWXp~I=wvn1Iv8SptV4g2m$#0WGWJ0O#?XPd)f67?xNgzDBik3jibM$bp@nOBS| z5A6^%Ok1%z4vtQ#7I>3g?Ok{Al*kv3gW@I6!q8CNFNs-Q4^{Dg$``$e@8YEs$@amN z<3Z3}JlQXetVKHOOW&^(wUc!?zjHZUUG>J3-g3EtYTRU;{v;G`|&YCrd;)VJfp=8|zv{AmFv{13 z|8I@!Lo8!KTXjP8QO+sun`STHs!wGLyYs1TwpA9(;ON^H7u{p3zgsQU#eQN-uRJem z_QhSRe5%pDXuB-ZVxuO073g=Id?o)iHqO-^jc~JBSn?dIbt83cJ_Iuu=+;h%P zj=>u}YBN9U&U3eH@g!gLmzM*rkE-|=>Mg^1`+#I0iSUQ!Y~R{A(DJ#rmamTxJ`nd4 zzM~K-(-y*EF%Go2e)(}vsNVfCN|RqhY04X@*}D;Z&%Bv~?}0XhR@B++>2dD=gKzfp EKdz|oLjV8( literal 0 HcmV?d00001 diff --git a/public/icon.svg b/public/icon.svg new file mode 100644 index 0000000..08b7be6 --- /dev/null +++ b/public/icon.svg @@ -0,0 +1,22 @@ + + + + + + + diff --git a/public/logo-emblem.svg b/public/logo-emblem.svg new file mode 100644 index 0000000..ab140c3 --- /dev/null +++ b/public/logo-emblem.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/public/logo.svg b/public/logo.svg new file mode 100644 index 0000000..52593f8 --- /dev/null +++ b/public/logo.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/public/mockServiceWorker.js b/public/mockServiceWorker.js new file mode 100644 index 0000000..a2e8a53 --- /dev/null +++ b/public/mockServiceWorker.js @@ -0,0 +1,349 @@ +/* eslint-disable */ +/* tslint:disable */ + +/** + * Mock Service Worker. + * @see https://github.com/mswjs/msw + * - Please do NOT modify this file. + */ + +const PACKAGE_VERSION = "2.12.7"; +const INTEGRITY_CHECKSUM = "4db4a41e972cec1b64cc569c66952d82"; +const IS_MOCKED_RESPONSE = Symbol("isMockedResponse"); +const activeClientIds = new Set(); + +addEventListener("install", function () { + self.skipWaiting(); +}); + +addEventListener("activate", function (event) { + event.waitUntil(self.clients.claim()); +}); + +addEventListener("message", async function (event) { + const clientId = Reflect.get(event.source || {}, "id"); + + if (!clientId || !self.clients) { + return; + } + + const client = await self.clients.get(clientId); + + if (!client) { + return; + } + + const allClients = await self.clients.matchAll({ + type: "window", + }); + + switch (event.data) { + case "KEEPALIVE_REQUEST": { + sendToClient(client, { + type: "KEEPALIVE_RESPONSE", + }); + break; + } + + case "INTEGRITY_CHECK_REQUEST": { + sendToClient(client, { + type: "INTEGRITY_CHECK_RESPONSE", + payload: { + packageVersion: PACKAGE_VERSION, + checksum: INTEGRITY_CHECKSUM, + }, + }); + break; + } + + case "MOCK_ACTIVATE": { + activeClientIds.add(clientId); + + sendToClient(client, { + type: "MOCKING_ENABLED", + payload: { + client: { + id: client.id, + frameType: client.frameType, + }, + }, + }); + break; + } + + case "CLIENT_CLOSED": { + activeClientIds.delete(clientId); + + const remainingClients = allClients.filter((client) => { + return client.id !== clientId; + }); + + // Unregister itself when there are no more clients + if (remainingClients.length === 0) { + self.registration.unregister(); + } + + break; + } + } +}); + +addEventListener("fetch", function (event) { + const requestInterceptedAt = Date.now(); + + // Bypass navigation requests. + if (event.request.mode === "navigate") { + return; + } + + // Opening the DevTools triggers the "only-if-cached" request + // that cannot be handled by the worker. Bypass such requests. + if ( + event.request.cache === "only-if-cached" && + event.request.mode !== "same-origin" + ) { + return; + } + + // Bypass all requests when there are no active clients. + // Prevents the self-unregistered worked from handling requests + // after it's been terminated (still remains active until the next reload). + if (activeClientIds.size === 0) { + return; + } + + const requestId = crypto.randomUUID(); + event.respondWith(handleRequest(event, requestId, requestInterceptedAt)); +}); + +/** + * @param {FetchEvent} event + * @param {string} requestId + * @param {number} requestInterceptedAt + */ +async function handleRequest(event, requestId, requestInterceptedAt) { + const client = await resolveMainClient(event); + const requestCloneForEvents = event.request.clone(); + const response = await getResponse( + event, + client, + requestId, + requestInterceptedAt, + ); + + // Send back the response clone for the "response:*" life-cycle events. + // Ensure MSW is active and ready to handle the message, otherwise + // this message will pend indefinitely. + if (client && activeClientIds.has(client.id)) { + const serializedRequest = await serializeRequest(requestCloneForEvents); + + // Clone the response so both the client and the library could consume it. + const responseClone = response.clone(); + + sendToClient( + client, + { + type: "RESPONSE", + payload: { + isMockedResponse: IS_MOCKED_RESPONSE in response, + request: { + id: requestId, + ...serializedRequest, + }, + response: { + type: responseClone.type, + status: responseClone.status, + statusText: responseClone.statusText, + headers: Object.fromEntries(responseClone.headers.entries()), + body: responseClone.body, + }, + }, + }, + responseClone.body ? [serializedRequest.body, responseClone.body] : [], + ); + } + + return response; +} + +/** + * Resolve the main client for the given event. + * Client that issues a request doesn't necessarily equal the client + * that registered the worker. It's with the latter the worker should + * communicate with during the response resolving phase. + * @param {FetchEvent} event + * @returns {Promise} + */ +async function resolveMainClient(event) { + const client = await self.clients.get(event.clientId); + + if (activeClientIds.has(event.clientId)) { + return client; + } + + if (client?.frameType === "top-level") { + return client; + } + + const allClients = await self.clients.matchAll({ + type: "window", + }); + + return allClients + .filter((client) => { + // Get only those clients that are currently visible. + return client.visibilityState === "visible"; + }) + .find((client) => { + // Find the client ID that's recorded in the + // set of clients that have registered the worker. + return activeClientIds.has(client.id); + }); +} + +/** + * @param {FetchEvent} event + * @param {Client | undefined} client + * @param {string} requestId + * @param {number} requestInterceptedAt + * @returns {Promise} + */ +async function getResponse(event, client, requestId, requestInterceptedAt) { + // Clone the request because it might've been already used + // (i.e. its body has been read and sent to the client). + const requestClone = event.request.clone(); + + function passthrough() { + // Cast the request headers to a new Headers instance + // so the headers can be manipulated with. + const headers = new Headers(requestClone.headers); + + // Remove the "accept" header value that marked this request as passthrough. + // This prevents request alteration and also keeps it compliant with the + // user-defined CORS policies. + const acceptHeader = headers.get("accept"); + if (acceptHeader) { + const values = acceptHeader.split(",").map((value) => value.trim()); + const filteredValues = values.filter( + (value) => value !== "msw/passthrough", + ); + + if (filteredValues.length > 0) { + headers.set("accept", filteredValues.join(", ")); + } else { + headers.delete("accept"); + } + } + + return fetch(requestClone, { headers }); + } + + // Bypass mocking when the client is not active. + if (!client) { + return passthrough(); + } + + // Bypass initial page load requests (i.e. static assets). + // The absence of the immediate/parent client in the map of the active clients + // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet + // and is not ready to handle requests. + if (!activeClientIds.has(client.id)) { + return passthrough(); + } + + // Notify the client that a request has been intercepted. + const serializedRequest = await serializeRequest(event.request); + const clientMessage = await sendToClient( + client, + { + type: "REQUEST", + payload: { + id: requestId, + interceptedAt: requestInterceptedAt, + ...serializedRequest, + }, + }, + [serializedRequest.body], + ); + + switch (clientMessage.type) { + case "MOCK_RESPONSE": { + return respondWithMock(clientMessage.data); + } + + case "PASSTHROUGH": { + return passthrough(); + } + } + + return passthrough(); +} + +/** + * @param {Client} client + * @param {any} message + * @param {Array} transferrables + * @returns {Promise} + */ +function sendToClient(client, message, transferrables = []) { + return new Promise((resolve, reject) => { + const channel = new MessageChannel(); + + channel.port1.onmessage = (event) => { + if (event.data && event.data.error) { + return reject(event.data.error); + } + + resolve(event.data); + }; + + client.postMessage(message, [ + channel.port2, + ...transferrables.filter(Boolean), + ]); + }); +} + +/** + * @param {Response} response + * @returns {Response} + */ +function respondWithMock(response) { + // Setting response status code to 0 is a no-op. + // However, when responding with a "Response.error()", the produced Response + // instance will have status code set to 0. Since it's not possible to create + // a Response instance with status code 0, handle that use-case separately. + if (response.status === 0) { + return Response.error(); + } + + const mockedResponse = new Response(response.body, response); + + Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, { + value: true, + enumerable: true, + }); + + return mockedResponse; +} + +/** + * @param {Request} request + */ +async function serializeRequest(request) { + return { + url: request.url, + mode: request.mode, + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + cache: request.cache, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body: await request.arrayBuffer(), + keepalive: request.keepalive, + }; +} diff --git a/resources/openapi.json b/resources/openapi.json index 27b553c..38b1231 100644 --- a/resources/openapi.json +++ b/resources/openapi.json @@ -1 +1,9859 @@ -{"openapi":"3.0.1","info":{"title":"Maps Messaging Rest Server","description":"Maps Messaging Server Rest API, provides simple Rest API to manage and interact with the server","contact":{"name":"Info MapsMessaging B.V.","url":"http://mapsmessaging.io","email":"info@mapsmessaging.io"},"license":{"name":"Apache 2.0","url":"http://www.apache.org/licenses/LICENSE-2.0"},"version":"00.00.00-SNAPSHOT"},"externalDocs":{"description":"Maps Messaging","url":"https://www.mapsmessaging.io/"},"servers":[{"url":"http://localhost:8080","description":"Default Server"}],"security":[{"basicAuth":[]},{"authScheme":[]}],"tags":[{"name":"Authentication and Authorisation Management","description":"Provides endpoints for managing user authentication and authorisation, including login, logout, token management, and role-based access control to ensure secure interactions with the server."},{"name":"Destination Management","description":"Facilitates the management of destinations such as topics and queues. Includes operations for creating, updating, deleting, and querying destinations, as well as managing subscriptions."},{"name":"Messaging Interface","description":"Offers APIs for sending and receiving messages, enabling communication between clients and the server. Supports various messaging protocols and real-time event handling."},{"name":"Server Health","description":"Includes endpoints for monitoring the server's health and operational status, providing simple and detailed responses for status checks and diagnostics."},{"name":"Server Interface Management","description":"Manages the server's network interfaces, including configuration, monitoring, and troubleshooting of connections to ensure optimal performance and reliability."},{"name":"Schema Management","description":"Provides functionality to configure, manage, and query schemas used by the server, enabling seamless integration with structured data formats and validation mechanisms."},{"name":"Server Management","description":"Includes operations for monitoring and managing the server's status, configurations, and performance metrics to ensure smooth and efficient operation."},{"name":"Server Integration Management","description":"Manages the server's integrations with other messaging brokers, enabling interoperability and seamless data exchange across distributed systems."},{"name":"Server Integration Status","description":"Retrieves the current status of the server to server integration."},{"name":"Connection Management","description":"Handles client connections to the server, offering endpoints for monitoring, managing, and troubleshooting active connections and session details."},{"name":"Discovery Management","description":"Provides mechanisms for managing the server's discovery agents, allowing automated detection and configuration of network services and resources."},{"name":"Hardware Management","description":"Enables the management of hardware devices integrated with the server, including configuration, monitoring, and diagnostics for seamless hardware-software interaction."},{"name":"LoRa Device Management","description":"Offers APIs for managing LoRa devices, including adding, updating, retrieving configurations, monitoring device statistics, and managing endpoint connections."},{"name":"Logging Monitor","description":"Offers simple API to retrieve server logs or to stream server logs via SSE"},{"name":"User Authentication","description":"Provides the rest api login, logout and token refresh"},{"name":"ML Model Store","description":"Endpoints for managing ML models in the system."}],"paths":{"/api/v1/session":{"get":{"tags":["User Authentication"],"summary":"Returns the current authentication session","description":"Returns information about the current user authentication session, can be used to see if the user is logged in","operationId":"getUserSession","responses":{"200":{"description":"Returns if there have been updates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCheckResponse"}}}},"400":{"description":"Bad request"}}}},"/api/v1/login":{"post":{"tags":["User Authentication"],"summary":"User login","description":"Allows a user to log in and obtain an authentication token. This endpoint does not require authentication and overrides global security settings.","operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}}},"responses":{"200":{"description":"Login successful or not required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access"}}}},"/api/v1/logout":{"post":{"tags":["User Authentication"],"summary":"User logout","description":"Logs out the currently authenticated user by invalidating their session.","operationId":"logout","responses":{"200":{"description":"Logout successful"},"400":{"description":"Bad request or invalid session state"}}}},"/api/v1/refreshToken":{"get":{"tags":["User Authentication"],"summary":"Refreshes the users JWT","description":"Refreshes the current JWT cookie used for auth.","operationId":"refreshToken","responses":{"200":{"description":"Refresh was successful or not required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access"}}}},"/health":{"get":{"tags":["Server Health"],"summary":"Check server health","description":"Checks the health of all subsystems and returns their overall status. Possible values are 'Ok', 'Warning', or 'Error'.","operationId":"getHealth","responses":{"200":{"description":"Health status returned"},"400":{"description":"Bad request"}}}},"/api/v1/updates":{"get":{"tags":["Server Health"],"summary":"Check for configuration updates","description":"Provides information about any changes in the server's configuration update counts.","operationId":"checkForUpdates","responses":{"200":{"description":"Returns if there have been updates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCheckResponse"}}}},"400":{"description":"Bad request"}}}},"/api/v1/name":{"get":{"tags":["Server Health"],"summary":"Retrieve the server's unique name","description":"Returns the unique identifier of the server instance.","operationId":"getName","responses":{"200":{"description":"Get server name was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerName"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/ping":{"get":{"tags":["Server Health"],"summary":"Ping the server","description":"A simple endpoint to verify that the server is operational and responsive.","operationId":"getPing","responses":{"200":{"description":"Server is operational","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PingResponse"}}}},"400":{"description":"Bad request"}}}},"/api/v1/auth/acl/check":{"post":{"tags":["Authentication and Authorisation Management"],"summary":"Check access for an identity to a resource","description":"Checks whether the identity has the specified permission on the given resource","operationId":"checkAccess","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AclCheckRequestDTO"}}}},"responses":{"200":{"description":"ACL check was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AclCheckResponseDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/auth/permissions":{"get":{"tags":["Authentication and Authorisation Management"],"summary":"Get the authorisation permission list","description":"Retrieves the read only permissions used by the servers Authorisation","operationId":"getAuthorisationStaticInfo","responses":{"200":{"description":"Get permissions was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthorisationConfigDTO"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/auth/groups/{groupUuid}/acl":{"get":{"tags":["Authentication and Authorisation Management"],"summary":"Get explicit ACL entries for a group","description":"Retrieves explicit ACL entries for the specified group, grouped by resource","operationId":"getGroupAcl","parameters":[{"name":"groupUuid","in":"path","description":"Group unique identifier","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Group ACL retrieval was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityAclViewDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/auth/identities/{userUuid}/acl":{"get":{"tags":["Authentication and Authorisation Management"],"summary":"Get explicit ACL entries for an identity","description":"Retrieves explicit ACL entries for the specified identity, grouped by resource","operationId":"getIdentityAcl","parameters":[{"name":"userUuid","in":"path","description":"User unique identifier","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Identity ACL retrieval was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityAclViewDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Identity not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/auth/resources/acl":{"get":{"tags":["Authentication and Authorisation Management"],"summary":"Get the ACL for a specific resource","description":"Retrieves explicit ACL entries for the given resource","operationId":"getResourceAcl","parameters":[{"name":"resourceType","in":"query","description":"Resource type","required":true,"schema":{"type":"string","example":"TOPIC"}},{"name":"resourceKey","in":"query","description":"Resource key or identifier","required":true,"schema":{"type":"string","example":"/sensors/room1/temp"}}],"responses":{"200":{"description":"ACL retrieval was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AclResourceViewDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"put":{"tags":["Authentication and Authorisation Management"],"summary":"Replace the ACL for a specific resource","description":"Replaces the explicit ACL entries for the given resource with the provided set","operationId":"updateResourceAcl","parameters":[{"name":"batchTimeoutMillis","in":"query","description":"Maximum time to wait for batch propagation","schema":{"minimum":1,"type":"integer","format":"int64","default":5000}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AclResourceUpdateRequestDTO"}}}},"responses":{"200":{"description":"ACL update was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AclResourceViewDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/auth/groups":{"get":{"tags":["Authentication and Authorisation Management"],"summary":"Get all groups","description":"Retrieves all currently known groups. Requires authentication if enabled in the configuration.","operationId":"getAllGroups","parameters":[{"name":"filter","in":"query","description":"Optional filter string","schema":{"type":"string","example":"name = 'admin'"}}],"responses":{"200":{"description":"Get all groups was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GroupDTO"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"post":{"tags":["Authentication and Authorisation Management"],"summary":"Add new group","description":"Adds a new group to the group list. Requires authentication if enabled in the configuration.","operationId":"addGroup","requestBody":{"content":{"text/plain":{"schema":{"type":"string","example":"it_group_1700000000"}}},"required":true},"responses":{"201":{"description":"Group created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"409":{"description":"Group already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Group creation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/auth/groups/{groupUuid}/{userUuid}":{"post":{"tags":["Authentication and Authorisation Management"],"summary":"Add user to group","description":"Adds a user to a group using the UUID of the user and UUID of the group. Requires authentication if enabled in the configuration.","operationId":"addUserToGroup","parameters":[{"name":"groupUuid","in":"path","description":"Group unique identifier","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"userUuid","in":"path","description":"User unique identifier","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Add user to group was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"User or group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Group membership update failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"delete":{"tags":["Authentication and Authorisation Management"],"summary":"Removes a user from group","description":"Removes a user from a group using the users UUID and the groups UUID. Requires authentication if enabled in the configuration.","operationId":"removeUserFromGroup","parameters":[{"name":"groupUuid","in":"path","description":"Group unique identifier","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"userUuid","in":"path","description":"User unique identifier","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Remove user from group was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"User or group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Group membership update failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/auth/groups/{groupUuid}":{"get":{"tags":["Authentication and Authorisation Management"],"summary":"Get group by UUID","description":"Retrieve the group using the UUID of the specific group. Requires authentication if enabled in the configuration.","operationId":"getGroupById","parameters":[{"name":"groupUuid","in":"path","description":"Group unique identifier","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Get group by id was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"delete":{"tags":["Authentication and Authorisation Management"],"summary":"Delete a group","description":"Deletes a group from the list and removes all user memberships. Requires authentication if enabled in the configuration.","operationId":"deleteGroup","parameters":[{"name":"groupUuid","in":"path","description":"Group unique identifier","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Group deleted"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Group not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Group deletion failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/auth/user-lockouts":{"get":{"tags":["Authentication and Authorisation Management"],"summary":"Get all currently locked users","description":"Retrieves all currently known users that are locked out due to failed log in attempts.","operationId":"getAllLockedUsers","responses":{"200":{"description":"Get all locked users was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LockStatus"}}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/auth/user-lockouts/{userUuid}":{"delete":{"tags":["Authentication and Authorisation Management"],"summary":"Unlock a user currently locked due to invalid login attempts","description":"When a user exceeds the failed login attempts they are locked out for a period of time.","operationId":"unlockUser","parameters":[{"name":"userUuid","in":"path","description":"User unique identifier","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Unlock was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/auth/users":{"get":{"tags":["Authentication and Authorisation Management"],"summary":"Get all users","description":"Retrieves all currently known users filtered by the optional filter string, SQL like syntax. Requires authentication if enabled in the configuration.","operationId":"getAllUsers","parameters":[{"name":"filter","in":"query","description":"Optional filter string","schema":{"type":"string","example":"username = 'bill'"}}],"responses":{"200":{"description":"Get all users was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserDTO"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"post":{"tags":["Authentication and Authorisation Management"],"summary":"Add a new user","description":"Adds a new user to the system. Requires authentication if enabled in the configuration.","operationId":"addUser","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewUserDTO"}}},"required":true},"responses":{"201":{"description":"User created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"409":{"description":"Username already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/auth/users/{userUuid}/password":{"put":{"tags":["Authentication and Authorisation Management"],"summary":"Change user password","description":"Change the password for a user. Admin may reset any user. A user may change their own password; currentPassword may be required depending on policy.","operationId":"changeUserPassword","parameters":[{"name":"userUuid","in":"path","description":"User unique identifier","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordDTO"}}},"required":true},"responses":{"204":{"description":"Password changed"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Password update failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/auth/users/{userUuid}":{"get":{"tags":["Authentication and Authorisation Management"],"summary":"Get user by uuid","description":"Retrieve the user by uuid. Requires authentication if enabled in the configuration.","operationId":"getUser","parameters":[{"name":"userUuid","in":"path","description":"User unique identifier","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Get user was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"delete":{"tags":["Authentication and Authorisation Management"],"summary":"Delete a user","description":"Deletes a user from the system. Requires authentication if enabled in the configuration.","operationId":"deleteUser","parameters":[{"name":"userUuid","in":"path","description":"User unique identifier","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"User deleted"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"User not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/config":{"get":{"tags":["Server Config Management"],"summary":"List configuration sections","description":"Returns the list of known top-level configuration managers/sections.","operationId":"getConfig","responses":{"200":{"description":"List of configuration sections returned","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConfigNamingDTO"}}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Server configuration error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/config/{name}":{"get":{"tags":["Server Config Management"],"summary":"Retrieve configuration section value and schema","description":"Returns the current configuration section value and its JSON Schema in a single response.","operationId":"getConfigSection","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Configuration section returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationSchema"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Configuration section not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Server configuration error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/connections/{connectionId}":{"get":{"tags":["Connection Management"],"summary":"Get connection details for the specified id","description":"Retrieve the details of the specified connection id. Requires authentication if enabled in the configuration.","operationId":"getConnectionDetails","parameters":[{"name":"connectionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Get specific connection details was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndPointDetailsDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Connection not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"delete":{"tags":["Connection Management"],"summary":"Close a connection","description":"Requests the connection specified be closed. Requires authentication if enabled in the configuration.","operationId":"closeSpecificConnection","parameters":[{"name":"connectionId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Close connection was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Connection not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/connections":{"get":{"tags":["Connection Management"],"summary":"Get all connections","description":"Retrieve a list of all current connections to the server, can be filtered with the optional filter string. Requires authentication if enabled in the configuration.","operationId":"getAllConnections","parameters":[{"name":"filter","in":"query","description":"Optional filter string","schema":{"type":"string","example":"totalOverflow > 10 OR totalUnderflow > 5"}}],"responses":{"200":{"description":"Get all connections was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EndPointSummaryDTO"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/destination/list":{"get":{"tags":["Destination Management"],"summary":"Retrieve a paginated list of destinations/folders at the specified namespace","description":"Fetch a paginated list of all known destinations. You can filter the list using a selector string, limit the number of returned entries using the 'size' parameter, and sort the results by attributes such as Name, Published Messages, or Stored Messages. Cached results are returned if available to enhance performance. Authentication is required if the server configuration mandates it.","operationId":"getDestinationPage","parameters":[{"name":"prefix","in":"query","schema":{"type":"string","description":"Namespace prefix to browse. Leading '/' is significant. Server normalizes duplicate and trailing slashes. Empty means root.","nullable":true,"example":"/a/b"}},{"name":"pageSize","in":"query","schema":{"maximum":1000,"minimum":10,"type":"integer","description":"Maximum number of entries returned in this page.","format":"int32","example":50,"default":100}},{"name":"pageNumber","in":"query","schema":{"minimum":0,"type":"integer","description":"Zero-based page number.","format":"int32","example":0,"default":0}},{"name":"If-None-Match","in":"header","schema":{"type":"string"}}],"responses":{"200":{"description":"Get page of destinations was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestinationPageResponse"}}}},"304":{"description":"No change detected"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Namespace not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/destination":{"get":{"tags":["Destination Management"],"summary":"Retrieve a list of all destinations with optional filtering and sorting","description":"Fetch a paginated list of all known destinations. You can filter the list using a selector string, limit the number of returned entries using the 'size' parameter, and sort the results by attributes such as Name, Published Messages, or Stored Messages. Cached results are returned if available to enhance performance. Authentication is required if the server configuration mandates it.","operationId":"getAllDestinations","parameters":[{"name":"filter","in":"query","description":"An optional filter string for selecting specific destinations. The filter should be a valid expression that complies with the selector syntax.","schema":{"type":"string","example":"type = 'topic' AND storedMessages > 50"}},{"name":"size","in":"query","description":"The maximum number of destinations to return in the response. A default value is used if this parameter is not provided.","schema":{"type":"integer","format":"int32","example":100,"default":40}},{"name":"sortBy","in":"query","description":"The attribute by which the list of destinations should be sorted before returning. Possible values include Name, Published, Delivered, Stored, Pending, Delayed, and Expired.","schema":{"type":"string","example":"Published","enum":["Name","Published","Delivered","Stored","Pending","Delayed","Expired"],"default":"Published"}}],"responses":{"200":{"description":"Get all destinations was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DestinationDTO"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/destination/detail":{"get":{"tags":["Destination Management"],"summary":"Retrieve detailed information about a destination","description":"Fetch detailed information for a specific destination identified by its name. Authentication is required if the server configuration mandates it. Cached results are returned if available to enhance performance.","operationId":"getDestinationDetails","parameters":[{"name":"destinationName","in":"query","description":"The name of the destination for which details are requested","required":true,"schema":{"type":"string","example":"destination-01"}}],"responses":{"200":{"description":"Get destination details was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestinationDetailsResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Destination not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/discovery":{"get":{"tags":["Discovery Management"],"summary":"Get discovered servers","description":"Retrieve a list of all currently discovered servers, can be filtered with the optional filter. Requires authentication if enabled in the configuration.","operationId":"getAllDiscoveredServers","parameters":[{"name":"filter","in":"query","description":"Optional filter string","schema":{"type":"string","example":"schemaSupport = TRUE OR systemTopicPrefix IS NOT NULL"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DiscoveredServersDTO"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"patch":{"tags":["Discovery Management"],"summary":"Manages the discovery manager","description":"Manages the state of the discovery manager","operationId":"handleDiscoveryActionRequest","requestBody":{"description":"Requested action to apply to the discovery manager","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestedAction"}}},"required":true},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Discovery manager not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/hardware":{"get":{"tags":["Hardware Management"],"summary":"Get known devices","description":"Retrieve a list of all detected devices currently online. Requires authentication if enabled in the configuration.","operationId":"getAllDiscoveredDevices","responses":{"200":{"description":"Get all discovered devices was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeviceInfoDTO"}}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/hardware/scan":{"post":{"tags":["Hardware Management"],"summary":"Scan for new hardware","description":"Requests a scan to detect new hardware on I2C bus or configured devices. Requires authentication if enabled in the configuration.","operationId":"scanForDevices","responses":{"200":{"description":"Scan for devices was successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/integration/{name}":{"get":{"tags":["Server Integration Management"],"summary":"Get integration by name","description":"Retrieves the configuration on the inter-server integration connection. Requires authentication if enabled in the configuration.","operationId":"getByNameIntegration","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationInfoDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Integration name was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"patch":{"tags":["Server Integration Management"],"summary":"Manages inter-server connection","description":"Handles state for the inter-server connection","operationId":"handleIntegrationActionRequest","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Requested action to apply to inter-server connection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestedAction"}}},"required":true},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Integration name was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/integration/{name}/connection":{"get":{"tags":["Server Integration Management"],"summary":"Get integration connection status by name","description":"Retrieves the current connection summary for the inter-server integration connection. Requires authentication if enabled in the configuration.","operationId":"getIntegrationConnection","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndPointSummaryDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Integration name was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/integration/{name}/status":{"get":{"tags":["Server Integration Management"],"summary":"Get inter-server status","description":"Retrieve the current status for the inter-server specified by name. Requires authentication if enabled in the configuration.","operationId":"getIntegrationStatus","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationStatusDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Integration name was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/integrations/status":{"get":{"tags":["Server Integration Management"],"summary":"Get all inter-server status","description":"Retrieve all current statuses for the inter-server. Requires authentication if enabled in the configuration.","operationId":"getAllIntegrationStatus","parameters":[{"name":"filter","in":"query","description":"Optional filter string","schema":{"type":"string","example":"state = PAUSED"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IntegrationStatusDTO"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/integrations":{"get":{"tags":["Server Integration Management"],"summary":"Get all inter-server connections","description":"Retrieves a list of all inter-server configurations. Requires authentication if enabled in the configuration.","operationId":"getAllIntegrations","parameters":[{"name":"filter","in":"query","description":"Optional filter string","schema":{"type":"string","example":"state = PAUSED"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IntegrationInfoDTO"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"patch":{"tags":["Server Integration Management"],"summary":"Manages all inter-server connections","description":"Handles state for all inter-server connections","operationId":"handleIntegrationActionRequest_1","requestBody":{"description":"Requested action to apply to all inter-server connections","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestedAction"}}},"required":true},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/interface/{endpoint}":{"get":{"tags":["Server Interface Management"],"summary":"Get end point configurations","description":"Get the end point configuration specifed by the name. Requires authentication if enabled in the configuration.","operationId":"getEndPoint","parameters":[{"name":"endpoint","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterfaceInfoDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Endpoint not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"put":{"tags":["Server Interface Management"],"summary":"Update end point configuration","description":"Update the configuration supplied for the named endpoint.","operationId":"updateInterfaceConfiguration","parameters":[{"name":"endpoint","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"End point configuration to apply","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndPointServerConfigDTO"}}},"required":true},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Endpoint not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"patch":{"tags":["Server Interface Management"],"summary":"Controls the specific end point","description":"Applies the requested state to the configured interface endpoint.","operationId":"manageSpecificInterface","parameters":[{"name":"endpoint","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Requested action to apply to the interface endpoint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestedAction"}}},"required":true},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Endpoint not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/interface/{endpoint}/connections":{"get":{"tags":["Server Interface Management"],"summary":"Get end point connections","description":"Get current connections on this endpoint. Requires authentication if enabled in the configuration.","operationId":"getEndPointConnections","parameters":[{"name":"endpoint","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EndPointSummaryDTO"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Endpoint not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/interface/{endpoint}/status":{"get":{"tags":["Server Interface Management"],"summary":"Get end point status","description":"Get the current status and metrics for the specified end point.","operationId":"getInterfaceStatus","parameters":[{"name":"endpoint","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterfaceStatusDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Endpoint not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/interfaces/status":{"get":{"tags":["Server Interface Management"],"summary":"Get all end point status","description":"Get all end point statuses and metrics, fitlered with the optional filter.","operationId":"getAllInterfaceStatus","parameters":[{"name":"filter","in":"query","description":"Optional filter string","schema":{"type":"string","example":"state = 'started'"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InterfaceStatusDTO"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/interfaces":{"get":{"tags":["Server Interface Management"],"summary":"Get all end point details","description":"get all end point configuration details, filtered with the optional filter.","operationId":"getAllInterfaces","parameters":[{"name":"filter","in":"query","description":"Optional filter string","schema":{"minLength":1,"type":"string","example":"state = 'started'"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InterfaceInfoDTO"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"patch":{"tags":["Server Interface Management"],"summary":"Manages all end points","description":"Manages actions on all endpoints.","operationId":"handleInterfaceActionRequest","requestBody":{"description":"Requested action to apply to all inter-server connections","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestedAction"}}},"required":true},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/license":{"get":{"summary":"Get license","description":"Returns the current license details.","operationId":"getLicense","responses":{"200":{"description":"License retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureDetails"}}}},"404":{"description":"License not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/log":{"get":{"tags":["Logging Monitor"],"summary":"Get last stored log entries","description":"Retrieve the last configured number of log entries from the server","operationId":"getLogEntries","parameters":[{"name":"filter","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogEntries"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/log/sse":{"get":{"tags":["Logging Monitor"],"summary":"Request a temporary token to access the server side logs","description":"Retrieve a temporary token that allows access to the server side log stream","operationId":"requestSseToken","responses":{"200":{"description":"String token to use to access the log SSE","content":{"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/log/sse/stream/{token}":{"get":{"tags":["Logging Monitor"],"summary":"Stream live log entries","description":"Subscribe to dynamic log events using Server-Sent Events","operationId":"streamLogs","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}},{"name":"filter","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"SSE stream of LogEntry events","content":{"text/event-stream":{}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource, or token is invalid"},"500":{"description":"Internal server error"}}}},"/api/v1/device/lora":{"get":{"tags":["LoRa Device Management"],"summary":"Retrieve all LoRa devices","description":"Fetches a list of all LoRa devices along with their configurations and statistics.","operationId":"getAllLoRaDevices","responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoRaDeviceInfoDTO"}}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/device/lora/{deviceName}":{"get":{"tags":["LoRa Device Management"],"summary":"Retrieve a specific LoRa device","description":"Fetches the details of a specific LoRa device identified by its name.","operationId":"getLoRaDevice","parameters":[{"name":"deviceName","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoRaDeviceInfoDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"LoRa device not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/device/lora/{deviceName}/{nodeId}":{"get":{"tags":["LoRa Device Management"],"summary":"Retrieve endpoint connections for a LoRa device","description":"Fetches the connection information for a specific endpoint of a LoRa device, identified by the device name and node ID.","operationId":"getLoRaEndPointConnections","parameters":[{"name":"deviceName","in":"path","required":true,"schema":{"type":"string"}},{"name":"nodeId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LoRaEndPointConnectionInfoDTO"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"LoRa device or endpoint not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/messaging/abort":{"post":{"tags":["Messaging Interface"],"summary":"Abort the message","description":"Abort the message specifed by the id and the destination name","operationId":"abortMessages","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionData"}}}},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/messaging/commit":{"post":{"tags":["Messaging Interface"],"summary":"Commit the message","description":"Commit the message specifed by the id and the destination name","operationId":"commitMessages","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionData"}}}},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/messaging/consume":{"post":{"tags":["Messaging Interface"],"summary":"Get messages","description":"Retrieves messages for a specified subscription","operationId":"consumeMessages","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumeRequestDTO"}}}},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumedResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/messaging/subscriptionDepth":{"post":{"tags":["Messaging Interface"],"summary":"Get message depth","description":"Get the depth of the queue for a specified subscription","operationId":"getSubscriptionDepth","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumeRequestDTO"}}}},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionDepthResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/messaging/publish":{"post":{"tags":["Messaging Interface"],"summary":"Publish a message","description":"Publishes a message to a specified topic","operationId":"publishMessage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishRequestDTO"}}}},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/messaging/sse":{"get":{"tags":["Messaging Interface"],"summary":"Request a temporary token to access the listed destinations events","description":"Retrieve a temporary token that allows access to the destinations event stream","operationId":"requestSseMessageToken","parameters":[{"name":"destination","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"String token to use to access the log SSE","content":{"text":{}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/messaging/sse/stream/{token}":{"get":{"tags":["Messaging Interface"],"summary":"Expose AsyncMessageDTO in OpenAPI","description":"Delivers messages via Server Side Events, supports MQTT wild card plus JMS style filtering","operationId":"subscribeSSE","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}},{"name":"destinationName","in":"query","required":true,"schema":{"title":"Destination Name","type":"string","description":"The name of the destination (e.g., topic or queue) to which the subscription is bound.Supports MQTT style wild card subscription","example":"sensor/data or /sensor/# "}},{"name":"namedSubscription","in":"query","schema":{"title":"Named Subscription","type":"string","description":"An optional name for a named subscription, allowing clients to re-use existing subscriptions if provided.","nullable":true,"example":"temperatureAlerts"}},{"name":"filter","in":"query","schema":{"title":"Filter Expression","type":"string","description":"An optional filter expression written in JMS selector syntax to filter messages received by the subscription.","nullable":true,"example":"temperature > 25"}},{"name":"maxDepth","in":"query","schema":{"title":"Maximum Queue Depth","type":"integer","description":"The maximum number of messages that can be queued for the subscription before new messages are dropped.","format":"int32","nullable":true,"example":10,"default":1}},{"name":"retainMessage","in":"query","schema":{"title":"Retain Message","type":"boolean","description":"Indicates if messages should be retained on the destination for this subscription, meaning they will be stored and made available to future subscribers.","nullable":true,"example":false,"default":false}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncMessageDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/messaging/subscribe":{"post":{"tags":["Messaging Interface"],"summary":"Subscribe to a topic","description":"Subscribes to a specified topic","operationId":"subscribeToTopic","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionRequestDTO"}}}},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/messaging/unsubscribe":{"post":{"tags":["Messaging Interface"],"summary":"Unsubscribe from a topic","description":"Unsubscribes from a specified topic","operationId":"unsubscribeToTopic","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionRequestDTO"}}}},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/models/{modelName}":{"get":{"tags":["ML Model Store"],"summary":"Download model","description":"Downloads a model by name.","operationId":"getModel","parameters":[{"name":"modelName","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Model content","content":{"application/octet-stream":{}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Model not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"406":{"description":"ML not supported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"post":{"tags":["ML Model Store"],"summary":"ML Model upload","description":"Uploads a model.","operationId":"uploadModel","parameters":[{"name":"modelName","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"required":["file"],"type":"object","description":"Multipart form containing the model file."}}},"required":true},"responses":{"200":{"description":"Upload succeeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"406":{"description":"ML not supported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"delete":{"tags":["ML Model Store"],"summary":"Delete model","description":"Deletes the model by name.","operationId":"deleteModel","parameters":[{"name":"modelName","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Model deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Model not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"406":{"description":"ML not supported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"head":{"tags":["ML Model Store"],"summary":"Check if model exists","description":"Checks if a model with the given name exists.","operationId":"modelExists","parameters":[{"name":"modelName","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Model exists"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Model not found"},"406":{"description":"ML not supported"}}}},"/api/v1/server/models":{"get":{"tags":["ML Model Store"],"summary":"List all models","description":"Returns a list of all available model names.","operationId":"listModels","responses":{"200":{"description":"List of model names","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"406":{"description":"ML not supported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/schemas":{"get":{"tags":["Schema Management"],"summary":"Get all schemas","description":"Retrieves all schema configurations, optionally filtered by a query string.","operationId":"getAllSchemas","parameters":[{"name":"filter","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SchemaConfigDTO"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"post":{"tags":["Schema Management"],"summary":"Add new schema","description":"Adds a new schema configuration to the system.","operationId":"addSchema","requestBody":{"description":"Schema post payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaPostDTO"}}},"required":true},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaConfigDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"delete":{"tags":["Schema Management"],"summary":"Delete all schemas","description":"Deletes all schemas, optionally filtered by a query string.","operationId":"deleteAllSchemas","parameters":[{"name":"filter","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"type":"string"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/schemas/{schemaId}":{"get":{"tags":["Schema Management"],"summary":"Get specific schema","description":"Retrieves the details of a specific schema by its unique ID.","operationId":"getSchemaById","parameters":[{"name":"schemaId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaConfigDTO"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Schema not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"delete":{"tags":["Schema Management"],"summary":"Delete specific schema","description":"Deletes a schema configuration by its unique ID.","operationId":"deleteSchemaById","parameters":[{"name":"schemaId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"404":{"description":"Schema not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/schemas/formats":{"get":{"tags":["Schema Management"],"summary":"Get supported formats","description":"Retrieves a list of all known schema formats supported by the system.","operationId":"getKnownFormats","responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StringListResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/schemas/link-format":{"get":{"tags":["Schema Management"],"summary":"Get link-format configuration","description":"Retrieves the link-format configuration list.","operationId":"getLinkFormat","responses":{"200":{"description":"Operation was successful","content":{"text/plain":{"schema":{"type":"string"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/schemas/context/{context}":{"get":{"tags":["Schema Management"],"summary":"Get schemas by context","description":"Retrieves all schemas that match the specified context.","operationId":"getSchemaByContext","parameters":[{"name":"context","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/schemas/type/{type}":{"get":{"tags":["Schema Management"],"summary":"Get schemas by type","description":"Retrieves all schemas that match the specified type.","operationId":"getSchemaByType","parameters":[{"name":"type","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/schemas/impl/{schemaId}":{"get":{"tags":["Schema Management"],"summary":"Get specific schema definition","description":"Retrieves the schema artifact bytes by unique ID.","operationId":"getSchemaImplById","parameters":[{"name":"schemaId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"*/*":{}}},"304":{"description":"Not Modified"},"401":{"description":"Invalid credentials or unauthorized access"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}},"/api/v1/server/schemas/map":{"get":{"tags":["Schema Management"],"summary":"Get schema mappings","description":"Retrieves all schemas and their associated mapping information.","operationId":"getSchemaMapping","responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaMapResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/cache":{"get":{"tags":["Server Config Management"],"summary":"Retrieve cache information","description":"Fetches detailed information about the server's central cache, including size, usage statistics, and entries.","operationId":"getCacheInformation","responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CacheInfo"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}},"delete":{"tags":["Server Config Management"],"summary":"Clear cache","description":"Clears all entries in the server's central cache to free up memory and ensure data consistency.","operationId":"clearCacheInformation","responses":{"204":{"description":"Cache cleared successfully (no content)"},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/details/info":{"get":{"tags":["Server Management"],"summary":"Get server build information","description":"Retrieves detailed information about the server build, such as version and configuration details. Uses caching for improved performance.","operationId":"getBuildInfo","responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerInfoDTO"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/details/stats":{"get":{"tags":["Server Management"],"summary":"Get server statistics","description":"Retrieves server usage statistics, including metrics such as CPU usage, memory usage, and active connections. Uses caching for improved performance.","operationId":"getStats","responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerStatisticsDTO"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/health":{"get":{"tags":["Server Management"],"summary":"Get server subsystem status summary","description":"Returns a simple summary of the server status.","operationId":"getServerHealthSummary","responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerHealthStateResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server/status":{"get":{"tags":["Server Management"],"summary":"Get server subsystem status","description":"Retrieves the current status of all server subsystems, including their operational state (e.g., OK, Warning, or Error). Uses caching for improved performance.","operationId":"getServerStatus","responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SubSystemStatusDTO"}}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/api/v1/server":{"patch":{"tags":["Server Management"],"summary":"Restart or shutdown the server","description":"Restarts or shuts down the server gracefully, preserving any necessary state before the operation begins.","operationId":"serverAction","requestBody":{"description":"Requested action","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerActionRequest"}}},"required":true},"responses":{"200":{"description":"Operation was successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"401":{"description":"Invalid credentials or unauthorized access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}},"403":{"description":"User is not authorised to access the resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResponse"}}}}}}},"/application.wadl/{path}":{"get":{"operationId":"getExternalGrammar","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/xml":{}}}}}},"/application.wadl":{"get":{"operationId":"getWadl","responses":{"default":{"description":"default response","content":{"application/vnd.sun.wadl+xml":{},"application/xml":{}}}}}}},"components":{"schemas":{"UpdateCheckResponse":{"type":"object","properties":{"schemaUpdate":{"type":"integer","format":"int64"},"destinationUpdate":{"type":"integer","format":"int64"},"interfaceUpdate":{"type":"integer","format":"int64"}}},"LoginResponse":{"type":"object","properties":{"status":{"type":"string"},"username":{"type":"string"},"accessMap":{"type":"object","additionalProperties":{"type":"string"}},"uniqueId":{"type":"string","format":"uuid"}}},"StatusResponse":{"type":"object","properties":{"status":{"type":"string"}}},"LoginRequest":{"type":"object","properties":{"username":{"type":"string","description":"The username for login","example":"admin"},"password":{"type":"string","description":"The password for login","example":"P@ssw0rd!"},"persistent":{"type":"boolean","description":"Whether the session should be persistent","example":true},"sessionId":{"type":"string","description":"Optional client-provided session ID","example":"session-12345"},"longLived":{"type":"boolean","description":"Request a long-lived session (e.g. 7 days)","example":true}},"description":"Login request payload containing credentials and session options"},"ServerName":{"type":"object","properties":{"name":{"type":"string"}}},"PingResponse":{"type":"object","properties":{"status":{"type":"string","description":"Ping status","example":"ok"}}},"AclCheckResponseDTO":{"type":"object","properties":{"decision":{"type":"string","description":"Decision for the requested permission","example":"ALLOW","enum":["ALLOW","DENY"]},"permission":{"type":"string","description":"Permission name that was checked","example":"publish"},"reason":{"type":"string","description":"Human readable explanation of how this decision was reached"},"sources":{"type":"array","description":"Optional list of rule summaries that contributed to the decision","items":{"type":"string","description":"Optional list of rule summaries that contributed to the decision"}}},"description":"Result of an ACL check"},"AclCheckRequestDTO":{"required":["identityId","permission","resourceKey","resourceType"],"type":"object","properties":{"identityId":{"type":"string","description":"Identity identifier","example":"admin"},"resourceType":{"type":"string","description":"Resource type","example":"TOPIC"},"resourceKey":{"type":"string","description":"Resource key or identifier","example":"/sensors/room1/temp"},"permission":{"type":"string","description":"Permission name to check","example":"publish"},"explain":{"type":"boolean","description":"If true, the server should include human readable explanation"}},"description":"Request to check access for an identity to a resource with a permission"},"AuthorisationConfigDTO":{"title":"Authorisation Static Configuration DTO","required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"permissions":{"type":"array","description":"List of known permissions that can granted to identities and groups","example":"CONNECT, PUBLISH","items":{"$ref":"#/components/schemas/PermissionDetailsDTO"}},"resourceTypes":{"type":"array","description":"Set of known and enforced resource types","example":"server, topic, queue","items":{"$ref":"#/components/schemas/ResourceTypeDetailsDTO"}}},"description":"Contains the static configuration used by authorisation."},"PermissionDetailsDTO":{"title":"Permission details","required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"name":{"type":"string"},"description":{"type":"string"},"server":{"type":"boolean"}},"description":"Contains details about the permission.","example":"CONNECT, PUBLISH"},"ResourceTypeDetailsDTO":{"title":"Resource Type details","required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"name":{"type":"string"},"server":{"type":"boolean"}},"description":"Contains details about the resource types.","example":"server, topic, queue"},"IdentityAclEntryDTO":{"required":["effect","permissions","resourceKey","resourceType"],"type":"object","properties":{"resourceType":{"type":"string","description":"Resource type","example":"TOPIC"},"resourceKey":{"type":"string","description":"Resource key or identifier","example":"/sensors/room1/temp"},"effect":{"type":"string","description":"Effect of this ACL entry","example":"ALLOW","enum":["ALLOW","DENY"]},"permissions":{"type":"array","description":"List of permission names granted or denied","items":{"type":"string","description":"List of permission names granted or denied"}}},"description":"Explicit ACL entry for an identity or group, grouped by resource"},"IdentityAclViewDTO":{"type":"object","properties":{"principalType":{"type":"string","description":"Principal type","example":"IDENTITY","enum":["IDENTITY","GROUP"]},"principalId":{"type":"string","description":"Principal identifier","example":"admin"},"entries":{"type":"array","description":"Explicit ACL entries grouped by resource","items":{"$ref":"#/components/schemas/IdentityAclEntryDTO"}}},"description":"View of explicit ACL entries for an identity or group"},"AclEntryDTO":{"required":["effect","principalId","principalType"],"type":"object","properties":{"principalType":{"type":"string","description":"Type of principal","example":"IDENTITY","enum":["IDENTITY","GROUP"]},"principalId":{"type":"string","description":"Principal identifier (user id or group id)","example":"admin"},"effect":{"type":"string","description":"Effect of this ACL entry","example":"ALLOW","enum":["ALLOW","DENY"]},"permissions":{"type":"array","description":"List of permission names granted or denied by this entry","items":{"type":"string","description":"List of permission names granted or denied by this entry"}}},"description":"Represents a single ACL entry for a principal on a resource"},"AclResourceViewDTO":{"required":["entries","resourceKey","resourceType"],"type":"object","properties":{"resourceType":{"type":"string","description":"Resource type","example":"TOPIC"},"resourceKey":{"type":"string","description":"Resource key or identifier","example":"/sensors/room1/temp"},"entries":{"type":"array","description":"Explicit ACL entries defined directly on this resource","items":{"$ref":"#/components/schemas/AclEntryDTO"}}},"description":"Represents the ACL for a specific resource"},"AclResourceUpdateRequestDTO":{"required":["entries","resourceKey","resourceType"],"type":"object","properties":{"resourceType":{"type":"string","description":"Resource type","example":"TOPIC"},"resourceKey":{"type":"string","description":"Resource key or identifier","example":"/sensors/room1/temp"},"entries":{"type":"array","description":"New set of ACL entries for this resource (explicit only)","items":{"$ref":"#/components/schemas/AclEntryDTO"}}},"description":"Request to replace the ACL for a specific resource"},"GroupDTO":{"title":"Group","required":["name","uniqueId"],"type":"object","properties":{"name":{"title":"Group Name","type":"string","description":"The name of the group, such as an administrative or user-defined role.","example":"admin"},"uniqueId":{"title":"Group Unique ID","type":"string","description":"The unique identifier for the group, generated as a UUID.","format":"uuid","example":"e808afcb-1ff9-46cd-a322-3119dbf1d071"},"usersList":{"title":"Group Members","type":"array","description":"A list of users of this group.","nullable":true,"items":{"$ref":"#/components/schemas/UserDTO"}}},"description":"Represents a group of users within the system, identified by a unique name and ID."},"GroupInfoDTO":{"title":"GroupInfo","required":["name","uniqueId"],"type":"object","properties":{"name":{"title":"Group Name","type":"string","description":"The name of the group, such as an administrative or user-defined role.","example":"admin"},"uniqueId":{"title":"Group Unique ID","type":"string","description":"The unique identifier for the group, generated as a UUID.","format":"uuid","example":"e808afcb-1ff9-46cd-a322-3119dbf1d071"}},"description":"Group information only, no user lists","nullable":true},"UserDTO":{"title":"User","required":["uniqueId","username"],"type":"object","properties":{"username":{"title":"Username","type":"string","description":"The unique name assigned to the user.","example":"myUserName"},"uniqueId":{"title":"User Unique ID","type":"string","description":"The UUID representing this specific user, ensuring unique identification across the system.","format":"uuid","example":"83db8741-57ca-4147-a973-49789d9150bb"},"groupList":{"title":"User Group Memberships","type":"array","description":"A list of group names to which the user belongs, providing role-based access and permissions.","nullable":true,"items":{"$ref":"#/components/schemas/GroupInfoDTO"}},"attributes":{"title":"User Attributes","type":"object","additionalProperties":{"title":"User Attributes","type":"string","description":"A map of user-specific attributes, such as home directory or other key-value pairs for configuration.","nullable":true},"description":"A map of user-specific attributes, such as home directory or other key-value pairs for configuration.","nullable":true}},"description":"Represents a user within the system, including username, unique ID, group memberships, and user-specific attributes."},"LockStatus":{"type":"object","properties":{"uuid":{"type":"string","format":"uuid"},"username":{"type":"string"},"locked":{"type":"boolean"},"remainingLockSeconds":{"type":"integer","format":"int64"},"lockedUntilIso":{"type":"string"}}},"NewUserDTO":{"title":"New User","required":["password","username"],"type":"object","properties":{"username":{"title":"Username","type":"string","description":"The unique username for the new user account.","example":"myNewUserName"},"password":{"title":"Password","type":"string","description":"The password or passphrase for the new user, intended to provide secure access.","example":"My Very Unique Password"}},"description":"Represents a new user account with a username and password."},"ChangePasswordDTO":{"required":["newPassword"],"type":"object","properties":{"newPassword":{"title":"New Password","minLength":1,"type":"string","description":"The new password to set.","example":"NewStrongerPassword123!"}}},"ConfigNamingDTO":{"required":["configName","name"],"type":"object","properties":{"name":{"type":"string","description":"Human-readable name for this configuration mapping.","example":"Networks"},"configName":{"type":"string","description":"Internal configuration name this mapping is bound to.","example":"NetworkManageronfig"}},"description":"Represents a named configuration mapping."},"AggregatorConfigDTO":{"title":"Aggregator Configuration DTO (Stage 1)","minLength":1,"required":["inputs","name","outputTopic","schemaLoadingVersion","timeoutMs","windowDurationMs"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"name":{"maxLength":128,"minLength":1,"pattern":"^[A-Za-z0-9_.-]+$","type":"string","description":"Unique name of this aggregator instance","example":"sensor-aggregator-1"},"enabled":{"type":"boolean","description":"Enable or disable this aggregator instance","nullable":true,"example":true,"default":true},"inputs":{"minLength":1,"type":"array","description":"Input configurations (one per topic) for this aggregator","items":{"$ref":"#/components/schemas/AggregatorInputConfigDTO"}},"outputTopic":{"maxLength":2048,"minLength":1,"type":"string","description":"Output topic for the aggregated envelope","example":"maps/aggregated/out"},"windowCloseMode":{"title":"Aggregator Window Close Mode","type":"string","description":"Defines how an aggregation window is closed.","example":"ALL_INPUTS_OR_TIMEOUT","enum":["ALL_INPUTS","TIMEOUT_ONLY","ALL_INPUTS_OR_TIMEOUT"],"default":"ALL_INPUTS_OR_TIMEOUT"},"windowDurationMs":{"maximum":3600000,"minimum":1,"type":"integer","description":"Time bucket duration in milliseconds (arrival-time based)","format":"int64","example":1000},"timeoutMs":{"maximum":3600000,"minimum":1,"type":"integer","description":"Maximum time to wait before closing a window, even if not all inputs have arrived (milliseconds)","format":"int64","example":5000},"maxEventsPerTopic":{"maximum":1000,"minimum":1,"type":"integer","description":"Maximum number of events to buffer per input within a single window (Stage 1 default: 1)","format":"int32","nullable":true,"example":1,"default":1},"outputTransformers":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Type of transformation configuration. All values are lower-case and hyphen-separated.","example":"jsontoxml","enum":["CLOUD_EVENT_JSON","CLOUD_EVENT_NATIVE","CLOUD_EVENT_ENVELOPE","JSON_TO_XML","XML_TO_JSON","JSON_TO_VALUE","JSON_QUERY","GEOHASH","SCHEMA_TO_JSON","JSON_MUTATE","JSON_TO_SCHEMA"]}},"additionalProperties":true,"description":"Abstract base class for all transformation configurations","nullable":true,"discriminator":{"propertyName":"type","mapping":{"jsontoxml":"#/components/schemas/JsonToXmlTransformationDTO","xmltojson":"#/components/schemas/XmlToJsonTransformationDTO","jsontoschema":"#/components/schemas/JsonToSchemaTransformationDTO","jsontovalue":"#/components/schemas/JsonToValueTransformationDTO","jsonquery":"#/components/schemas/JsonQueryTransformationDTO","geohash":"#/components/schemas/GeoHashResolverTransformationDTO","jsonmutate":"#/components/schemas/JsonMutateTransformationDTO","cloudevent-envelope":"#/components/schemas/CloudEventEnvelopeTransformationDTO","cloudevent-json":"#/components/schemas/CloudEventJsonTransformationDTO","cloudevent-native":"#/components/schemas/CloudEventNativeTransformationDTO"}}}},"description":"Stage 1 Aggregator configuration. Fan-in time-bucket aggregation only: no correlation, no DLQ, no policies, no persistence."},"AggregatorInputConfigDTO":{"title":"Aggregator Input Configuration DTO","minLength":1,"required":["schemaLoadingVersion","topicName"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"topicName":{"maxLength":2048,"minLength":1,"type":"string","description":"Input topic name","example":"maps/sensors/gps"},"selector":{"maxLength":8192,"minLength":1,"type":"string","description":"Optional JMS selector applied to events from this input topic","nullable":true,"example":"speed > 10 AND region = 'AU'"},"transformer":{"type":"array","description":"Transformer chain configuration (array of objects). Each entry specifies transformer name and parameters.","nullable":true,"example":[{"name":"JsonQuery","parameters":{"query":"[\"object\",{\"latitude\":[\"divide\",[\"get\",\"payload\",\"decoded\",\"lat\"],10000000]}]"}}],"items":{"$ref":"#/components/schemas/TransformationConfigDTO"}},"contributionMode":{"type":"string","description":"Contribution policy for a single input within a window","nullable":true,"example":"FIRST","enum":["FIRST","LAST","FIRST","LAST"],"default":"LAST"}},"description":"Per-input configuration for an Aggregator. Supports optional selector and transformer chain."},"AggregatorManagerConfigDTO":{"required":["aggregatorConfigList","schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"stripeCount":{"maximum":128,"minimum":0,"type":"integer","description":"Number of worker stripes (threads) used to run aggregators. 0 means auto (CPU heuristic).","format":"int32","example":0,"default":0},"maxBatchPerAggregator":{"maximum":8192,"minimum":1,"type":"integer","description":"Maximum number of events to drain per aggregator per scheduler pass (fairness limit).","format":"int32","example":128,"default":128},"idleSleepMs":{"maximum":1000,"minimum":0,"type":"integer","description":"Scheduler idle sleep in milliseconds when no work is detected.","format":"int32","example":1,"default":1},"mailboxCapacity":{"maximum":1048576,"minimum":1,"type":"integer","description":"Default mailbox capacity for each aggregator (bounded safety buffer).","format":"int32","example":8192,"default":8192},"maxAggregators":{"maximum":1000000,"minimum":0,"type":"integer","description":"Maximum number of aggregators allowed to be loaded (safety guardrail). 0 means unlimited.","format":"int32","example":0,"default":0},"aggregatorConfigList":{"minLength":1,"type":"array","description":"List of aggregator instance configurations","items":{"$ref":"#/components/schemas/AggregatorConfigDTO"}},"simpleName":{"type":"string"}},"description":"Aggregator Manager Configuration DTO (Stage 1)"},"AmqpConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","type"],"type":"object","description":"AMQP Protocol Configuration DTO","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"idleTimeout":{"type":"integer","description":"Idle timeout in milliseconds","format":"int32","example":30000},"maxFrameSize":{"type":"integer","description":"Maximum frame size in bytes","format":"int32","example":65536},"linkCredit":{"type":"integer","description":"Link credit for the AMQP connection","format":"int32","example":50},"durable":{"type":"boolean","description":"Specifies if the AMQP link is durable","example":false},"incomingCapacity":{"type":"integer","description":"Incoming capacity of the AMQP session","format":"int32","example":65536},"outgoingWindow":{"type":"integer","description":"Outgoing window size for the AMQP session","format":"int32","example":100}}}]},"AuthConfigDTO":{"title":"Auth Configuration DTO","required":["schemaLoadingVersion","username"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"username":{"minLength":1,"type":"string","description":"Username for authentication","example":"user123"},"password":{"type":"string","description":"Password for authentication","nullable":true,"example":"password"},"sessionId":{"type":"string","description":"Session ID for the authentication session","nullable":true,"example":"session-xyz"},"tokenGenerator":{"type":"string","description":"Token generator type","nullable":true,"example":"JWT"},"tokenConfig":{"type":"object","additionalProperties":true,"description":"Configuration settings for the token generator","nullable":true,"example":{"expiry":3600}}},"description":"Represents authentication configuration settings for REST communication.","nullable":true},"AuthManagerConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"authenticationEnabled":{"type":"boolean","description":"Indicates if authentication is enabled","nullable":true,"example":true,"default":true},"authorisationEnabled":{"type":"boolean","description":"Indicates if authorization is enabled","nullable":true,"example":true,"default":true},"authConfig":{"type":"object","additionalProperties":true,"description":"Configuration properties for authentication","nullable":true},"minimumPasswordLength":{"minimum":1,"type":"integer","description":"Minimum password length.","format":"int32","example":12,"default":12},"maximumPasswordLength":{"minimum":6,"type":"integer","description":"Maximum password length.","format":"int32","example":128,"default":128},"minimumLowercase":{"minimum":0,"type":"integer","description":"Minimum number of lowercase letters required.","format":"int32","nullable":true,"example":1,"default":1},"minimumUppercase":{"maximum":100,"minimum":0,"type":"integer","description":"Minimum number of uppercase letters required.","format":"int32","nullable":true,"example":1,"default":1},"minimumDigits":{"maximum":100,"minimum":0,"type":"integer","description":"Minimum number of digits required.","format":"int32","nullable":true,"example":1,"default":1},"minimumSpecial":{"maximum":100,"minimum":0,"type":"integer","description":"Minimum number of special characters required.","format":"int32","nullable":true,"example":1,"default":1},"allowedSpecialCharacters":{"type":"string","description":"Allowed special characters set. If empty/null, any non-alphanumeric character may be treated as special (implementation-defined).","nullable":true,"example":"!@#$%^&*()-_=+[]{};:,.?/\\|","default":"!@#$%^&*()-_=+[]{};:,.?/\\\\|"},"rejectWhitespace":{"type":"boolean","description":"If true, whitespace characters are rejected in passwords.","nullable":true,"example":true,"default":true},"rejectContainsUsername":{"type":"boolean","description":"If true, passwords containing the username (case-insensitive) are rejected.","nullable":true,"example":true,"default":true},"maximumConsecutiveIdenticalCharacters":{"minimum":0,"type":"integer","description":"Maximum number of identical consecutive characters allowed (e.g., 'aaa'). Use 0 to disable.","format":"int32","nullable":true,"example":3,"default":3},"passwordRegex":{"type":"string","description":"If set, overrides composition rules. Java regex pattern the password must match. Leave null to use the composition settings.","nullable":true,"example":"^(?=.{12,128}$)(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()\\-_=+\\[\\]{};:,.?/\\\\|]).*$"},"passwordHistoryCount":{"maximum":100,"minimum":0,"type":"integer","description":"Number of previous passwords that cannot be reused. Use 0 to disable.","format":"int32","nullable":true,"example":5,"default":0},"passwordMaxAgeDays":{"minimum":0,"type":"integer","description":"Maximum password age in days before forcing a reset. Use 0 to disable.","format":"int32","nullable":true,"example":90,"default":0},"maxFailuresBeforeLock":{"minimum":1,"type":"integer","description":"Number of consecutive authentication failures required before an account is locked.","format":"int32","example":5,"default":5},"initialLockSeconds":{"minimum":1,"type":"integer","description":"Initial lock duration in seconds once the failure threshold is exceeded. Subsequent locks may increase up to the configured maximum.","format":"int32","example":30,"default":30},"maxLockSeconds":{"minimum":1,"type":"integer","description":"Maximum lock duration in seconds. Lock times will not grow beyond this value regardless of repeated failures.","format":"int32","example":900,"default":900},"failureDecaySeconds":{"maximum":3600,"minimum":1,"type":"integer","description":"Time in seconds after which recorded authentication failures decay if no new failures occur.","format":"int32","example":900,"default":900},"enableSoftDelay":{"type":"boolean","description":"Enable progressive response delays before lockout is triggered.","example":true,"default":true},"softDelayMillisPerFailure":{"minimum":0,"type":"integer","description":"Additional delay in milliseconds applied per authentication failure when soft delay is enabled.","format":"int32","example":200,"default":200},"maxSoftDelayMillis":{"minimum":0,"type":"integer","description":"Maximum cumulative soft delay in milliseconds that can be applied before authentication processing.","format":"int32","nullable":true,"example":2000,"default":2000},"simpleName":{"type":"string"}},"description":"Auth Manager Configuration DTO"},"AutoRefreshConfigDTO":{"required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"enabled":{"type":"boolean","description":"Enable automatic refresh of model sources","example":false,"default":false},"intervalMinutes":{"maximum":1440,"minimum":1,"type":"integer","description":"Interval in minutes between refreshes","format":"int32","example":60,"default":60}},"description":"Auto-refresh configuration","nullable":true},"BaseManagerConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"simpleName":{"type":"string"}},"description":"Base configuration DTO for configuration managers.","discriminator":{"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/AggregatorManagerConfigDTO"},{"$ref":"#/components/schemas/NetworkConnectionManagerConfigDTO"},{"$ref":"#/components/schemas/RestApiManagerConfigDTO"},{"$ref":"#/components/schemas/RoutingManagerConfigDTO"},{"$ref":"#/components/schemas/DiscoveryManagerConfigDTO"},{"$ref":"#/components/schemas/MLModelManagerDTO"},{"$ref":"#/components/schemas/SchemaManagerConfigDTO"},{"$ref":"#/components/schemas/AuthManagerConfigDTO"},{"$ref":"#/components/schemas/LoRaDeviceManagerConfigDTO"},{"$ref":"#/components/schemas/JolokiaConfigDTO"},{"$ref":"#/components/schemas/TenantManagementConfigDTO"},{"$ref":"#/components/schemas/MessageDaemonConfigDTO"},{"$ref":"#/components/schemas/DestinationManagerConfigDTO"},{"$ref":"#/components/schemas/LicenseManagerConfigDTO"},{"$ref":"#/components/schemas/SecurityManagerDTO"},{"$ref":"#/components/schemas/NetworkManagerConfigDTO"},{"$ref":"#/components/schemas/DeviceManagerConfigDTO"},{"$ref":"#/components/schemas/TwinManagerConfigDTO"}]},"BaseTriggerConfigDTO":{"required":["name","schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Type of the trigger","example":"cron","enum":["cron","interrupt","periodic"]},"name":{"type":"string","description":"Name of the trigger","example":"dailyTrigger"}},"description":"Abstract base class for all schema configurations","nullable":true,"example":[],"discriminator":{"propertyName":"type","mapping":{"cron":"#/components/schemas/CronTriggerConfigDTO","interrupt":"#/components/schemas/InterruptTriggerConfigDTO","periodic":"#/components/schemas/PeriodicTriggerConfigDTO"}}},"CanAerospaceConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","topicNameTemplate","type","unknownPacketTopic"],"type":"object","description":"CANAerospace protocol configuration","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"yamlPath":{"minLength":1,"type":"string","description":"Optional path to an external CANAerospace YAML schema file. If omitted, the built-in schema bundled in the server is used.","nullable":true,"example":"/etc/maps/canaerospace/canaerospace-schema.yaml"},"topicNameTemplate":{"type":"string","description":"Topic name template used when publishing decoded CANAerospace messages. Supported placeholders: {candevice}, {messageName}.","example":"/{candevice}/{messageName}","default":"/{candevice}/{messageName}"},"unknownPacketTopic":{"type":"string","description":"Topic used when publishing raw CANAerospace frames that could not be mapped to a decoded message name.","example":"/{candevice}/unknown","default":"/{candevice}/unknown"},"inboundTopicName":{"type":"string","description":"Optional inbound topic subscription used to receive outbound CANAerospace messages for transmission onto the CAN bus.","nullable":true,"example":"/can1/#"},"parseToJson":{"type":"boolean","description":"Convert incoming CANAerospace frames into JSON using the configured schema. If false, raw binary CAN frames are published.","example":true,"default":true}}}]},"CanbusConfigDTO":{"required":["deviceName","schemaLoadingVersion","type"],"type":"object","allOf":[{"$ref":"#/components/schemas/EndPointConfigDTO"},{"type":"object","properties":{"deviceName":{"type":"string","description":"Canbus device name"}}}]},"CloudEventEnvelopeTransformationDTO":{"required":["schemaLoadingVersion","type"],"type":"object","description":"Transformation DTO that converts JSON payloads into XML.","allOf":[{"$ref":"#/components/schemas/TransformationConfigDTO"}]},"CloudEventJsonTransformationDTO":{"required":["schemaLoadingVersion","type"],"type":"object","description":"Transformation DTO that converts the message payload to JSON (when possible) and wraps it in a CloudEvents JSON structured event.","allOf":[{"$ref":"#/components/schemas/TransformationConfigDTO"}]},"CloudEventNativeTransformationDTO":{"required":["schemaLoadingVersion","type"],"type":"object","description":"Transformation DTO that encodes the message payload as Base64 and wraps it in a CloudEvents native format event.","allOf":[{"$ref":"#/components/schemas/TransformationConfigDTO"}]},"CoapConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","type"],"type":"object","description":"CoAP Protocol Configuration DTO","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"maxBlockSize":{"type":"integer","description":"Maximum block size for CoAP","format":"int32","example":128},"idleTime":{"type":"integer","description":"Idle time period for CoAP connections in seconds","format":"int32","example":120}}}]},"ConfigurationSchema":{"required":["config","schema"],"type":"object","properties":{"config":{"$ref":"#/components/schemas/BaseManagerConfigDTO"},"schema":{"type":"object","additionalProperties":true,"description":"JSON Schema describing the configuration object."}},"description":"Configuration object together with its JSON Schema (Draft 2020-12)."},"ConnectionAuthConfigDTO":{"required":["clientId","password","schemaLoadingVersion","username"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"username":{"type":"string","description":"Username for authentication","example":"user123"},"password":{"type":"string","description":"Password for authentication","example":"pass123"},"clientId":{"type":"string","description":"Client ID for the connection","example":"client123"},"tokenGenerator":{"type":"string","description":"Token generator type","nullable":true,"example":"JWT"}},"description":"Connection Authentication Configuration DTO","nullable":true},"CorsHeaders":{"type":"object","properties":{"headers":{"type":"object","additionalProperties":{"type":"string"}}},"description":"CORS configuration","nullable":true},"CronTriggerConfigDTO":{"required":["name","schemaLoadingVersion","type"],"type":"object","description":"Cron Trigger Configuration DTO","allOf":[{"$ref":"#/components/schemas/BaseTriggerConfigDTO"},{"type":"object","properties":{"cron":{"type":"string","description":"Cron expression for the trigger","example":"0 0 * * *"}}}]},"DestinationConfigDTO":{"minimum":1,"required":["directory","namespace","namespaceMapping","schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"remap":{"type":"boolean","description":"Enable or disable remapping","example":false,"default":false},"trailingPath":{"type":"string","description":"Trailing path","example":"path/to/trail","default":""},"directory":{"type":"string","description":"Directory path for destination","example":"/var/data"},"namespace":{"type":"string","description":"Namespace for destination","example":"namespace"},"type":{"type":"string","description":"Type of destination","example":"Partition","enum":["Partition","Memory","MemoryTier"],"default":"Partition"},"format":{"type":"object","description":"Format configuration","nullable":true},"messageOverride":{"$ref":"#/components/schemas/MessageOverrideDTO"},"namespaceMapping":{"type":"string","description":"Namespace mapping","example":"mappedNamespace"},"autoPauseTimeout":{"maximum":86400,"minimum":0,"type":"integer","description":"Auto-pause timeout in seconds","format":"int32","example":300,"default":0},"storageConfig":{"type":"object","description":"Storage configuration","nullable":true},"cache":{"type":"object","description":"Cache configuration","nullable":true}},"description":"Destination Configuration DTO"},"DestinationManagerConfigDTO":{"required":["data","schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"data":{"minimum":1,"type":"array","description":"List of destination configurations","items":{"$ref":"#/components/schemas/DestinationConfigDTO"}},"simpleName":{"type":"string"}},"description":"Destination Manager Configuration DTO"},"DeviceManagerConfigDTO":{"required":["enabled","schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"enabled":{"type":"boolean","description":"Indicates if the device manager is enabled","example":true,"default":true},"demoEnabled":{"type":"boolean","description":"Indicates if the device manager will load the demo devices","nullable":true,"example":false,"default":false},"triggers":{"type":"array","description":"List of trigger configurations","nullable":true,"example":[],"items":{"$ref":"#/components/schemas/BaseTriggerConfigDTO"}},"i2cBuses":{"type":"array","description":"List of I2C bus configurations","nullable":true,"items":{"$ref":"#/components/schemas/I2CBusConfigDTO"}},"spiBus":{"$ref":"#/components/schemas/SpiDeviceBusConfigDTO"},"oneWireBus":{"$ref":"#/components/schemas/OneWireBusConfigDTO"},"serialDeviceBusConfig":{"$ref":"#/components/schemas/SerialBusConfigDTO"},"simpleName":{"type":"string"}},"description":"Device Manager Configuration DTO"},"DiscoveryManagerConfigDTO":{"required":["addTxtRecords","domainName","enabled","hostnames","schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"enabled":{"type":"boolean","description":"Indicates if the discovery manager is enabled","example":false},"hostnames":{"pattern":"^\\s*[^,\\s][^,]*\\s*(?:,\\s*[^,\\s][^,]*\\s*)*$","type":"string","description":"Comma-separated list of hostnames or IP addresses to bind discovery to. Use \"::\" to bind to all interfaces (IPv6 any). Whitespace around commas is ignored.","example":"localhost, 192.168.1.10, [2001:db8::1], ::"},"addTxtRecords":{"type":"boolean","description":"Whether to add TXT records to advertised services","example":true},"domainName":{"pattern":"^(?:\\.)?[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?:\\.)?$","type":"string","description":"mDNS domain to advertise under. Commonly \"local\" (with or without leading/trailing dot).","example":"local"},"simpleName":{"type":"string"}},"description":"Discovery Manager (mDNS) configuration"},"DtlsConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","description":"TLS Configuration DTO","allOf":[{"$ref":"#/components/schemas/EndPointConfigDTO"},{"type":"object","properties":{"packetReuseTimeout":{"maximum":60000,"minimum":10,"type":"integer","description":"Timeout for reusing packets, in milliseconds","format":"int64","example":1000},"idleSessionTimeout":{"maximum":1200,"minimum":60,"type":"integer","description":"Idle session timeout duration, in seconds","format":"int64","example":600},"hmacHostLookupCacheExpiry":{"maximum":1200,"minimum":10,"type":"integer","description":"Expiry time for HMAC host lookup cache, in seconds","format":"int64","example":600},"hmacConfigList":{"type":"array","description":"List of HMAC configurations for nodes","items":{"$ref":"#/components/schemas/HmacConfigDTO"}},"sslConfig":{"$ref":"#/components/schemas/SslConfigDTO"}}}]},"EndPointConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Type of the endpoint","example":"tcp","enum":["tcp","ssl","udp","dtls","loraDevice","loraSerial","serial","satellite","canbus"]},"discoverable":{"type":"boolean","description":"Whether the endpoint is discoverable","example":false,"default":false},"selectorThreadCount":{"maximum":10000,"minimum":1,"type":"integer","description":"Number of selector threads","format":"int32","nullable":true,"example":2,"default":2},"serverReadBufferSize":{"maximum":104857600,"minimum":1024,"type":"integer","description":"Server read buffer size in bytes","format":"int64","example":10240,"default":10240},"serverWriteBufferSize":{"maximum":104857600,"minimum":1024,"type":"integer","description":"Server write buffer size in bytes","format":"int64","example":10240},"proxyProtocolMode":{"type":"string","description":"Proxy Protocol support mode. 'ENABLED' allows but doesn't require it, 'REQUIRED' enforces it, 'DISABLED' will NOT check for incoming PROXY requests.","nullable":true,"example":"REQUIRED","enum":["ENABLED","DISABLED","REQUIRED"],"default":"DISABLED"},"allowedProxyHosts":{"pattern":"^(?:\\s*[^,\\s][^,]*\\s*(?:,\\s*[^,\\s][^,]*\\s*)*)?$","type":"string","description":"Comma-separated list of allowed proxy source addresses. Supports hostnames, IPv4/IPv6 addresses, and CIDR blocks (e.g., 192.168.0.0/24, ::1, example.com).","nullable":true,"example":"example.com, localhost, 192.168.1.10, [2001:db8::1]"},"connectionTimeout":{"maximum":120000,"minimum":1000,"type":"integer","description":"Time to wait for a client to establish the connection, in milliseconds","format":"int64","example":5000}},"additionalProperties":true,"description":"Abstract base class for all endpoint configurations","discriminator":{"propertyName":"type","mapping":{"dtls":"#/components/schemas/DtlsConfigDTO","loraSerial":"#/components/schemas/LoRaSerialConfigDTO","loraDevice":"#/components/schemas/LoRaChipConfigDTO","serial":"#/components/schemas/SerialConfigDTO","tcp":"#/components/schemas/TcpConfigDTO","ssl":"#/components/schemas/TlsConfigDTO","udp":"#/components/schemas/UdpConfigDTO","satellite":"#/components/schemas/SatelliteEndPointDTO","canbus":"#/components/schemas/CanbusConfigDTO"}}},"EndPointConnectionServerConfigDTO":{"title":"Connection Configuration","required":["cost","endPointConfig","name","pluginConnection","protocolConfigs","schemaLoadingVersion","url"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"name":{"type":"string","description":"Name of the endpoint server","example":"MainServer"},"url":{"maxLength":2048,"minLength":1,"pattern":"^(tcp|ssl|udp|dtls|ws|wss|serial)://[^\\s]+$","type":"string","description":"URL for the endpoint server","example":"tcp://localhost:1883"},"endPointConfig":{"$ref":"#/components/schemas/EndPointConfigDTO"},"saslConfig":{"$ref":"#/components/schemas/SaslConfigDTO"},"protocolConfigs":{"type":"array","description":"List of protocol configurations for the endpoint","items":{"$ref":"#/components/schemas/ProtocolConfigDTO"}},"authenticationRealm":{"type":"string","description":"Authentication realm","nullable":true,"example":"defaultRealm"},"backlog":{"maximum":10000,"minimum":1,"type":"integer","description":"Backlog for the endpoint server","format":"int32","nullable":true,"example":100,"default":100},"selectorTaskWait":{"maximum":1000,"minimum":1,"type":"integer","description":"Selector task wait time","format":"int32","nullable":true,"example":10,"default":10},"authConfig":{"$ref":"#/components/schemas/AuthConfigDTO"},"linkTransformation":{"type":"string","description":"Link transformation identifier. Must match the name of a registered ProtocolMessageTransformation discovered via ServiceLoader.","example":"Schema-To-Json"},"linkConfigs":{"type":"array","description":"List of link configurations for this endpoint connection","nullable":true,"example":[{"direction":"pull","remote_namespace":"/+/1/1/GPS_RAW_INT","local_namespace":"/"}],"items":{"$ref":"#/components/schemas/LinkConfigDTO"}},"pluginConnection":{"type":"boolean","description":"True if this is a third-party plugin connection","example":false,"default":false},"cost":{"maximum":1000,"minimum":0,"type":"integer","description":"An arbitrary cost associated with using this connection (lower is preferred)","format":"int32","example":10,"default":10},"groupName":{"type":"string","description":"Optional group name for this connection","nullable":true,"example":"Main data uplink"},"willConfig":{"$ref":"#/components/schemas/MqttWillConfigDTO"}},"description":"Endpoint Connection Server Configuration DTO"},"EndPointServerConfigDTO":{"title":"EndPoint Server Configuration DTO","required":["endPointConfig","name","protocolConfigs","schemaLoadingVersion","url"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"name":{"type":"string","description":"Name of the endpoint server","example":"MainServer"},"url":{"maxLength":2048,"minLength":1,"pattern":"^(tcp|ssl|udp|dtls|ws|wss|serial)://[^\\s]+$","type":"string","description":"URL for the endpoint server","example":"tcp://localhost:1883"},"endPointConfig":{"$ref":"#/components/schemas/EndPointConfigDTO"},"saslConfig":{"$ref":"#/components/schemas/SaslConfigDTO"},"protocolConfigs":{"type":"array","description":"List of protocol configurations for the endpoint","items":{"$ref":"#/components/schemas/ProtocolConfigDTO"}},"authenticationRealm":{"type":"string","description":"Authentication realm","nullable":true,"example":"defaultRealm"},"backlog":{"maximum":10000,"minimum":1,"type":"integer","description":"Backlog for the endpoint server","format":"int32","nullable":true,"example":100,"default":100},"selectorTaskWait":{"maximum":1000,"minimum":1,"type":"integer","description":"Selector task wait time","format":"int32","nullable":true,"example":10,"default":10}},"description":"Represents configuration settings for an endpoint server."},"ExtensionConfigDTO":{"title":"Extension Protocol Configuration DTO","required":["protocol","proxyProtocol","schemaLoadingVersion","type"],"type":"object","additionalProperties":true,"description":"Generic protocol configuration for third-party integrations (e.g., IBM MQ, Pulsar, ROS). The 'config' object is intentionally untyped and may contain any JSON object structure.","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"protocol":{"type":"string","description":"Name of the extension protocol implementation (e.g., ibmmq, pulsar, ros).","example":"pulsar"},"config":{"type":"object","additionalProperties":true,"description":"Protocol-specific configuration object. This is intentionally untyped and may contain any JSON object structure.","nullable":true,"example":{"url":"pulsar://localhost:6650","tenant":"public","namespace":"default"}}}}]},"FileConfig":{"required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"path":{"type":"string","description":"Path to the local directory where models are stored","example":"/var/models"}},"description":"Local file system configuration for the model store"},"FileRepositoryConfigDTO":{"title":"File Repository configuration","required":["directoryPath","schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Repository type discriminator","example":"file","enum":["simple","file","maps"]},"directoryPath":{"type":"string","description":"Absolute or relative directory path where schema files are stored.","example":"{{MAPS_DATA}}/schemas"}},"description":"Configuration details for the file-based schema repository. Used when repositoryType is set to 'File'."},"GeoHashResolverTransformationDTO":{"required":["layout","onMissing","precision","schemaLoadingVersion","type","units"],"type":"object","description":"Transformation DTO that resolves destination topics based on geo-hash computed from message latitude/longitude.","allOf":[{"$ref":"#/components/schemas/TransformationConfigDTO"},{"type":"object","properties":{"prefix":{"maxLength":2048,"type":"string","description":"Topic prefix for output destination name.","nullable":true,"example":"maps/location"},"latKey":{"maxLength":2048,"minLength":1,"type":"string","description":"Primary latitude key to read from IdentifierResolver.","nullable":true,"example":"latitude"},"lonKey":{"maxLength":2048,"minLength":1,"type":"string","description":"Primary longitude key to read from IdentifierResolver.","nullable":true,"example":"longitude"},"precision":{"maximum":12,"minimum":1,"type":"integer","description":"GeoHash precision (number of characters).","format":"int32","example":5,"default":5},"latKeys":{"type":"array","items":{"maxLength":2048,"minLength":1,"type":"string","description":"Fallback latitude keys to try if latKey is missing.","nullable":true,"example":"lat"}},"lonKeys":{"type":"array","items":{"maxLength":2048,"minLength":1,"type":"string","description":"Fallback longitude keys to try if lonKey is missing.","nullable":true,"example":"lon"}},"units":{"type":"string","description":"Units of the latitude/longitude values.","example":"deg","enum":["DEG","RAD","E7","MICROS"]},"layout":{"type":"string","description":"How the geo-hash is represented in the output topic structure.","example":"chars-per-segment","enum":["CHARS_PER_SEGMENT","TWO_PER_SEGMENT","RAW"]},"onMissing":{"type":"string","description":"Behavior when latitude/longitude cannot be extracted.","example":"skip","enum":["DROP","SKIP","DEFAULT_TO"]},"defaultLatitude":{"maximum":90,"minimum":-90,"type":"number","description":"Default latitude used only when onMissing is 'default-to'.","format":"double","nullable":true,"example":0.0},"defaultLongitude":{"maximum":180,"minimum":-180,"type":"number","description":"Default longitude used only when onMissing is 'default-to'.","format":"double","nullable":true,"example":0.0},"splitHash":{"type":"boolean","description":"When true, geo-hash is split into topic segments. Deprecated in favour of 'layout'. If 'layout' is set, it takes precedence.","nullable":true,"example":true,"deprecated":true}}}]},"HmacConfigDTO":{"required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"host":{"type":"string","description":"The host for the HMAC configuration","example":"example.com"},"port":{"maximum":65536,"minimum":1000,"type":"integer","description":"The port used for HMAC communication","format":"int32","example":8080},"secret":{"type":"string","description":"The secret key for HMAC operations","example":"mySecretKey"},"hmacAlgorithm":{"type":"string","description":"The HMAC algorithm to use","example":"HmacSHA256"},"hmacManager":{"type":"string","description":"The manager handling HMAC operations","example":"Appender"},"hmacSharedKey":{"type":"string","description":"The shared key used for HMAC","example":"sharedKey"}},"description":"HMAC Configuration DTO"},"I2CBusConfigDTO":{"required":["bus","enabled","schemaLoadingVersion","topicNameTemplate","trigger"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"enabled":{"type":"boolean","description":"Indicates if the device bus is enabled","example":true,"default":false},"topicNameTemplate":{"pattern":"^/(?:[^/+#]+|\\+)(?:/(?:[^/+#]+|\\+))*?(?:/#)?$\n","type":"string","description":"Template for the topic name","example":"/folder/+/folder/topic"},"autoScan":{"type":"boolean","description":"Specifies if auto-scan is enabled","nullable":true,"example":false,"default":false},"scanTime":{"maximum":600000,"minimum":1000,"type":"integer","description":"1-wire bus Scan time interval in milliseconds","format":"int32","nullable":true,"example":30000,"default":60000},"filter":{"type":"string","description":"Filters raw value; depending on filter type will only send if there is a change or every trigger","example":"ON_CHANGE","enum":["ALWAYS_SEND","ON_CHANGE"],"default":"ON_CHANGE"},"selector":{"type":"string","description":"JMS selector configuration for the device bus","nullable":true,"example":"temperature > 45 AND humidity > 30"},"bus":{"maximum":255,"minimum":0,"type":"integer","description":"Bus number for the I2C device","format":"int32","example":1},"trigger":{"type":"string","description":"Trigger configuration for the I2C bus","example":"trigger name"},"devices":{"type":"array","description":"List of I2C devices on this bus","items":{"$ref":"#/components/schemas/I2CDeviceConfigDTO"}}},"description":"DTO for I2C Bus configuration properties","nullable":true},"I2CDeviceConfigDTO":{"required":["address","name","schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"address":{"maximum":255,"minimum":0,"type":"integer","description":"Address of the I2C device","format":"int32","example":45},"name":{"type":"string","description":"Name of the I2C device","example":"BME688 sensor"},"selector":{"type":"string","description":"Selector configuration for the I2C device","nullable":true,"example":"temperature > 30"}},"description":"DTO for I2C Device configuration properties"},"InterruptTriggerConfigDTO":{"required":["name","schemaLoadingVersion","type"],"type":"object","description":"Interrupt Trigger Configuration DTO","allOf":[{"$ref":"#/components/schemas/BaseTriggerConfigDTO"},{"type":"object","properties":{"address":{"type":"integer","description":"Address of the interrupt trigger","format":"int32","example":1},"pullDirection":{"type":"string","description":"Pull direction of the interrupt trigger (e.g., UP or DOWN)","example":"UP"},"id":{"type":"string","description":"Unique identifier for the trigger","example":"trigger1"}}}]},"JolokiaConfigDTO":{"required":["enable","schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"enable":{"type":"boolean","description":"Enable or disable Jolokia monitoring","example":false},"config":{"type":"object","additionalProperties":true,"description":"Mapping configuration for Jolokia (free-form object structure consumed by Jolokia integration).","nullable":true,"example":{"rules":[{"mbean":"java.lang:type=Memory","attributes":["HeapMemoryUsage"]}]}},"simpleName":{"type":"string"}},"description":"Jolokia Configuration DTO"},"JsonArray":{"type":"object","properties":{"asNumber":{"type":"number"},"asString":{"type":"string"},"asFloat":{"type":"number","format":"float"},"asByte":{"type":"string","format":"byte"},"asCharacter":{"type":"string"},"asShort":{"type":"integer","format":"int32"},"asBigDecimal":{"type":"number"},"asBigInteger":{"type":"integer"},"empty":{"type":"boolean"},"asDouble":{"type":"number","format":"double"},"asInt":{"type":"integer","format":"int32"},"asLong":{"type":"integer","format":"int64"},"asBoolean":{"type":"boolean"},"jsonObject":{"type":"boolean"},"jsonArray":{"type":"boolean"},"jsonNull":{"type":"boolean"},"asJsonArray":{"$ref":"#/components/schemas/JsonArray"},"asJsonNull":{"$ref":"#/components/schemas/JsonNull"},"jsonPrimitive":{"type":"boolean"},"asJsonObject":{"$ref":"#/components/schemas/JsonObject"},"asJsonPrimitive":{"$ref":"#/components/schemas/JsonPrimitive"}}},"JsonElement":{"type":"object","properties":{"jsonObject":{"type":"boolean"},"jsonArray":{"type":"boolean"},"jsonNull":{"type":"boolean"},"asJsonArray":{"$ref":"#/components/schemas/JsonArray"},"asJsonNull":{"$ref":"#/components/schemas/JsonNull"},"asNumber":{"type":"number"},"asString":{"type":"string"},"asFloat":{"type":"number","format":"float"},"asByte":{"type":"string","format":"byte"},"asCharacter":{"type":"string"},"asShort":{"type":"integer","format":"int32"},"jsonPrimitive":{"type":"boolean"},"asJsonObject":{"$ref":"#/components/schemas/JsonObject"},"asJsonPrimitive":{"$ref":"#/components/schemas/JsonPrimitive"},"asBigDecimal":{"type":"number"},"asBigInteger":{"type":"integer"},"asDouble":{"type":"number","format":"double"},"asInt":{"type":"integer","format":"int32"},"asLong":{"type":"integer","format":"int64"},"asBoolean":{"type":"boolean"}},"description":"Value for set. Stored as JSON element so it can be number/string/object/array.","nullable":true},"JsonMutateOpDTO":{"title":"JSON Mutate Operation DTO","required":["op"],"type":"object","properties":{"op":{"type":"string","description":"Operation type","enum":["SET","REMOVE","RENAME","set","remove","rename"]},"path":{"type":"string","description":"Target path for set/remove. Dot path with optional array indexes, e.g. payload.temp or payload.items[0].name","nullable":true,"example":"payload.temperature"},"from":{"type":"string","description":"Source path for rename","nullable":true,"example":"payload.tempC"},"to":{"type":"string","description":"Destination path for rename","nullable":true,"example":"payload.temperatureC"},"value":{"$ref":"#/components/schemas/JsonElement"}},"description":"Single JSON mutation operation."},"JsonMutateTransformationDTO":{"title":"JSON Mutate Transformation DTO","required":["operations","schemaLoadingVersion","type"],"type":"object","description":"Applies a small set of JSON mutations: set/remove/rename using dot paths.","allOf":[{"$ref":"#/components/schemas/TransformationConfigDTO"},{"type":"object","properties":{"operations":{"minItems":1,"type":"array","description":"Ordered list of mutation operations","items":{"$ref":"#/components/schemas/JsonMutateOpDTO"}}}}]},"JsonNull":{"type":"object","properties":{"jsonObject":{"type":"boolean"},"jsonArray":{"type":"boolean"},"jsonNull":{"type":"boolean"},"asJsonArray":{"$ref":"#/components/schemas/JsonArray"},"asJsonNull":{"$ref":"#/components/schemas/JsonNull"},"asNumber":{"type":"number"},"asString":{"type":"string"},"asFloat":{"type":"number","format":"float"},"asByte":{"type":"string","format":"byte"},"asCharacter":{"type":"string"},"asShort":{"type":"integer","format":"int32"},"jsonPrimitive":{"type":"boolean"},"asJsonObject":{"$ref":"#/components/schemas/JsonObject"},"asJsonPrimitive":{"$ref":"#/components/schemas/JsonPrimitive"},"asBigDecimal":{"type":"number"},"asBigInteger":{"type":"integer"},"asDouble":{"type":"number","format":"double"},"asInt":{"type":"integer","format":"int32"},"asLong":{"type":"integer","format":"int64"},"asBoolean":{"type":"boolean"}}},"JsonObject":{"type":"object","properties":{"empty":{"type":"boolean"},"jsonObject":{"type":"boolean"},"jsonArray":{"type":"boolean"},"jsonNull":{"type":"boolean"},"asJsonArray":{"$ref":"#/components/schemas/JsonArray"},"asJsonNull":{"$ref":"#/components/schemas/JsonNull"},"asNumber":{"type":"number"},"asString":{"type":"string"},"asFloat":{"type":"number","format":"float"},"asByte":{"type":"string","format":"byte"},"asCharacter":{"type":"string"},"asShort":{"type":"integer","format":"int32"},"jsonPrimitive":{"type":"boolean"},"asJsonObject":{"$ref":"#/components/schemas/JsonObject"},"asJsonPrimitive":{"$ref":"#/components/schemas/JsonPrimitive"},"asBigDecimal":{"type":"number"},"asBigInteger":{"type":"integer"},"asDouble":{"type":"number","format":"double"},"asInt":{"type":"integer","format":"int32"},"asLong":{"type":"integer","format":"int64"},"asBoolean":{"type":"boolean"}},"description":"Schema definition as JSON. Either schema or schemaBase64 must be provided.","nullable":true},"JsonPrimitive":{"type":"object","properties":{"asNumber":{"type":"number"},"asString":{"type":"string"},"asFloat":{"type":"number","format":"float"},"asByte":{"type":"string","format":"byte"},"asCharacter":{"type":"string"},"asShort":{"type":"integer","format":"int32"},"boolean":{"type":"boolean"},"string":{"type":"boolean"},"number":{"type":"boolean"},"asBigDecimal":{"type":"number"},"asBigInteger":{"type":"integer"},"asDouble":{"type":"number","format":"double"},"asInt":{"type":"integer","format":"int32"},"asLong":{"type":"integer","format":"int64"},"asBoolean":{"type":"boolean"},"jsonObject":{"type":"boolean"},"jsonArray":{"type":"boolean"},"jsonNull":{"type":"boolean"},"asJsonArray":{"$ref":"#/components/schemas/JsonArray"},"asJsonNull":{"$ref":"#/components/schemas/JsonNull"},"jsonPrimitive":{"type":"boolean"},"asJsonObject":{"$ref":"#/components/schemas/JsonObject"},"asJsonPrimitive":{"$ref":"#/components/schemas/JsonPrimitive"}}},"JsonQueryTransformationDTO":{"required":["schemaLoadingVersion","type"],"type":"object","description":"Transformation DTO that runs JsonQuery over incoming messages.","allOf":[{"$ref":"#/components/schemas/TransformationConfigDTO"},{"type":"object","properties":{"query":{"maxLength":65535,"minLength":1,"type":"string","description":"JsonQuery program text or a JsonQuery AST represented as JSON. If null or blank, the transformer becomes a no-op.","nullable":true,"example":"."}}}]},"JsonToSchemaTransformationDTO":{"required":["schemaLoadingVersion","type"],"type":"object","description":"Transformation DTO allows a schema lookup to use to convert from json to the native schema format","allOf":[{"$ref":"#/components/schemas/TransformationConfigDTO"},{"type":"object","properties":{"schemaName":{"maxLength":512,"minLength":1,"type":"string","description":"Exact schema name used to resolve the schema from the SchemaManager. This is the preferred and unambiguous lookup key. If provided, it takes precedence over format and messageName.","nullable":true,"example":"base.location.Location"},"format":{"maxLength":64,"minLength":1,"type":"string","description":"Schema format type used together with messageName to locate a schema when schemaName is not known. Examples include protobuf, avro, json-schema, xml, csv, or other registered schema formats. This field is ignored when schemaName is supplied.","nullable":true,"example":"protobuf"},"messageName":{"maxLength":512,"minLength":1,"type":"string","description":"Logical message name used together with format to locate a schema when schemaName is not supplied. This may be a simple message name such as Location or a fully qualified message name if required to avoid ambiguity. If multiple schemas match, schemaName must be provided.","nullable":true,"example":"Location"}}}]},"JsonToValueTransformationDTO":{"required":["schemaLoadingVersion","type"],"type":"object","description":"Transformation DTO that extracts a specific value from a JSON payload.","allOf":[{"$ref":"#/components/schemas/TransformationConfigDTO"},{"type":"object","properties":{"key":{"maxLength":2048,"minLength":1,"type":"string","description":"Json path key used by JsonParserExtension to locate a value. If null, the transformer becomes a no-op and returns the original payload.","nullable":true,"example":"data.temperature"}}}]},"JsonToXmlTransformationDTO":{"required":["schemaLoadingVersion","type"],"type":"object","description":"Transformation DTO that converts JSON payloads into XML.","allOf":[{"$ref":"#/components/schemas/TransformationConfigDTO"}]},"KeyStoreConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"alias":{"type":"string","description":"Alias used in the key store. If not set, the first suitable key entry may be used.","nullable":true,"example":"myKeyAlias"},"type":{"type":"string","description":"Type of the key store","example":"PKCS12","enum":["JKS","PKCS11","PKCS12","JCEKS","BKS","UBER","BCFKS"],"default":"PKCS12"},"providerName":{"type":"string","description":"Security provider name used for KeyStore/SSL operations (optional). Examples: SunJSSE, SUN, SunRsaSign, BC (BouncyCastle).","nullable":true,"example":"SunJSSE"},"managerFactory":{"type":"string","description":"KeyManagerFactory algorithm (optional). Common values: SunX509, NewSunX509, PKIX.","nullable":true,"example":"SunX509","default":"SunX509"},"path":{"minLength":1,"type":"string","description":"Path to the key store file. Not required for PKCS11 (which is typically configured via provider settings).","nullable":true,"example":"/path/to/keystore.p12"},"passphrase":{"type":"string","description":"Passphrase for the key store. Optional depending on key store type and provider.","nullable":true,"example":"changeit"},"provider":{"type":"string","description":"Provider identifier used to load the KeyStore (optional). If both providerName and provider are set, providerName typically takes precedence.","nullable":true,"example":"SunJSSE"}},"description":"Key Store Configuration DTO","nullable":true,"example":{"type":"PKCS12","path":"/etc/maps/trust.p12","passphrase":"changeit"}},"LicenseManagerConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"clientName":{"type":"string","description":"MAPS registered client name","nullable":true,"example":"Company B.V."},"clientSecret":{"type":"string","description":"MAPS license secret retrived from Maps support","nullable":true,"example":"license string"},"simpleName":{"type":"string"}},"description":"License Management Configuration DTO"},"LinkConfigDTO":{"required":["direction","includeSchema","localNamespace","remoteNamespace","schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"direction":{"type":"string","description":"Direction of the link","example":"pull","enum":["pull","push"]},"remoteNamespace":{"minLength":1,"type":"string","description":"Remote namespace (source). Typically a topic/namespace filter. For MQTT-style namespaces, + and # may be used as wildcards.","example":"/+/1/1/GPS_RAW_INT"},"localNamespace":{"minLength":1,"type":"string","description":"Local namespace (destination). Typically a topic/namespace.","example":"/"},"selector":{"type":"string","description":"Message selector expression (JMS selector syntax). If not set, all messages match.","nullable":true,"example":"temperature > 30 AND humidityPercent < 70"},"includeSchema":{"type":"boolean","description":"If true, include schema information when forwarding messages (where supported)","example":true,"default":false},"transformer":{"type":"array","description":"Transformer chain configuration (array of objects). Each entry specifies transformer name and parameters.","nullable":true,"example":[{"name":"JsonQuery","parameters":{"query":"[\"object\",{\"latitude\":[\"divide\",[\"get\",\"payload\",\"decoded\",\"lat\"],10000000]}]"}}],"items":{"$ref":"#/components/schemas/TransformationConfigDTO"}},"statistics":{"$ref":"#/components/schemas/StatisticsConfigDTO"},"namespaceFilters":{"type":"array","description":"Specific filtering applied to namespaces","nullable":true,"items":{"$ref":"#/components/schemas/NamespaceFilterDTO"}},"qualityOfService":{"type":"string","description":"Requested QoS for the link.","nullable":true,"example":"AT_LEAST_ONCE","enum":["AT_MOST_ONCE","AT_LEAST_ONCE","EXACTLY_ONCE","MQTT_SN_REGISTERED"]},"linkProperties":{"type":"object","additionalProperties":true,"description":"Link-specific properties for this individual namespace binding. These values are loaded from YAML and are intentionally untyped so protocol or handler specific settings can be supplied on a per-link basis. This map applies only to this link and may be used for remote or local subscription behaviour, topic-level handling, or protocol-specific options such as ROS2, IBM MQ, or Pulsar.","nullable":true,"example":{"url":"pulsar://localhost:6650","tenant":"public","namespace":"default"}}},"description":"Link Configuration DTO","nullable":true,"example":[{"direction":"pull","remote_namespace":"/+/1/1/GPS_RAW_INT","local_namespace":"/"}]},"LlmConfigDTO":{"required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"apiToken":{"minLength":1,"type":"string","description":"API token used to authenticate with the LLM provider","example":"sk-proj-abc123..."},"model":{"maxLength":128,"minLength":1,"pattern":"^[A-Za-z0-9._:-]+$","type":"string","description":"Model name to use (provider-specific). This is an open vocabulary and must match a model supported by the configured LLM provider.","example":"gpt-4.1"}},"description":"LLM access configuration","nullable":true},"LoRaChipConfigDTO":{"required":["address","frequency","name","power","schemaLoadingVersion","transmissionRate","type"],"type":"object","allOf":[{"$ref":"#/components/schemas/EndPointConfigDTO"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the LoRa device","example":"LoRaNode1"},"power":{"maximum":16,"minimum":0,"type":"integer","description":"Power setting for the device","format":"int32","example":14},"frequency":{"maximum":923,"minimum":863,"type":"number","description":"Operating frequency of the device in MHz","format":"float","example":868,"enum":[863,902,915,470,923,865,920]},"address":{"maximum":254,"minimum":1,"type":"integer","description":"Base address to register for, 1-254","format":"int32","example":2},"transmissionRate":{"maximum":1024,"minimum":0,"type":"integer","description":"Transmission rate to limit the number of packets/second, 0 - unlimited, else per second","format":"int32","example":5},"hexKey":{"type":"string","description":"Optional hex based 16 byte key","nullable":true,"example":"0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0"},"radio":{"type":"string","description":"Radio type of the LoRa device","example":"SX1276"},"hardware":{"$ref":"#/components/schemas/LoRaHardwareConfigDTO"}}}]},"LoRaDeviceConfigDTO":{"required":["frequency","name","schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"name":{"type":"string","description":"Name of the LoRa device","example":"LoRaNode1"},"power":{"maximum":16,"minimum":0,"type":"integer","description":"Power setting for the device","format":"int32","example":14,"default":1},"frequency":{"maximum":923,"minimum":863,"type":"number","description":"Operating frequency of the device in MHz","format":"float","example":868.0,"enum":[863,902,915,470,923,865,920]},"hardware":{"$ref":"#/components/schemas/LoRaHardwareConfigDTO"},"serialDevice":{"$ref":"#/components/schemas/SerialDeviceDTO"}},"description":"LoRa Device Configuration DTO","nullable":true,"x-maps-oneOfRequired":{"fields":"hardware,serialDevice"}},"LoRaDeviceManagerConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"deviceConfigList":{"type":"array","description":"List of LoRa device configurations","nullable":true,"items":{"$ref":"#/components/schemas/LoRaDeviceConfigDTO"}},"simpleName":{"type":"string"}},"description":"LoRa Device Management Configuration DTO"},"LoRaHardwareConfigDTO":{"required":["cadTimeout","cs","irq","rst","schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"radio":{"type":"string","description":"Radio type of the LoRa device","example":"SX1276"},"cs":{"maximum":255,"minimum":0,"type":"integer","description":"Chip Select (CS) pin number","format":"int32","example":10},"irq":{"maximum":255,"minimum":0,"type":"integer","description":"IRQ pin number","format":"int32","example":7},"rst":{"maximum":255,"minimum":0,"type":"integer","description":"Reset (RST) pin number","format":"int32","example":3},"cadTimeout":{"maximum":512,"minimum":1,"type":"integer","description":"CAD timeout setting","format":"int32","example":500}},"description":"configures the LoRa device"},"LoRaProtocolConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","type"],"type":"object","description":"LoRa Protocol Configuration DTO","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"retransmit":{"type":"integer","description":"Maximum retransmission rate for LoRa","format":"int32","example":10}}}]},"LoRaSerialConfigDTO":{"required":["address","frequency","name","power","schemaLoadingVersion","transmissionRate","type"],"type":"object","allOf":[{"$ref":"#/components/schemas/EndPointConfigDTO"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the LoRa device","example":"LoRaNode1"},"power":{"maximum":16,"minimum":0,"type":"integer","description":"Power setting for the device","format":"int32","example":14},"frequency":{"maximum":923,"minimum":863,"type":"number","description":"Operating frequency of the device in MHz","format":"float","example":868,"enum":[863,902,915,470,923,865,920]},"address":{"maximum":254,"minimum":1,"type":"integer","description":"Base address to register for, 1-254","format":"int32","example":2},"transmissionRate":{"maximum":1024,"minimum":0,"type":"integer","description":"Transmission rate to limit the number of packets/second, 0 - unlimited, else per second","format":"int32","example":5},"hexKey":{"type":"string","description":"Optional hex based 16 byte key","nullable":true,"example":"0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0"},"serialConfig":{"$ref":"#/components/schemas/SerialConfigDTO"}}}]},"MLEventStreamDTO":{"required":["id","outlierTopic","schemaId","schemaLoadingVersion","topicFilter"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"id":{"type":"string","description":"Unique ID for the model stream","example":"weather-outliers"},"topicFilter":{"type":"string","description":"Topic filter to match incoming events","example":"/weather/#"},"schemaId":{"type":"string","description":"Schema ID that the event must match","example":"weather.v1"},"selector":{"type":"string","description":"Selector used to evaluate events","nullable":true,"example":"temperature > 35"},"outlierTopic":{"type":"string","description":"Where to publish outliers","example":"/ml/outliers/weather"},"maxTrainEvents":{"maximum":1000000,"minimum":100,"type":"integer","description":"Max number of events to train the model","format":"int32","nullable":true,"example":1000,"default":1000},"maxTrainTimeSeconds":{"maximum":86400,"minimum":0,"type":"integer","description":"Max time in seconds to train the model, 0 disables","format":"int32","nullable":true,"example":600,"default":2400},"retrainThreshold":{"maximum":1,"minimum":0,"type":"number","description":"Outlier rate threshold to trigger retraining (0.0 to 1.0)","format":"double","nullable":true,"example":0.05,"default":0.05}},"description":"Model event stream configuration","example":[]},"MLModelManagerDTO":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"enableCaching":{"type":"boolean","description":"Enable in-memory caching of models","example":true,"default":false},"cacheSize":{"maximum":1000000,"minimum":1,"type":"integer","description":"Maximum number of models to cache","format":"int32","example":10000,"default":10000},"cacheExpiryMinutes":{"maximum":60,"minimum":1,"type":"integer","description":"Model cache expiry time in minutes","format":"int32","example":2,"default":2},"preloadModels":{"type":"array","description":"Models to preload at startup","items":{"type":"string","description":"Models to preload at startup","default":"[]"},"default":[]},"autoRefresh":{"$ref":"#/components/schemas/AutoRefreshConfigDTO"},"llmConfig":{"$ref":"#/components/schemas/LlmConfigDTO"},"modelStore":{"$ref":"#/components/schemas/ModelStoreConfigDTO"},"eventStreams":{"type":"array","description":"List of configured model event streams","example":[],"items":{"$ref":"#/components/schemas/MLEventStreamDTO"}},"simpleName":{"type":"string"}},"description":"Machine Learning Model Manager configuration"},"MapsConfig":{"required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"url":{"type":"string","description":"Maps Server RestAPI URL","example":"https://mapsserver001:8080/"},"user":{"type":"string","description":"Username for Maps Server access (optional)","example":"maps-user"},"password":{"type":"string","description":"Password for Maps Server access (optional)","example":"maps-pass"}},"description":"Maps Server RestAPI configuration for the model store"},"MapsRepositoryConfigDTO":{"title":"Maps Repository configuration","required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Repository type discriminator","example":"file","enum":["simple","file","maps"]},"directoryPath":{"type":"string","description":"Local directory path for storing cached schemas (used when local mirroring or fallback is enabled).","example":"{{MAPS_DATA}}/schemas"},"urlPath":{"type":"string","description":"URL path of the remote MapsMessaging server used for schema synchronization.","example":"https://mapsmessaging.example.com/api/v1/schemas"},"username":{"type":"string","description":"Username for authenticating to the remote MapsMessaging repository.","example":"admin"},"password":{"type":"string","description":"Password for authenticating to the remote MapsMessaging repository.","example":"secret-password"},"pushSchemas":{"type":"boolean","description":"If true, newly created or updated schemas will be pushed to the remote repository.","example":true},"pullSchemas":{"type":"boolean","description":"If true, schemas will be periodically pulled from the remote repository to keep the local cache up to date.","example":false}},"description":"Configuration details for the MapsMessaging-based repository. Used when repositoryType is set to 'Maps'."},"MavlinkConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","statusTopicNameTemplate","topicNameTemplate","type"],"type":"object","description":"MAVLink protocol configuration. Controls session handling, topic mapping, JSON conversion, source filtering, message filtering, raw frame forwarding, and rejected frame DLQ publishing.","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"fullyQualifiedPathToDialectXml":{"type":"string","description":"Fully qualified path to the MAVLink dialect XML. If not provided, the common dialect is used.","nullable":true,"example":"C:/path/to/dialects/common.xml"},"idleSessionTimeout":{"maximum":86400,"minimum":1,"type":"integer","description":"Idle session timeout in seconds. Session is closed if no MAVLink traffic is received within this period.","format":"int64","nullable":true,"example":600,"default":600},"maximumSessionExpiry":{"maximum":604800,"minimum":60,"type":"integer","description":"Maximum allowed session lifetime in seconds, regardless of activity.","format":"int32","nullable":true,"example":86400,"default":86400},"advertiseInterval":{"maximum":3600,"minimum":1,"type":"integer","description":"Interval in seconds at which MAVLink heartbeat or advertise messages are emitted.","format":"int32","nullable":true,"example":30,"default":30},"maxInFlightEvents":{"maximum":1024,"minimum":1,"type":"integer","description":"Maximum number of in-flight MAVLink events per session. Limits back-pressure and memory usage.","format":"int32","nullable":true,"example":1,"default":1},"topicNameTemplate":{"type":"string","description":"Topic name template used when publishing decoded MAVLink messages. Supported placeholders: {remoteSocket}, {systemId}, {systemName}, {componentId}, {messageName}.","example":"/{remoteSocket}/{systemId}/{componentId}/{messageName}","default":"/{remoteSocket}/{systemId}/{componentId}/{messageName}"},"statusTopicNameTemplate":{"type":"string","description":"Topic name template used when publishing MAVLink session state changes induced when sequence number monitor detects issues. Supported placeholders: {remoteSocket}, {systemId}, {systemName}, {componentId}, {messageName}.","example":"/{remoteSocket}/{systemId}/{componentId}/{messageName}","default":"/{remoteSocket}/{systemId}/{componentId}/{messageName}/status"},"parseToJson":{"type":"boolean","description":"Convert incoming MAVLink frames into JSON using the registered MAVLink message definitions. If false, raw binary frames are published.","nullable":true,"example":true,"default":true},"forwardUrls":{"type":"string","description":"Comma-separated list of MAVLink-compatible UDP endpoints to forward received frames to. Each entry must be a valid udp://host:port/ URI. Blank disables forwarding.","example":"udp://192.168.1.50:14550/,udp://192.168.1.51:14550/"},"forwardRawFrames":{"type":"boolean","description":"When forwarding is enabled, forward raw MAVLink frames instead of decoded messages.","nullable":true,"example":true,"default":true},"forwardRejectedRawFrames":{"type":"boolean","description":"If true, frames rejected by source or message filtering are forwarded as raw MAVLink frames to the configured forwardUrls. This allows other MAVLink systems to receive frames even when this server chooses not to parse or publish them locally.","nullable":true,"example":false,"default":false},"dropIfTargetEqualsSource":{"type":"boolean","description":"Prevent forwarding a MAVLink packet back to its source address and port if that address is present in forwardUrls.","nullable":true,"example":true,"default":true},"dedupWindowMillis":{"maximum":60000,"minimum":0,"type":"integer","description":"Duplicate suppression window in milliseconds. Packets received with identical content within this window are dropped. Set to 0 to disable duplicate detection.","format":"int32","nullable":true,"example":0,"default":0},"acceptedMessageIds":{"type":"array","items":{"type":"integer","description":"Global allow-list of MAVLink message IDs. If empty, all MAVLink message IDs are accepted unless explicitly rejected by rejectedMessageIds. If populated, only message IDs in this list are accepted.","format":"int32"}},"rejectedMessageIds":{"type":"array","items":{"type":"integer","description":"Global reject-list of MAVLink message IDs. Applied after acceptedMessageIds. If empty, no message IDs are explicitly rejected.","format":"int32"}},"knownSources":{"type":"array","items":{"$ref":"#/components/schemas/MavlinkKnownSourceDTO"}},"rejectUnknownSources":{"type":"boolean","description":"If true, only MAVLink sources listed in knownSources are accepted. Frames from unknown systemId/componentId pairs are rejected. If false, unknown sources are accepted and knownSources entries are used only for metadata and filtering overrides.","nullable":true,"example":false,"default":false},"rejectedFrameNamespace":{"type":"string","description":"Namespace used when publishing rejected MAVLink frames. The rejection reason may be appended as a child topic (for example: /protocol/mavlink/dlq/message-id-not-accepted).","example":"/protocol/mavlink/dlq","default":"/protocol/mavlink/dlq"},"includeRejectedFrameMetadata":{"type":"boolean","description":"If true, rejected frame events include metadata such as source address, systemId, componentId, messageId, and rejection reason in addition to the raw MAVLink frame payload.","nullable":true,"example":true,"default":true}}}]},"MavlinkKnownSourceDTO":{"type":"object","properties":{"name":{"type":"string","description":"Friendly name for the source.","example":"drone-1"},"description":{"type":"string","description":"Optional source description.","example":"Primary aircraft autopilot"},"systemId":{"maximum":255,"minimum":1,"type":"integer","description":"MAVLink system ID.","format":"int32","example":1},"componentId":{"maximum":255,"minimum":0,"type":"integer","description":"MAVLink component ID.","format":"int32","example":1},"vehicleClass":{"type":"string","description":"Vehicle class (UAV=air, USV=surface, UGV=ground, UUV=underwater, GCS=control).","enum":["UAV","USV","UGV","UUV","GCS"]},"acceptedMessageIds":{"type":"array","items":{"type":"integer","description":"Per-source allow-list of message IDs.","format":"int32"}},"rejectedMessageIds":{"type":"array","items":{"type":"integer","description":"Per-source reject-list of message IDs.","format":"int32"}}},"description":"Known MAVLink source definition."},"MessageDaemonConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"delayedPublishInterval":{"maximum":60000,"minimum":500,"type":"integer","description":"Interval for delayed publish in milliseconds","format":"int32","example":1000,"default":1000},"sessionPipeLines":{"maximum":255,"minimum":1,"type":"integer","description":"Number of session pipelines","format":"int32","example":48,"default":48},"transactionExpiry":{"maximum":2419200000,"minimum":60000,"type":"integer","description":"Transaction expiry in milliseconds","format":"int64","example":3600000,"default":3600000},"transactionScan":{"maximum":30000,"minimum":1000,"type":"integer","description":"Transaction scan interval in milliseconds","format":"int64","example":5000,"default":5000},"compressionName":{"type":"string","description":"Compression algorithm name","example":"None","default":"None"},"compressMessageMinSize":{"maximum":4096,"minimum":128,"type":"integer","description":"Minimum size for message compression","format":"int32","example":1024,"default":1024},"incrementPriorityMethod":{"type":"string","description":"On rollback of events, whether to maintain the priority or increment it","example":"maintain","default":"maintain"},"enableResourceStatistics":{"type":"boolean","description":"Enable resource statistics","example":false,"default":false},"enableSystemTopics":{"type":"boolean","description":"Enable system topics","example":true,"default":true},"enableSystemStatusTopics":{"type":"boolean","description":"Enable system status topics","example":true,"default":true},"enableSystemTopicAverages":{"type":"boolean","description":"Enable system topic averages","example":false,"default":false},"enableJMX":{"type":"boolean","description":"Enable JMX monitoring","example":false,"default":false},"enableJMXStatistics":{"type":"boolean","description":"Enable JMX statistics","example":false,"default":false},"tagMetaData":{"type":"boolean","description":"Tag metadata for messages","example":false,"default":false},"latitude":{"maximum":90.0,"minimum":-90.0,"type":"number","description":"Latitude for the daemon location","format":"double","example":0.0,"default":0.0},"longitude":{"maximum":180.0,"minimum":-180.0,"type":"number","description":"Longitude for the daemon location","format":"double","example":0.0,"default":0.0},"sendAnonymousStatusUpdates":{"type":"boolean","description":"Send anonymous server usage statistics to Maps Messaging","example":true,"default":true},"exitOnConfigError":{"type":"boolean","description":"Exit server startup if invalid configuration detected","nullable":true,"example":true,"default":false},"simpleName":{"type":"string"}},"description":"Message Daemon Configuration DTO"},"MessageOverrideDTO":{"required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"expiry":{"maximum":604800000,"minimum":0,"type":"integer","description":"Override message expiry in milliseconds","format":"int64","nullable":true,"example":60000},"priority":{"type":"string","description":"Override message priority","nullable":true,"example":"NORMAL","enum":["Priority.LOWEST(value=0, description=Lowest priority)","Priority.ONE_ABOVE_LOWEST(value=1, description=Lowest priority +1)","Priority.TWO_ABOVE_LOWEST(value=2, description=Lowest priority +2)","Priority.ONE_BELOW_NORMAL(value=3, description=Normal priority -1)","Priority.NORMAL(value=4, description=Normal priority)","Priority.ONE_ABOVE_NORMAL(value=5, description=Normal priority +1)","Priority.TWO_ABOVE_NORMAL(value=6, description=Normal priority +2)","Priority.THREE_ABOVE_NORMAL(value=7, description=Normal priority +3)","Priority.TWO_BELOW_HIGHEST(value=8, description=Highest priority -2)","Priority.ONE_BELOW_HIGHEST(value=9, description=Highest priority -1)","Priority.HIGHEST(value=10, description=Highest priority)"]},"qualityOfService":{"type":"string","description":"Override message quality of service","nullable":true,"example":"AT_LEAST_ONCE","enum":["QualityOfService.AT_MOST_ONCE(level=0, description=Best Effort, no guarantee of delivery, storeOffLine=false, sendPacketId=false, clientAcknowledgement=AUTO)","QualityOfService.AT_LEAST_ONCE(level=1, description=Guarantees at least once but may be duplicated delivery if connection fails between sending and Ack, storeOffLine=true, sendPacketId=true, clientAcknowledgement=INDIVIDUAL)","QualityOfService.EXACTLY_ONCE(level=2, description=Only once delivery, in that the event is delivered to the client once and once only, storeOffLine=true, sendPacketId=true, clientAcknowledgement=INDIVIDUAL)","QualityOfService.MQTT_SN_REGISTERED(level=3, description=Used by MQTT-SN to send publish events to a known topic without the need to have a connection established, this is reserved for MQTT-SN, storeOffLine=true, sendPacketId=false, clientAcknowledgement=AUTO)"]},"responseTopic":{"type":"string","description":"Override response topic","nullable":true,"example":"/default/response"},"contentType":{"type":"string","description":"Override content type","format":"media-type","nullable":true,"example":"application/json"},"schemaId":{"type":"string","description":"Override schema ID","nullable":true,"example":"default-schema-id"},"retain":{"type":"boolean","description":"Override retain message flag","nullable":true,"example":true},"meta":{"type":"object","additionalProperties":true,"description":"Metadata to inject if not present in the message","nullable":true,"example":true},"dataMap":{"type":"object","additionalProperties":true,"description":"Data map to inject if keys are not present in the message","nullable":true}},"description":"Message override configuration DTO","nullable":true},"ModelStoreConfigBlockDTO":{"type":"object","properties":{"s3":{"$ref":"#/components/schemas/S3Config"},"file":{"$ref":"#/components/schemas/FileConfig"},"nexus":{"$ref":"#/components/schemas/NexusConfig"},"maps":{"$ref":"#/components/schemas/MapsConfig"}},"description":"Store-specific configuration block (type-dependent)","default":{}},"ModelStoreConfigDTO":{"required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Type of model store","example":"s3","enum":["s3","file","nexus","maps"],"default":"file"},"config":{"$ref":"#/components/schemas/ModelStoreConfigBlockDTO"}},"description":"Model store configuration","nullable":true},"MqttConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","type"],"type":"object","description":"MQTT Protocol Configuration DTO","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"minServerKeepAlive":{"type":"integer","description":"Minimum server keep-alive interval in seconds","format":"int32","example":0},"maxServerKeepAlive":{"type":"integer","description":"Maximum server keep-alive interval in seconds","format":"int32","example":60},"maximumSessionExpiry":{"type":"integer","description":"Maximum session expiry for MQTT","format":"int64","example":86400},"maximumBufferSize":{"type":"integer","description":"Maximum buffer size for MQTT","format":"int64","example":10485760},"serverReceiveMaximum":{"type":"integer","description":"Server receive maximum","format":"int32","example":10},"clientReceiveMaximum":{"type":"integer","description":"Client receive maximum","format":"int32","example":65535},"clientMaximumTopicAlias":{"type":"integer","description":"Client maximum topic alias","format":"int32","example":32767},"serverMaximumTopicAlias":{"type":"integer","description":"Server maximum topic alias","format":"int32","example":0},"strictClientId":{"type":"boolean","description":"Indicates if strict client ID enforcement is enabled","example":false}}}]},"MqttSnConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","type"],"type":"object","description":"MQTT-SN Protocol Configuration DTO","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"gatewayId":{"type":"string","description":"Gateway ID for MQTT-SN","example":"1"},"receiveMaximum":{"type":"integer","description":"Receive maximum","format":"int32","example":10},"idleSessionTimeout":{"type":"integer","description":"Idle session timeout in seconds","format":"int64","example":600},"maximumSessionExpiry":{"type":"integer","description":"Maximum session expiry time in seconds","format":"int32","example":86400},"enablePortChanges":{"type":"boolean","description":"Enable port changes","example":true},"enableAddressChanges":{"type":"boolean","description":"Enable address changes","example":false},"advertiseGateway":{"type":"boolean","description":"Advertise the gateway","example":false},"registeredTopics":{"type":"string","description":"Registered topics"},"advertiseInterval":{"type":"integer","description":"Advertise interval in seconds","format":"int32","example":30},"maxRegisteredSize":{"type":"integer","description":"Maximum registered size","format":"int32","example":32767},"maxInFlightEvents":{"type":"integer","description":"Maximum in-flight events","format":"int32","example":1},"dropQoS0":{"type":"boolean","description":"Drop QoS 0 events","example":false},"eventQueueTimeout":{"type":"integer","description":"Event queue timeout in seconds","format":"int32","example":0},"predefinedTopicsList":{"type":"array","description":"List of predefined topics","items":{"$ref":"#/components/schemas/PredefinedTopics"}}}}]},"MqttWillConfigDTO":{"required":["schemaLoadingVersion","topic"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"topic":{"type":"string","description":"Topic to publish the Will message to","example":"system/bridge/client1/status"},"payload":{"type":"string","description":"Payload to publish when the Will is triggered","nullable":true,"example":"{\"status\":\"offline\"}"},"payloadEncoding":{"type":"string","description":"Payload encoding type (string or base64)","example":"string","enum":["string","base64"],"default":"string"},"qos":{"maximum":2,"minimum":0,"type":"integer","description":"Quality of Service level for the Will message (0, 1, or 2)","format":"int32","example":1,"default":0},"retain":{"type":"boolean","description":"Retain flag for the Will message","example":true,"default":false},"delayInterval":{"minimum":0,"type":"integer","description":"MQTT v5 Will Delay Interval in seconds before publishing the Will","format":"int32","example":15,"default":0},"messageExpiryInterval":{"minimum":0,"type":"integer","description":"MQTT v5 Message Expiry Interval in seconds","format":"int64","example":300,"default":0},"contentType":{"type":"string","description":"MQTT v5 Content Type of the Will message","nullable":true,"example":"application/json"},"payloadFormatIndicator":{"maximum":1,"minimum":0,"type":"integer","description":"MQTT v5 Payload Format Indicator (0 = unspecified, 1 = UTF-8)","format":"int32","example":1,"default":0}},"description":"MQTT Last Will and Testament (LWT) configuration","nullable":true},"N2KConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","topicNameTemplate","type","unknownPacketTopic"],"type":"object","description":"N2K protocol configuration. Controls session handling, topic mapping, JSON conversion, and optional frame forwarding.","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"databasePath":{"minLength":1,"type":"string","description":"Optional path to an external NMEA 2000 database file. If omitted, the built-in database bundled in the server JAR is used.","nullable":true,"example":"/etc/maps/n2k/n2k-database.xml"},"base64EncodedDatabase":{"minLength":1,"type":"string","description":"Optional XML definition to use encoded as base64","nullable":true},"topicNameTemplate":{"type":"string","description":"Topic name template used when publishing decoded NMEA 2000 (N2K) messages. Supported placeholders: {candevice}, {pgn}, {messageName}.","example":"/{candevice}/{pgn}/{messageName}","default":"/{candevice}/{pgn}/{messageName}"},"unknownPacketTopic":{"type":"string","description":"Topic to which raw CAN/NMEA 2000 frames are published when the PGN or message type is unknown. ","example":"/{candevice}/unknown","default":"/{candevice}/"},"inboundTopicName":{"type":"string","description":"Topic to which raw CAN/NMEA 2000 frames are published when the PGN or message type is unknown. ","nullable":true,"example":"/can1/#"},"parseToJson":{"type":"boolean","description":"Convert incoming CANBUS frames into JSON using the registered N2K message definitions. If false, raw binary frames are published.","nullable":true,"example":true,"default":true},"publishMavlinkDrones":{"type":"boolean","description":"Monitors and publishes the mavlink drone position and details as AIS N2K events","nullable":true,"example":true,"default":true}}}]},"NamespaceFilterDTO":{"title":"Namespace Filter","required":["depth","namespace","selector"],"type":"object","properties":{"namespace":{"type":"string","description":"Namespace to which the filter applies","example":"root/system"},"depth":{"minimum":0,"type":"integer","description":"Depth to which the namespace filter applies","format":"int32","example":3},"selector":{"type":"string","description":"Selector expression applied to the namespace","example":"state = ACTIVE"},"forcePriority":{"type":"boolean","description":"Forces this filter to take priority over others","example":false,"default":false}},"description":"Defines filtering rules applied to a namespace, including depth and selector evaluation.","nullable":true},"NatsConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","type"],"type":"object","additionalProperties":true,"description":"NATS Protocol Configuration DTO","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"maxBufferSize":{"type":"integer","description":"Maximum buffer size for NATS","format":"int32","example":65535},"maxReceive":{"type":"integer","description":"Maximum receive limit for NATS","format":"int32","example":1000},"enableStreams":{"type":"boolean","description":"Enable NATS Streams via jetstream","example":true},"enableKeyValues":{"type":"boolean","description":"Enable NATS Key values via jetstream","example":true},"enableObjectStore":{"type":"boolean","description":"Enable NATS object store via jetstream","example":true},"keepAlive":{"type":"integer","description":"Ping timeout in milliseconds","format":"int32","example":60000},"namespaceRoot":{"type":"string","description":"Root for the NATS streams","example":"/nats"},"enableStreamDelete":{"type":"boolean","description":"Enable or disable stream deletion","example":true}}}]},"NetworkConnectionManagerConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"endPointServerConfigList":{"type":"array","description":"List of endpoint connection server configurations","nullable":true,"items":{"$ref":"#/components/schemas/EndPointConnectionServerConfigDTO"}},"simpleName":{"type":"string"}},"description":"Network Connection Manager Configuration DTO"},"NetworkManagerConfigDTO":{"required":["endPointServerConfigList","schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"preferIpV6Addresses":{"type":"boolean","description":"Prefer IPv6 addresses when both IPv4 and IPv6 are available","nullable":true,"example":true,"default":true},"scanNetworkChanges":{"type":"boolean","description":"Scan for network changes (interface up/down, address changes, etc.)","nullable":true,"example":true,"default":true},"scanInterval":{"maximum":600000,"minimum":10000,"type":"integer","description":"Interval in milliseconds to scan for new/changed network interfaces","format":"int32","nullable":true,"example":60000,"default":60000},"endPointServerConfigList":{"minLength":1,"type":"array","description":"List of endpoint server configurations","items":{"$ref":"#/components/schemas/EndPointServerConfigDTO"}},"simpleName":{"type":"string"}},"description":"Network Manager Configuration DTO"},"NexusConfig":{"required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"url":{"type":"string","description":"Nexus repository URL","example":"https://nexus.local/repository/maps_ml_store/"},"user":{"type":"string","description":"Username for Nexus access (optional)","example":"nexus-user"},"password":{"type":"string","description":"Password for Nexus access (optional)","example":"nexus-pass"}},"description":"Nexus repository configuration for the model store"},"NmeaConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","type"],"type":"object","description":"NMEA Protocol Configuration DTO","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"serial":{"$ref":"#/components/schemas/SerialConfigDTO"}}}]},"OneWireBusConfigDTO":{"required":["enabled","schemaLoadingVersion","topicNameTemplate"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"enabled":{"type":"boolean","description":"Indicates if the device bus is enabled","example":true,"default":false},"topicNameTemplate":{"pattern":"^/(?:[^/+#]+|\\+)(?:/(?:[^/+#]+|\\+))*?(?:/#)?$\n","type":"string","description":"Template for the topic name","example":"/folder/+/folder/topic"},"autoScan":{"type":"boolean","description":"Specifies if auto-scan is enabled","nullable":true,"example":false,"default":false},"scanTime":{"maximum":600000,"minimum":1000,"type":"integer","description":"1-wire bus Scan time interval in milliseconds","format":"int32","nullable":true,"example":30000,"default":60000},"filter":{"type":"string","description":"Filters raw value; depending on filter type will only send if there is a change or every trigger","example":"ON_CHANGE","enum":["ALWAYS_SEND","ON_CHANGE"],"default":"ON_CHANGE"},"selector":{"type":"string","description":"JMS selector configuration for the device bus","nullable":true,"example":"temperature > 45 AND humidity > 30"},"name":{"type":"string","description":"Name of the OneWire bus","example":"oneWireBus1"},"trigger":{"type":"string","description":"Trigger mechanism for OneWire bus","example":"temperatureTrigger"}},"description":"OneWire Bus Configuration DTO","nullable":true},"PeriodicTriggerConfigDTO":{"required":["name","schemaLoadingVersion","type"],"type":"object","description":"Periodic Trigger Configuration DTO","allOf":[{"$ref":"#/components/schemas/BaseTriggerConfigDTO"},{"type":"object","properties":{"interval":{"type":"integer","description":"Interval for the periodic trigger in milliseconds","format":"int32","example":5000}}}]},"PredefinedServerConfigDTO":{"required":["name","schemaLoadingVersion","url"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"name":{"type":"string","description":"Name of the predefined server","example":"Server1"},"url":{"type":"string","description":"URL of the predefined server","format":"uri","example":"tcp://server1:1883/"}},"description":"Predefined Server Configuration DTO","example":[]},"PredefinedTopics":{"required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"id":{"type":"integer","description":"Unique identifier for the topic","format":"int32","example":1},"topic":{"type":"string","description":"Topic name","example":"my/topic"},"address":{"type":"string","description":"Address associated with the topic","example":"*"}},"description":"List of predefined topics"},"ProtocolConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Type of the protocol configuration","example":"mqtt","enum":["amqp","coap","lora","loop","mqtt","mqtt-sn","nats","NMEA-0183","orbcomm","satellite","semtech","stomp","ws","mavlink","extension","n2k","canaerospace"]},"proxyProtocol":{"type":"boolean","description":"Enable support for the PROXY protocol (v1/v2) on incoming connections","example":false,"default":false},"remoteAuthConfig":{"$ref":"#/components/schemas/ConnectionAuthConfigDTO"},"messageDefaults":{"$ref":"#/components/schemas/MessageOverrideDTO"}},"additionalProperties":true,"description":"Abstract base class for all protocol configurations","discriminator":{"propertyName":"type","mapping":{"amqp":"#/components/schemas/AmqpConfigDTO","coap":"#/components/schemas/CoapConfigDTO","lora":"#/components/schemas/LoRaProtocolConfigDTO","mqtt":"#/components/schemas/MqttConfigDTO","mqtt-v3":"#/components/schemas/MqttConfigDTO","mqtt-v5":"#/components/schemas/MqttConfigDTO","mavlink":"#/components/schemas/MavlinkConfigDTO","mqtt-sn":"#/components/schemas/MqttSnConfigDTO","mqttV5":"#/components/schemas/MqttConfigDTO","NMEA-0183":"#/components/schemas/NmeaConfigDTO","satellite":"#/components/schemas/SatelliteConfigDTO","orbcomm":"#/components/schemas/StoGiConfigDTO","semtech":"#/components/schemas/SemtechConfigDTO","stomp":"#/components/schemas/StompConfigDTO","ws":"#/components/schemas/WebSocketConfigDTO","nats":"#/components/schemas/NatsConfigDTO","extension":"#/components/schemas/ExtensionConfigDTO","n2k":"#/components/schemas/N2KConfigDTO","canaerospace":"#/components/schemas/CanAerospaceConfigDTO"}}},"RepositoryConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Repository type discriminator","example":"file","enum":["simple","file","maps"]}},"description":"Repository-specific configuration object. Concrete schema is selected by the 'type' discriminator.","example":"file","oneOf":[{"$ref":"#/components/schemas/SimpleRepositoryConfigDTO"},{"$ref":"#/components/schemas/FileRepositoryConfigDTO"},{"$ref":"#/components/schemas/MapsRepositoryConfigDTO"}]},"RestApiManagerConfigDTO":{"required":["cacheCleanup","cacheLifetime","enableAuthentication","enableCache","enableDestinationManagement","enableInterfaceManagement","enableSchemaManagement","enableSwagger","enableSwaggerUI","enableUserManagement","enableWadlEndPoint","enabled","hostnames","port","schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"enabled":{"type":"boolean","description":"Indicates if REST API is enabled","example":true,"default":true},"enableAuthentication":{"type":"boolean","description":"Enables authentication for REST API endpoints","example":true,"default":true},"hostnames":{"pattern":"^\\s*[^,\\s][^,]*\\s*(?:,\\s*[^,\\s][^,]*\\s*)*$","type":"string","description":"Comma-separated list of hostnames or IP addresses to bind to. Whitespace around commas is ignored.","example":"0.0.0.0, ::","default":"0.0.0.0"},"port":{"maximum":65535,"minimum":1,"type":"integer","description":"Port for the REST API","format":"int32","example":8080,"default":8080},"enableCache":{"type":"boolean","description":"Enable caching of REST responses","example":true,"default":true},"minThreads":{"maximum":1000,"minimum":1,"type":"integer","description":"Minimum number of network threads","format":"int32","nullable":true,"example":2,"default":2},"maxThreads":{"maximum":1000,"minimum":1,"type":"integer","description":"Maximum number of network threads","format":"int32","nullable":true,"example":5,"default":5},"threadQueueLimit":{"maximum":1000,"minimum":10,"type":"integer","description":"Thread queue limit (maximum queued tasks)","format":"int32","nullable":true,"example":100,"default":100},"selectorThreads":{"maximum":1000,"minimum":1,"type":"integer","description":"Selector thread count","format":"int32","nullable":true,"example":2,"default":2},"maxEventsPerDestination":{"maximum":1000,"minimum":1,"type":"integer","description":"Maximum outstanding events per destination","format":"int32","nullable":true,"example":10,"default":10},"cacheLifetime":{"maximum":600000,"minimum":1000,"type":"integer","description":"Cache element lifetime in milliseconds","format":"int64","example":60000,"default":60000},"cacheCleanup":{"maximum":600000,"minimum":1000,"type":"integer","description":"Cache cleanup interval in milliseconds","format":"int64","example":5000,"default":5000},"inactiveTimeout":{"maximum":600000,"minimum":60000,"type":"integer","description":"Session inactive timeout in milliseconds","format":"int32","nullable":true,"example":180000,"default":180000},"enableWadlEndPoint":{"type":"boolean","description":"If set, enables the /application.wadl endpoint","example":false,"default":false},"enableSwagger":{"type":"boolean","description":"Enables Swagger/OpenAPI documentation endpoints","example":true,"default":true},"enableSwaggerUI":{"type":"boolean","description":"Enables Swagger UI","example":true,"default":true},"enableUserManagement":{"type":"boolean","description":"Enables User Management features","example":true,"default":true},"enableSchemaManagement":{"type":"boolean","description":"Enables Schema Management features","example":true,"default":true},"enableInterfaceManagement":{"type":"boolean","description":"Enables Interface Management features","example":true,"default":true},"enableDestinationManagement":{"type":"boolean","description":"Enables Destination Management features","example":true,"default":true},"tlsConfig":{"$ref":"#/components/schemas/TlsConfig"},"staticConfig":{"$ref":"#/components/schemas/StaticConfig"},"corsHeaders":{"$ref":"#/components/schemas/CorsHeaders"},"simpleName":{"type":"string"}},"description":"Rest API Configuration DTO"},"RoutingManagerConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"enabled":{"type":"boolean","description":"Enables routing management","example":true,"default":false},"autoDiscovery":{"type":"boolean","description":"Enables auto-discovery of servers","example":true,"default":false},"predefinedServers":{"type":"array","description":"List of predefined server configurations","example":[],"items":{"$ref":"#/components/schemas/PredefinedServerConfigDTO"}},"simpleName":{"type":"string"}},"description":"Routing Manager Configuration DTO"},"S3Config":{"required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"region":{"type":"string","description":"AWS region or compatible region name","example":"ap-southeast-2"},"prefix":{"type":"string","description":"prefix to add to the model in the S3 bucket","example":"/maps_ml_store/"},"accessKey":{"type":"string","description":"Access key for S3 authentication","example":"AKIAIOSFODNN7EXAMPLE"},"secretKey":{"type":"string","description":"Secret key for S3 authentication","example":"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"},"bucket":{"type":"string","description":"S3 bucket name to store models","example":"maps-model-store"},"endpoint":{"type":"string","description":"Optional custom endpoint for S3-compatible services like MinIO","example":"https://minio.local:9000"},"compression":{"type":"boolean","description":"Enable S3 compression for uploaded data","default":false}},"description":"S3 configuration for the model store"},"SaslConfigDTO":{"title":"SASL Configuration DTO","required":["identityProvider","mechanism","realmName","schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"realmName":{"type":"string","description":"The realm name used for SASL authentication","example":"example-realm"},"mechanism":{"type":"string","description":"The SASL mechanism, such as PLAIN or SCRAM-SHA-256","example":"PLAIN"},"identityProvider":{"type":"string","description":"The identity provider for SASL","example":"authProvider123"},"saslEntries":{"type":"object","additionalProperties":true,"description":"Additional SASL entries as key-value pairs","nullable":true,"example":{"entry1":"value1"}}},"description":"Represents the configuration for SASL authentication used for REST communication.","nullable":true},"SatelliteConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","type"],"type":"object","description":"Base Satellite Configuration DTO","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"incomingMessagePollInterval":{"type":"integer","description":"Time in seconds to poll the modem for incoming messages","format":"int32","example":15,"default":10},"outgoingMessagePollInterval":{"type":"integer","description":"Time in seconds to poll for outgoing messages","format":"int32","example":60,"default":60},"maxBufferSize":{"type":"integer","description":"maximum buffer size allowed by the satellite communications","format":"int32","example":4000,"default":4000},"compressionCutoffSize":{"type":"integer","description":"minimum sized buffer that will be compressed","format":"int32","example":512,"default":128},"messageLifeTimeInMinutes":{"type":"integer","description":"life time of message in minutes","format":"int32","example":5,"default":10},"sharedSecret":{"type":"string","description":"Shared secret for encryption","example":"this is a shared secret"},"sendHighPriorityMessages":{"type":"boolean","description":"If set, then high priority messages will NOT be queued, will incur additional charges","example":false,"default":false},"sinNumber":{"type":"integer","description":"The SIN number that maps should use, must be greater then 128","format":"int32","example":147,"default":147},"baseUrl":{"type":"string","description":"URL of the server"},"httpRequestTimeout":{"type":"integer","description":"HTTP Request time out in seconds","format":"int32"},"maxInflightEventsPerDevice":{"type":"integer","description":"Max number of events to be in flight per each modems","format":"int32"},"commonInboundPublishRoot":{"type":"string","description":"Topic template for publishing decoded common (SIN < 127) inbound messages (after parsing SIN/MIN).","example":"/{deviceId}/common/in/{sin}/{min}","default":"/{deviceId}/common/in/{sin}/{min}"},"commonOutboundPublishRoot":{"type":"string","description":"Topic root for accepting outbound common (SIN < 127) messages to be encoded and sent to the modem. Wildcards are allowed.","example":"/{deviceId}/common/out/#","default":"/{deviceId}/common/out/#"},"mapsInboundPublishRoot":{"type":"string","description":"Topic template for publishing decoded MAPS (SIN 147) inbound messages into a namespace tree (after parsing).","example":"/{deviceId}/maps/in","default":"/{deviceId}/maps/in"},"mapsOutboundPublishRoot":{"type":"string","description":"Topic template for accepting outbound MAPS (SIN 147) messages from a namespace tree to be encoded and sent to the modem.","example":"/{deviceId}/maps/out","default":"/{deviceId}/maps/out"},"outboundBroadcast":{"type":"string","description":"Topic used to broadcast a message to all modems/clients (encoded and sent to each).","example":"/inmarsat/broadcast","default":"/inmarsat/broadcast"},"mailboxId":{"type":"string","description":"Mailbox ID"},"mailboxPassword":{"type":"string","description":"Mailbox password"},"deviceInfoUpdateMinutes":{"type":"integer","description":"Device Info update time in minutes","format":"int32"}}}]},"SatelliteEndPointDTO":{"required":["schemaLoadingVersion","type"],"type":"object","allOf":[{"$ref":"#/components/schemas/EndPointConfigDTO"}]},"SchemaImportLocationDTO":{"title":"Schema Import Location","required":["format","name","path"],"type":"object","properties":{"name":{"type":"string","description":"Name to apply to the schema when loaded","example":"protobuf_schema_1"},"path":{"type":"string","description":"Directory path containing schema files","example":"/opt/schema/protobuf"},"format":{"type":"string","description":"Schema format contained in the directory","example":"protobuf","enum":["protobuf","json"]}},"description":"Defines a directory path and the schema format to load from that directory","nullable":true},"SchemaManagerConfigDTO":{"title":"Schema Manager config","required":["repositoryConfig","schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"repositoryConfig":{"$ref":"#/components/schemas/RepositoryConfigDTO"},"protocPath":{"type":"string","description":"Optional path to the protoc compiler executable. If not supplied the system PATH will be used.","nullable":true,"example":"/usr/local/bin/protoc"},"importLocations":{"type":"array","description":"List of directories that are scanned for schema source files such as protobuf or JSON schemas. These schemas are loaded and exposed as built-in or well-known schemas.","nullable":true,"items":{"$ref":"#/components/schemas/SchemaImportLocationDTO"}},"parseMode":{"type":"string","description":"Defines how schema parsing errors are handled. IGNORE keeps current behaviour and suppresses parse errors, STRICT throws an error.","example":"IGNORE","enum":["IGNORE","STRICT"],"default":"IGNORE"},"simpleName":{"type":"string"}},"description":"Configures the schema manager on where it can find and store schemas"},"SecurityManagerDTO":{"title":"Security Manager","required":["map","schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"map":{"title":"Mapping","type":"object","additionalProperties":true,"description":"Map of auth configuration name (key) to JAAS configuration name (value). If authName is blank, the value for key \"default\" is used.","example":{"default":"PublicAuthConfig","Default":"PublicAuthConfig"}},"simpleName":{"type":"string"}},"description":"Mapping between auth config names and JAAS configuration names"},"SemtechConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","type"],"type":"object","description":"Semtech Protocol Configuration DTO","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"maxQueued":{"type":"integer","description":"Maximum queue size for Semtech outbound messages per gateway","format":"int32","example":10},"inboundTopicName":{"type":"string","description":"Inbound topic name for Semtech messages","example":"/semtech/inbound/{gatewayId}"},"outboundTopicName":{"type":"string","description":"Outbound topic name for Semtech messages","example":"/semtech/outbound/{gatewayId}"},"telemetryTopicName":{"type":"string","description":"Telemetry data from the gateway (Semtech stat packet)","example":"/semtech/telemetry/{gatewayId}"},"statusTopicName":{"type":"string","description":"Link status for the gateway (Maps internal state changes only)","example":"/semtech/status/{gatewayId}"},"transmitDefaults":{"$ref":"#/components/schemas/SemtechTransmitDefaultsDTO"}}}]},"SemtechTransmitDefaultsDTO":{"type":"object","properties":{"imme":{"type":"boolean","description":"Transmit immediately (no scheduling)","example":true},"freq":{"type":"number","description":"Transmit frequency in MHz","format":"double","example":866.349812},"rfch":{"type":"integer","description":"RF chain to use","format":"int32","example":0},"powe":{"type":"integer","description":"Transmit power in dBm","format":"int32","example":14},"modu":{"type":"string","description":"Modulation (LORA or FSK)","example":"LORA"},"datr":{"type":"string","description":"LoRa datarate string (e.g., SF7BW125). For Semtech packet forwarder, datr is a string.","example":"SF7BW125"},"codr":{"type":"string","description":"LoRa coding rate (e.g., 4/5)","example":"4/5"},"ipol":{"type":"boolean","description":"Invert polarization (recommended true for LoRaWAN downlinks)","example":true}},"description":"Default transmit parameters for Semtech PULL_RESP (txpk) when outbound payload is not already Semtech JSON."},"SerialBusConfigDTO":{"required":["devices","enabled","name","schemaLoadingVersion","topicNameTemplate","trigger"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"enabled":{"type":"boolean","description":"Indicates if the device bus is enabled","example":true,"default":false},"topicNameTemplate":{"pattern":"^/(?:[^/+#]+|\\+)(?:/(?:[^/+#]+|\\+))*?(?:/#)?$\n","type":"string","description":"Template for the topic name","example":"/folder/+/folder/topic"},"autoScan":{"type":"boolean","description":"Specifies if auto-scan is enabled","nullable":true,"example":false,"default":false},"scanTime":{"maximum":600000,"minimum":1000,"type":"integer","description":"1-wire bus Scan time interval in milliseconds","format":"int32","nullable":true,"example":30000,"default":60000},"filter":{"type":"string","description":"Filters raw value; depending on filter type will only send if there is a change or every trigger","example":"ON_CHANGE","enum":["ALWAYS_SEND","ON_CHANGE"],"default":"ON_CHANGE"},"selector":{"type":"string","description":"JMS selector configuration for the device bus","nullable":true,"example":"temperature > 45 AND humidity > 30"},"name":{"type":"string","description":"Name of the block configuation","example":"USB-485-to-232-unit-A"},"devices":{"type":"array","description":"List of Serial devices devices on this bus","items":{"$ref":"#/components/schemas/SerialBusDeviceDTO"}},"trigger":{"type":"string","description":"Trigger mechanism for OneWire bus","example":"temperatureTrigger"}},"description":"Serial Device Bus Configuration DTO","nullable":true},"SerialBusDeviceDTO":{"required":["enabled","name","readTimeOut","schemaLoadingVersion","serialConfig","topicNameTemplate"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"enabled":{"type":"boolean","description":"Indicates if the device bus is enabled","example":true,"default":false},"topicNameTemplate":{"pattern":"^/(?:[^/+#]+|\\+)(?:/(?:[^/+#]+|\\+))*?(?:/#)?$\n","type":"string","description":"Template for the topic name","example":"/folder/+/folder/topic"},"autoScan":{"type":"boolean","description":"Specifies if auto-scan is enabled","nullable":true,"example":false,"default":false},"scanTime":{"maximum":600000,"minimum":1000,"type":"integer","description":"1-wire bus Scan time interval in milliseconds","format":"int32","nullable":true,"example":30000,"default":60000},"filter":{"type":"string","description":"Filters raw value; depending on filter type will only send if there is a change or every trigger","example":"ON_CHANGE","enum":["ALWAYS_SEND","ON_CHANGE"],"default":"ON_CHANGE"},"selector":{"type":"string","description":"JMS selector configuration for the device bus","nullable":true,"example":"temperature > 45 AND humidity > 30"},"name":{"type":"string","description":"Name of the Serial Device","example":"SEN0640"},"serialConfig":{"$ref":"#/components/schemas/SerialDeviceDTO"},"readTimeOut":{"maximum":600000,"minimum":1000,"type":"integer","description":"Read timeout in milliseconds","format":"int32","example":60000},"writeTimeOut":{"maximum":600000,"minimum":1000,"type":"integer","description":"Write timeout in milliseconds","format":"int32","example":60000,"default":60000}},"description":"Serial Bus Configuration DTO"},"SerialConfigDTO":{"required":["schemaLoadingVersion","serialDevice","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Type of the endpoint","example":"tcp","enum":["tcp","ssl","udp","dtls","loraDevice","loraSerial","serial","satellite","canbus"]},"discoverable":{"type":"boolean","description":"Whether the endpoint is discoverable","example":false,"default":false},"selectorThreadCount":{"maximum":10000,"minimum":1,"type":"integer","description":"Number of selector threads","format":"int32","nullable":true,"example":2,"default":2},"serverReadBufferSize":{"maximum":104857600,"minimum":1024,"type":"integer","description":"Server read buffer size in bytes","format":"int64","example":10240,"default":10240},"serverWriteBufferSize":{"maximum":104857600,"minimum":1024,"type":"integer","description":"Server write buffer size in bytes","format":"int64","example":10240},"proxyProtocolMode":{"type":"string","description":"Proxy Protocol support mode. 'ENABLED' allows but doesn't require it, 'REQUIRED' enforces it, 'DISABLED' will NOT check for incoming PROXY requests.","nullable":true,"example":"REQUIRED","enum":["ENABLED","DISABLED","REQUIRED"],"default":"DISABLED"},"allowedProxyHosts":{"pattern":"^(?:\\s*[^,\\s][^,]*\\s*(?:,\\s*[^,\\s][^,]*\\s*)*)?$","type":"string","description":"Comma-separated list of allowed proxy source addresses. Supports hostnames, IPv4/IPv6 addresses, and CIDR blocks (e.g., 192.168.0.0/24, ::1, example.com).","nullable":true,"example":"example.com, localhost, 192.168.1.10, [2001:db8::1]"},"connectionTimeout":{"maximum":120000,"minimum":1000,"type":"integer","description":"Time to wait for a client to establish the connection, in milliseconds","format":"int64","example":5000},"serialDevice":{"$ref":"#/components/schemas/SerialDeviceDTO"}},"description":"Serial Configuration DTO"},"SerialDeviceDTO":{"required":["baudRate","dataBits","flowControl","parity","port","readTimeOut","schemaLoadingVersion","stopBits"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"serialNo":{"type":"string","description":"Serial number for the device, optional","nullable":true,"example":"262144"},"port":{"type":"string","description":"Serial port name","example":"/dev/ttyS0"},"baudRate":{"type":"integer","description":"Baud rate for the serial connection","format":"int32","example":9600,"enum":[110,300,600,1200,2400,4800,9600,14400,19200,28800,38400,57600,115200,230400,460800,921600]},"dataBits":{"type":"integer","description":"Number of data bits in the serial connection","format":"int32","example":8,"enum":[5,6,7,8]},"stopBits":{"type":"number","description":"Number of stop bits in the serial connection","format":"float","example":1,"enum":[1,1.5,2]},"parity":{"type":"string","description":"Parity setting for the serial connection","example":"n","enum":["n","o","e","m","s"]},"flowControl":{"type":"integer","description":"Flow control setting for the serial connection","format":"int32","example":1,"enum":[0,1,2,3]},"readTimeOut":{"maximum":600000,"minimum":1000,"type":"integer","description":"Read timeout in milliseconds","format":"int32","example":60000},"writeTimeOut":{"maximum":600000,"minimum":1000,"type":"integer","description":"Write timeout in milliseconds","format":"int32","example":60000,"default":60000},"bufferSize":{"maximum":1048576,"minimum":1024,"type":"integer","description":"Buffer size in bytes","format":"int32","example":262144,"default":102400}},"description":"Serial device configuration"},"SimpleRepositoryConfigDTO":{"title":"Simple Repository configuration","required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Repository type discriminator","example":"file","enum":["simple","file","maps"]}},"description":"Provides a simple Map<> instance to manage schemas, these do not survive server restarts, only useful for debug"},"SpiDeviceBusConfigDTO":{"required":["enabled","schemaLoadingVersion","topicNameTemplate"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"enabled":{"type":"boolean","description":"Indicates if the device bus is enabled","example":true,"default":false},"topicNameTemplate":{"pattern":"^/(?:[^/+#]+|\\+)(?:/(?:[^/+#]+|\\+))*?(?:/#)?$\n","type":"string","description":"Template for the topic name","example":"/folder/+/folder/topic"},"autoScan":{"type":"boolean","description":"Specifies if auto-scan is enabled","nullable":true,"example":false,"default":false},"scanTime":{"maximum":600000,"minimum":1000,"type":"integer","description":"1-wire bus Scan time interval in milliseconds","format":"int32","nullable":true,"example":30000,"default":60000},"filter":{"type":"string","description":"Filters raw value; depending on filter type will only send if there is a change or every trigger","example":"ON_CHANGE","enum":["ALWAYS_SEND","ON_CHANGE"],"default":"ON_CHANGE"},"selector":{"type":"string","description":"JMS selector configuration for the device bus","nullable":true,"example":"temperature > 45 AND humidity > 30"},"name":{"type":"string","description":"Name of the SPI bus","example":"spiBus1"},"devices":{"type":"array","description":"List of SPI devices on this bus","items":{"$ref":"#/components/schemas/SpiDeviceConfigDTO"}},"trigger":{"type":"string","description":"Trigger mechanism for OneWire bus","example":"temperatureTrigger"}},"description":"SPI Device Bus Configuration DTO","nullable":true},"SpiDeviceConfigDTO":{"required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"address":{"maximum":255,"minimum":0,"type":"integer","description":"Device address on the SPI bus","format":"int32","example":1},"name":{"type":"string","description":"Name of the SPI device","example":"TemperatureSensor"},"selector":{"type":"string","description":"Selector used for the device","example":"tempSelector"},"spiBus":{"maximum":255,"minimum":0,"type":"integer","description":"SPI bus number","format":"int32","example":0},"spiMode":{"maximum":255,"minimum":0,"type":"integer","description":"SPI mode for the device","format":"int32","example":1},"spiChipSelect":{"maximum":255,"minimum":0,"type":"integer","description":"Chip select line for the SPI device","format":"int32","example":0},"config":{"type":"object","additionalProperties":true,"description":"Configuration map"}},"description":"SPI Device Configuration DTO"},"SslConfigDTO":{"required":["clientCertificateRequired","clientCertificateWanted","context","crlInterval","schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"clientCertificateRequired":{"type":"boolean","description":"Whether a client certificate is required for connections. If true, connections without a valid client certificate will be rejected.","example":false,"default":false},"clientCertificateWanted":{"type":"boolean","description":"Whether a client certificate is requested but not required. Ignored if clientCertificateRequired is true.","example":false,"default":false},"crlUrl":{"type":"string","description":"URL for the Certificate Revocation List (CRL). If not set, CRL checking is disabled.","format":"uri","nullable":true,"example":"http://example.com/crl.pem"},"crlInterval":{"maximum":2419200000,"minimum":60000,"type":"integer","description":"Interval in milliseconds for refreshing the Certificate Revocation List (CRL)","format":"int64","example":3600000,"default":3600000},"context":{"pattern":"^TLS(?:v1\\.(?:2|3))?$","type":"string","description":"SSL context identifier or protocol profile to use (for example: TLS, TLSv1.2, TLSv1.3).","example":"TLS","default":"TLS"},"keyStore":{"$ref":"#/components/schemas/KeyStoreConfigDTO"},"trustStore":{"$ref":"#/components/schemas/KeyStoreConfigDTO"}},"description":"SSL/TLS Configuration DTO"},"StaticConfig":{"required":["enabled","schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"enabled":{"type":"boolean","description":"Enable or disable static content serving","example":true,"default":true},"directory":{"minLength":1,"type":"string","description":"Directory used to serve static content. May include environment or Maps variables such as {{MAPS_HOME}}. Required when static content serving is enabled.","nullable":true,"example":"{{MAPS_HOME}}/www"}},"description":"Static content configuration","nullable":true},"StatisticsConfigDTO":{"title":"Analytics","required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"statisticName":{"title":"name of the statistic engine to run","type":"string","description":"The number of events to process before emitting an event containing the data","example":"Advanced"},"eventCount":{"title":"Number of events","maximum":1000000,"minimum":10,"type":"integer","description":"The number of events to process before emitting an event containing the data","format":"int32","example":100},"ignoreList":{"title":"Ignore List","type":"array","description":"Lists the keys that should be ignored from the event and not part of the resultant statistics, Comma seperated","nullable":true,"example":"modelName,serialNumber","items":{"title":"Ignore List","type":"string","description":"Lists the keys that should be ignored from the event and not part of the resultant statistics, Comma seperated","nullable":true,"example":"modelName,serialNumber"}},"keyList":{"title":"Key List","type":"array","description":"Specific set of keys to use rather than auto discovery this is used to refine the keys used","nullable":true,"example":"temperature, humidity","items":{"title":"Key List","type":"string","description":"Specific set of keys to use rather than auto discovery this is used to refine the keys used","nullable":true,"example":"temperature, humidity"}}},"description":"Configures the event stream statistics analytics","nullable":true},"StoGiConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","type"],"type":"object","description":"OrbComm ST and OGi Modem Protocol Configuration DTO","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"incomingMessagePollInterval":{"type":"integer","description":"Time in seconds to poll the modem for incoming messages","format":"int32","example":15,"default":10},"outgoingMessagePollInterval":{"type":"integer","description":"Time in seconds to poll for outgoing messages","format":"int32","example":60,"default":60},"maxBufferSize":{"type":"integer","description":"maximum buffer size allowed by the satellite communications","format":"int32","example":4000,"default":4000},"compressionCutoffSize":{"type":"integer","description":"minimum sized buffer that will be compressed","format":"int32","example":512,"default":128},"messageLifeTimeInMinutes":{"type":"integer","description":"life time of message in minutes","format":"int32","example":5,"default":10},"sharedSecret":{"type":"string","description":"Shared secret for encryption","example":"this is a shared secret"},"sendHighPriorityMessages":{"type":"boolean","description":"If set, then high priority messages will NOT be queued, will incur additional charges","example":false,"default":false},"sinNumber":{"type":"integer","description":"The SIN number that maps should use, must be greater then 128","format":"int32","example":147,"default":147},"serial":{"$ref":"#/components/schemas/SerialConfigDTO"},"modemResponseTimeout":{"type":"integer","description":"Time in milliseconds to wait for a modem response","format":"int64"},"initialSetup":{"type":"string","description":"Initial modem setup string"},"locationPollInterval":{"type":"integer","description":"Time in seconds between polling modem location and statistics, 0 disables it","format":"int64","example":60,"default":0},"modemStatsTopic":{"type":"string","description":"If present, then the name of the topic to send modem statistics to","example":"/modem/stats","default":"/modem/stats"},"modemRawRequest":{"type":"string","description":"If present, then the name of the topic that will be used to send raw messages to","example":"/incoming/{sin}/{min}","default":"/incoming/{sin}/{min}"},"modemRawResponse":{"type":"string","description":"If present, then the name of the topic that will be used monitor for response and send directly to the modem","example":"/outbound","default":"/outbound"}}}]},"StompConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","type"],"type":"object","description":"STOMP Protocol Configuration DTO","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"},{"type":"object","properties":{"maxBufferSize":{"type":"integer","description":"Maximum buffer size for STOMP","format":"int32","example":65535},"maxReceive":{"type":"integer","description":"Maximum receive limit for STOMP","format":"int32","example":1000},"base64EncodeBinary":{"type":"boolean","description":"Encode the outgoing buffer as bas64 if binary","example":true}}}]},"TcpConfigDTO":{"required":["backlog","enableReadDelayOnFragmentation","fragmentationLimit","readDelayOnFragmentation","receiveBufferSize","schemaLoadingVersion","sendBufferSize","soLingerDelaySec","timeout","type"],"type":"object","additionalProperties":true,"description":"TCP Configuration DTO","allOf":[{"$ref":"#/components/schemas/EndPointConfigDTO"},{"type":"object","properties":{"receiveBufferSize":{"maximum":104857600,"minimum":1024,"type":"integer","description":"Size of the receive buffer (bytes)","format":"int32","example":128000,"default":128000},"sendBufferSize":{"maximum":104857600,"minimum":1024,"type":"integer","description":"Size of the send buffer (bytes)","format":"int32","example":128000,"default":128000},"timeout":{"maximum":3600000,"minimum":1,"type":"integer","description":"Connection timeout in milliseconds","format":"int32","example":60000,"default":60000},"backlog":{"maximum":10000,"minimum":10,"type":"integer","description":"Backlog for TCP connections","format":"int32","example":100,"default":100},"soLingerDelaySec":{"maximum":60,"minimum":0,"type":"integer","description":"SO_LINGER delay in seconds (0 disables linger)","format":"int32","example":10,"default":10},"readDelayOnFragmentation":{"maximum":1000,"minimum":1,"type":"integer","description":"Read delay in milliseconds when fragmentation is detected","format":"int32","example":100,"default":100},"fragmentationLimit":{"maximum":100,"minimum":2,"type":"integer","description":"Maximum allowed fragmentation before applying backoff logic","format":"int32","example":5,"default":5},"enableReadDelayOnFragmentation":{"type":"boolean","description":"Enable read delay on fragmentation","example":true,"default":true}}}]},"TenantConfigDTO":{"required":["name","namespaceRoot","schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"name":{"type":"string","description":"Name of the tenant","example":"TenantA"},"namespaceRoot":{"type":"string","description":"Root namespace for the tenant","example":"com.tenant.namespace"},"scope":{"type":"string","description":"Scope of the tenant","example":"global","default":"global"}},"description":"Tenant Configuration DTO","nullable":true},"TenantManagementConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"tenantConfigList":{"required":["name","namespaceRoot","schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"name":{"type":"string","description":"Name of the tenant","example":"TenantA"},"namespaceRoot":{"type":"string","description":"Root namespace for the tenant","example":"com.tenant.namespace"},"scope":{"type":"string","description":"Scope of the tenant","example":"global","default":"global"}},"description":"Tenant Configuration DTO","nullable":true},"simpleName":{"type":"string"}},"description":"Tenant Management Configuration DTO"},"TlsConfig":{"required":["backlog","enableReadDelayOnFragmentation","fragmentationLimit","readDelayOnFragmentation","receiveBufferSize","schemaLoadingVersion","sendBufferSize","soLingerDelaySec","sslConfig","timeout","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Type of the endpoint","example":"tcp","enum":["tcp","ssl","udp","dtls","loraDevice","loraSerial","serial","satellite","canbus"]},"discoverable":{"type":"boolean","description":"Whether the endpoint is discoverable","example":false,"default":false},"selectorThreadCount":{"maximum":10000,"minimum":1,"type":"integer","description":"Number of selector threads","format":"int32","nullable":true,"example":2,"default":2},"serverReadBufferSize":{"maximum":104857600,"minimum":1024,"type":"integer","description":"Server read buffer size in bytes","format":"int64","example":10240,"default":10240},"serverWriteBufferSize":{"maximum":104857600,"minimum":1024,"type":"integer","description":"Server write buffer size in bytes","format":"int64","example":10240},"proxyProtocolMode":{"type":"string","description":"Proxy Protocol support mode. 'ENABLED' allows but doesn't require it, 'REQUIRED' enforces it, 'DISABLED' will NOT check for incoming PROXY requests.","nullable":true,"example":"REQUIRED","enum":["ENABLED","DISABLED","REQUIRED"],"default":"DISABLED"},"allowedProxyHosts":{"pattern":"^(?:\\s*[^,\\s][^,]*\\s*(?:,\\s*[^,\\s][^,]*\\s*)*)?$","type":"string","description":"Comma-separated list of allowed proxy source addresses. Supports hostnames, IPv4/IPv6 addresses, and CIDR blocks (e.g., 192.168.0.0/24, ::1, example.com).","nullable":true,"example":"example.com, localhost, 192.168.1.10, [2001:db8::1]"},"connectionTimeout":{"maximum":120000,"minimum":1000,"type":"integer","description":"Time to wait for a client to establish the connection, in milliseconds","format":"int64","example":5000},"receiveBufferSize":{"maximum":104857600,"minimum":1024,"type":"integer","description":"Size of the receive buffer (bytes)","format":"int32","example":128000,"default":128000},"sendBufferSize":{"maximum":104857600,"minimum":1024,"type":"integer","description":"Size of the send buffer (bytes)","format":"int32","example":128000,"default":128000},"timeout":{"maximum":3600000,"minimum":1,"type":"integer","description":"Connection timeout in milliseconds","format":"int32","example":60000,"default":60000},"backlog":{"maximum":10000,"minimum":10,"type":"integer","description":"Backlog for TCP connections","format":"int32","example":100,"default":100},"soLingerDelaySec":{"maximum":60,"minimum":0,"type":"integer","description":"SO_LINGER delay in seconds (0 disables linger)","format":"int32","example":10,"default":10},"readDelayOnFragmentation":{"maximum":1000,"minimum":1,"type":"integer","description":"Read delay in milliseconds when fragmentation is detected","format":"int32","example":100,"default":100},"fragmentationLimit":{"maximum":100,"minimum":2,"type":"integer","description":"Maximum allowed fragmentation before applying backoff logic","format":"int32","example":5,"default":5},"enableReadDelayOnFragmentation":{"type":"boolean","description":"Enable read delay on fragmentation","example":true,"default":true},"sslConfig":{"$ref":"#/components/schemas/SslConfigDTO"}},"description":"TLS configuration","nullable":true},"TlsConfigDTO":{"required":["backlog","enableReadDelayOnFragmentation","fragmentationLimit","readDelayOnFragmentation","receiveBufferSize","schemaLoadingVersion","sendBufferSize","soLingerDelaySec","sslConfig","timeout","type"],"type":"object","description":"TLS Configuration DTO","allOf":[{"$ref":"#/components/schemas/EndPointConfigDTO"},{"type":"object","properties":{"receiveBufferSize":{"maximum":104857600,"minimum":1024,"type":"integer","description":"Size of the receive buffer (bytes)","format":"int32","example":128000,"default":128000},"sendBufferSize":{"maximum":104857600,"minimum":1024,"type":"integer","description":"Size of the send buffer (bytes)","format":"int32","example":128000,"default":128000},"timeout":{"maximum":3600000,"minimum":1,"type":"integer","description":"Connection timeout in milliseconds","format":"int32","example":60000,"default":60000},"backlog":{"maximum":10000,"minimum":10,"type":"integer","description":"Backlog for TCP connections","format":"int32","example":100,"default":100},"soLingerDelaySec":{"maximum":60,"minimum":0,"type":"integer","description":"SO_LINGER delay in seconds (0 disables linger)","format":"int32","example":10,"default":10},"readDelayOnFragmentation":{"maximum":1000,"minimum":1,"type":"integer","description":"Read delay in milliseconds when fragmentation is detected","format":"int32","example":100,"default":100},"fragmentationLimit":{"maximum":100,"minimum":2,"type":"integer","description":"Maximum allowed fragmentation before applying backoff logic","format":"int32","example":5,"default":5},"enableReadDelayOnFragmentation":{"type":"boolean","description":"Enable read delay on fragmentation","example":true,"default":true},"sslConfig":{"$ref":"#/components/schemas/SslConfigDTO"}}}]},"TransformationConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Type of transformation configuration. All values are lower-case and hyphen-separated.","example":"jsontoxml","enum":["CLOUD_EVENT_JSON","CLOUD_EVENT_NATIVE","CLOUD_EVENT_ENVELOPE","JSON_TO_XML","XML_TO_JSON","JSON_TO_VALUE","JSON_QUERY","GEOHASH","SCHEMA_TO_JSON","JSON_MUTATE","JSON_TO_SCHEMA"]}},"additionalProperties":true,"description":"Abstract base class for all transformation configurations","nullable":true,"example":[{"name":"JsonQuery","parameters":{"query":"[\"object\",{\"latitude\":[\"divide\",[\"get\",\"payload\",\"decoded\",\"lat\"],10000000]}]"}}],"discriminator":{"propertyName":"type","mapping":{"jsontoxml":"#/components/schemas/JsonToXmlTransformationDTO","xmltojson":"#/components/schemas/XmlToJsonTransformationDTO","jsontoschema":"#/components/schemas/JsonToSchemaTransformationDTO","jsontovalue":"#/components/schemas/JsonToValueTransformationDTO","jsonquery":"#/components/schemas/JsonQueryTransformationDTO","geohash":"#/components/schemas/GeoHashResolverTransformationDTO","jsonmutate":"#/components/schemas/JsonMutateTransformationDTO","cloudevent-envelope":"#/components/schemas/CloudEventEnvelopeTransformationDTO","cloudevent-json":"#/components/schemas/CloudEventJsonTransformationDTO","cloudevent-native":"#/components/schemas/CloudEventNativeTransformationDTO"}}},"TwinManagerConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"type":{"type":"string","description":"Discriminator for the concrete configuration manager DTO.","readOnly":true,"example":"AuthManagerConfig"},"heartbeatTimeoutMillis":{"maximum":600000,"minimum":1,"type":"integer","description":"Time in milliseconds after which a twin is considered disconnected if no updates are received.","format":"int64","example":5000,"default":5000},"staleTimeoutMillis":{"maximum":600000,"minimum":1,"type":"integer","description":"Time in milliseconds after which a twin is considered stale if no updates are received.","format":"int64","example":10000,"default":10000},"retentionTimeoutMillis":{"maximum":86400000,"minimum":0,"type":"integer","description":"Time in milliseconds after which a twin is eligible for removal from memory.","format":"int64","example":300000,"default":300000},"removeExpiredTwins":{"type":"boolean","description":"If true, twins that exceed the retention timeout will be removed from memory.","example":false,"default":false},"defaultRootPath":{"type":"string","description":"Default root path used when constructing twin hierarchical paths.","example":"/","default":"/"},"simpleName":{"type":"string"}},"description":"State/Twin Manager Configuration DTO"},"UdpConfigDTO":{"required":["schemaLoadingVersion","type"],"type":"object","description":"UDP Configuration DTO","allOf":[{"$ref":"#/components/schemas/EndPointConfigDTO"},{"type":"object","properties":{"packetReuseTimeout":{"maximum":60000,"minimum":10,"type":"integer","description":"Timeout for reusing packets, in milliseconds","format":"int64","example":1000},"idleSessionTimeout":{"maximum":1200,"minimum":60,"type":"integer","description":"Idle session timeout duration, in seconds","format":"int64","example":600},"hmacHostLookupCacheExpiry":{"maximum":1200,"minimum":10,"type":"integer","description":"Expiry time for HMAC host lookup cache, in seconds","format":"int64","example":600},"hmacConfigList":{"type":"array","description":"List of HMAC configurations for nodes","items":{"$ref":"#/components/schemas/HmacConfigDTO"}}}}]},"WebSocketConfigDTO":{"required":["proxyProtocol","schemaLoadingVersion","type"],"type":"object","description":"WebSocket Protocol Configuration DTO","allOf":[{"$ref":"#/components/schemas/ProtocolConfigDTO"}]},"XmlToJsonTransformationDTO":{"required":["schemaLoadingVersion","type"],"type":"object","description":"Transformation DTO that converts XML payloads into JSON.","allOf":[{"$ref":"#/components/schemas/TransformationConfigDTO"}]},"EndPointSummaryDTO":{"title":"End Point Information","required":["adapter","bytesRead","bytesWritten","connectedTimeMs","id","lastRead","lastWrite","name","overFlow","protocolName","protocolVersion","totalBytesRead","totalBytesWritten","totalOverflow","totalUnderflow","underFlow"],"type":"object","properties":{"id":{"maximum":9223372036854775807,"minimum":1,"type":"integer","description":"Unique identifier for the endpoint.","format":"int64","example":12345},"adapter":{"maxLength":64,"minLength":1,"type":"string","description":"Adapter name or type associated with this endpoint (implementation-specific).","example":"tcp"},"name":{"maxLength":128,"minLength":1,"type":"string","description":"Name assigned to the endpoint.","example":"sensor-gateway-01"},"user":{"maxLength":128,"minLength":1,"type":"string","description":"Username associated with the endpoint, if authenticated.","nullable":true,"example":"matthew"},"protocolName":{"maxLength":32,"minLength":1,"type":"string","description":"Name of the protocol used by the endpoint.","example":"mqtt"},"protocolVersion":{"maxLength":32,"minLength":1,"type":"string","description":"Version of the protocol used by the endpoint.","example":"5.0"},"proxyAddress":{"maxLength":255,"type":"string","description":"Proxy address used to connect the endpoint, if any. Typically an IP or hostname, optionally with port.","nullable":true,"example":"203.0.113.10:3128"},"connectedTimeMs":{"maximum":253402300799999,"minimum":0,"type":"integer","description":"Connection start time in milliseconds since epoch.","format":"int64","example":1738891200000},"lastRead":{"maximum":253402300799999,"minimum":0,"type":"integer","description":"Timestamp of the last read operation in milliseconds since epoch.","format":"int64","example":1738891265123},"lastWrite":{"maximum":253402300799999,"minimum":0,"type":"integer","description":"Timestamp of the last write operation in milliseconds since epoch.","format":"int64","example":1738891268456},"totalBytesRead":{"maximum":9223372036854775807,"minimum":0,"type":"integer","description":"Total bytes read by the endpoint since connection start.","format":"int64","example":987654321},"totalBytesWritten":{"maximum":9223372036854775807,"minimum":0,"type":"integer","description":"Total bytes written by the endpoint since connection start.","format":"int64","example":123456789},"totalOverflow":{"maximum":9223372036854775807,"minimum":0,"type":"integer","description":"Total number of buffer overflows since connection start.","format":"int64","example":0},"totalUnderflow":{"maximum":9223372036854775807,"minimum":0,"type":"integer","description":"Total number of buffer underflows since connection start.","format":"int64","example":2},"bytesRead":{"maximum":9223372036854775807,"minimum":0,"type":"integer","description":"Bytes read in the current statistics interval (interval length is server-defined).","format":"int64","example":4096},"bytesWritten":{"maximum":9223372036854775807,"minimum":0,"type":"integer","description":"Bytes written in the current statistics interval (interval length is server-defined).","format":"int64","example":1024},"overFlow":{"maximum":9223372036854775807,"minimum":0,"type":"integer","description":"Buffer overflow count in the current statistics interval.","format":"int64","example":0},"underFlow":{"maximum":9223372036854775807,"minimum":0,"type":"integer","description":"Buffer underflow count in the current statistics interval.","format":"int64","example":0}},"description":"Provides overview information about the end point, including identity, protocol details, connection timestamps, and traffic/buffer statistics."},"AmqpProtocolInformation":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProtocolInformationDTO"},{"type":"object","properties":{"sessionInfoList":{"type":"array","items":{"$ref":"#/components/schemas/SessionInformationDTO"}}}}]},"CoapProtocolInformation":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProtocolInformationDTO"},{"type":"object","properties":{"sessionInfo":{"$ref":"#/components/schemas/SessionInformationDTO"}}}]},"EndPointDetailsDTO":{"title":"End Point Information","type":"object","properties":{"endPointSummary":{"$ref":"#/components/schemas/EndPointSummaryDTO"},"protocolInformation":{"$ref":"#/components/schemas/ProtocolInformationDTO"}},"description":"Provides detailed information about the end point"},"ExtensionProtocolInformation":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProtocolInformationDTO"},{"type":"object","properties":{"sessionInfo":{"$ref":"#/components/schemas/SessionInformationDTO"}}}]},"LoraProtocolInformation":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProtocolInformationDTO"},{"type":"object","properties":{"sessionInfo":{"$ref":"#/components/schemas/SessionInformationDTO"}}}]},"MqttProtocolInformation":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProtocolInformationDTO"},{"type":"object","properties":{"sessionInfo":{"$ref":"#/components/schemas/SessionInformationDTO"}}}]},"MqttSnProtocolInformation":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProtocolInformationDTO"},{"type":"object","properties":{"sessionInfo":{"$ref":"#/components/schemas/SessionInformationDTO"}}}]},"MqttV5ProtocolInformation":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProtocolInformationDTO"},{"type":"object","properties":{"sessionInfo":{"$ref":"#/components/schemas/SessionInformationDTO"}}}]},"N2kProtocolInformation":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProtocolInformationDTO"},{"type":"object","properties":{"sessionInfo":{"$ref":"#/components/schemas/SessionInformationDTO"}}}]},"NmeaProtocolInformation":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProtocolInformationDTO"},{"type":"object","properties":{"sessionInfo":{"$ref":"#/components/schemas/SessionInformationDTO"}}}]},"ProtocolInformationDTO":{"title":"Protocol Information","required":["type"],"type":"object","properties":{"type":{"type":"string","description":"Type of the protocol","enum":["amqp","coap","lora","mqtt","mqtt-sn","mqttV5","NMEA-0183","semtech","stomp","rest","extension","orbcomm","mavlink","n2k","satellite"]},"sessionId":{"type":"string","description":"Unique identifier of the session","example":"session-12345"},"timeout":{"type":"integer","description":"Timeout in milliseconds before the protocol session is considered inactive","format":"int64","example":30000},"keepAlive":{"type":"integer","description":"Keep-alive interval in milliseconds for protocol connections","format":"int64","example":15000},"messageTransformationName":{"type":"string","description":"Name of the message transformation applied to this protocol","example":"default-transformation"},"selectorMapping":{"type":"object","additionalProperties":{"type":"string","description":"Mapping of selectors to protocol-specific expressions","example":"{\"temperature\":\"> 20\",\"status\":\"active\"}"},"description":"Mapping of selectors to protocol-specific expressions","example":{"temperature":"> 20","status":"active"}},"destinationTransformationMapping":{"type":"object","additionalProperties":{"type":"string","description":"Mapping of destinations to transformation names","example":"{\"alerts\":\"alert-transform\",\"telemetry\":\"telemetry-transform\"}"},"description":"Mapping of destinations to transformation names","example":{"alerts":"alert-transform","telemetry":"telemetry-transform"}}},"description":"Provides detailed information about the protocol and session","discriminator":{"propertyName":"type","mapping":{"amqp":"#/components/schemas/AmqpProtocolInformation","coap":"#/components/schemas/CoapProtocolInformation","lora":"#/components/schemas/LoraProtocolInformation","mqtt":"#/components/schemas/MqttProtocolInformation","mqtt-sn":"#/components/schemas/MqttSnProtocolInformation","mqttV5":"#/components/schemas/MqttV5ProtocolInformation","NMEA-0183":"#/components/schemas/NmeaProtocolInformation","semtech":"#/components/schemas/SemtechProtocolInformation","stomp":"#/components/schemas/StompProtocolInformation","rest":"#/components/schemas/RestProtocolInformation","extension":"#/components/schemas/ExtensionProtocolInformation","orbcomm":"#/components/schemas/SatelliteProtocolInformation","satellite":"#/components/schemas/SatelliteDeviceProtocolInformation","n2k":"#/components/schemas/N2kProtocolInformation"}}},"RemoteDeviceInfo":{"type":"object","properties":{"lastRegistrationUtc":{"type":"string"},"lastUpdatedUtc":{"type":"string"},"wakeUpInterval":{"type":"integer","format":"int32"},"operationModeCode":{"type":"integer","format":"int32"},"networkCode":{"type":"integer","format":"int32"},"isRegistered":{"type":"integer","format":"int32"},"uniqueId":{"type":"string"}},"description":"Information about the remote satellite device"},"RestProtocolInformation":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProtocolInformationDTO"},{"type":"object","properties":{"sessionInfo":{"$ref":"#/components/schemas/SessionInformationDTO"}}}]},"SatelliteDeviceProtocolInformation":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProtocolInformationDTO"}]},"SatelliteProtocolInformation":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProtocolInformationDTO"},{"type":"object","properties":{"sessionInfo":{"$ref":"#/components/schemas/SessionInformationDTO"},"remoteDeviceInfo":{"$ref":"#/components/schemas/RemoteDeviceInfo"},"bytesTransmitted":{"type":"integer","description":"Total number of bytes transmitted through the satellite link","format":"int64","example":1048576},"bytesReceived":{"type":"integer","description":"Total number of bytes received through the satellite link","format":"int64","example":524288},"packetsSent":{"type":"integer","description":"Total number of packets sent through the satellite link","format":"int64","example":250},"packetsReceived":{"type":"integer","description":"Total number of packets received through the satellite link","format":"int64","example":245}}}]},"SemtechProtocolInformation":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProtocolInformationDTO"},{"type":"object","properties":{"sessionInfo":{"$ref":"#/components/schemas/SessionInformationDTO"}}}]},"SessionContextDTO":{"type":"object","properties":{"id":{"type":"string"},"uniqueId":{"type":"string"},"hasWill":{"type":"boolean"},"expiry":{"type":"integer","format":"int64"},"authorized":{"type":"boolean"},"receiveMaximum":{"type":"integer","format":"int32"},"resetState":{"type":"boolean"},"persistentSession":{"type":"boolean"},"restored":{"type":"boolean"}}},"SessionInformationDTO":{"title":"End Point Information","type":"object","properties":{"sessionInfo":{"$ref":"#/components/schemas/SessionContextDTO"},"subscriptionInfo":{"$ref":"#/components/schemas/SubscriptionInformationDTO"}},"description":"Provides detailed information about the session"},"StompProtocolInformation":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProtocolInformationDTO"},{"type":"object","properties":{"sessionInfo":{"$ref":"#/components/schemas/SessionInformationDTO"}}}]},"SubscriptionContextDTO":{"type":"object","properties":{"maxAtRest":{"type":"integer","format":"int32"},"receiveMaximum":{"type":"integer","format":"int32"},"subscriptionId":{"type":"integer","format":"int64"},"destinationName":{"type":"string"},"sharedName":{"type":"string"},"selector":{"type":"string"},"alias":{"type":"string"},"acknowledgementController":{"type":"string"},"retainHandler":{"type":"string"},"qualityOfService":{"type":"string"},"creditHandler":{"type":"string"},"destinationMode":{"type":"string"},"noLocalMessages":{"type":"boolean"},"retainAsPublish":{"type":"boolean"},"allowOverlap":{"type":"boolean"},"browser":{"type":"boolean"},"sync":{"type":"boolean"}}},"SubscriptionInformationDTO":{"title":"End Point Information","type":"object","properties":{"hibernated":{"type":"boolean"},"persistent":{"type":"boolean"},"sessionId":{"type":"string"},"uniqueId":{"type":"string"},"subscriptionContextList":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionContextDTO"}},"subscriptionStateList":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionStateDTO"}}},"description":"Provides detailed information about the individual subscription"},"SubscriptionStateDTO":{"type":"object","properties":{"destinationName":{"type":"string"},"sessionId":{"type":"string"},"hibernating":{"type":"boolean"},"size":{"type":"integer","format":"int32"},"pending":{"type":"integer","format":"int32"},"sync":{"type":"boolean"},"hasMessagesInFlight":{"type":"boolean"},"hasAtRestMessages":{"type":"boolean"},"messagesIgnored":{"type":"integer","format":"int64"},"messagesRegistered":{"type":"integer","format":"int64"},"messagesSent":{"type":"integer","format":"int64"},"messagesAcked":{"type":"integer","format":"int64"},"messagesRolledBack":{"type":"integer","format":"int64"},"messagesExpired":{"type":"integer","format":"int64"},"paused":{"type":"boolean"}}},"DestinationEntry":{"required":["childCount","fullPath","name"],"type":"object","properties":{"name":{"type":"string","description":"Child name (single segment).","example":"fred"},"fullPath":{"type":"string","description":"Fully qualified path for this entry.","example":"/a/b/fred"},"destinationType":{"type":"string","description":"Destination type when kind is DESTINATION; null when kind is FOLDER.","nullable":true,"example":"TOPIC","enum":["FOLDER","TOPIC","QUEUE","TEMP_TOPIC","TEMP_QUEUE"]},"childCount":{"type":"integer","description":"For folders: The number of children within, for destinations will always be 0","format":"int32","example":1}},"description":"A single immediate child under a prefix. Can represent a folder or a destination."},"DestinationPageResponse":{"required":["entries","pageNo","totalEntries","totalPages"],"type":"object","properties":{"totalEntries":{"minimum":0,"type":"integer","description":"Total number of entries available for this prefix (folders + destinations).","format":"int32","example":237},"totalPages":{"minimum":0,"type":"integer","description":"Total pages available for this prefix given the requested pageSize. Zero if totalEntries is 0.","format":"int32","example":5},"pageNo":{"minimum":0,"type":"integer","description":"Zero-based page number returned.","format":"int32","example":0},"entries":{"type":"array","description":"Entries returned for this page. May be empty but is never null.","items":{"$ref":"#/components/schemas/DestinationEntry"}}},"description":"Paged destination entries for a prefix. Entries contain only immediate children (no recursion)."},"DestinationDTO":{"title":"Destination","required":["delayedMessages","name","pendingMessages","schemaId","storedMessages","type"],"type":"object","properties":{"name":{"title":"Destination Name","type":"string","description":"The unique name of the destination, which acts as an identifier within the messaging system.","example":"myDestination"},"type":{"title":"Destination Type","type":"string","description":"The type of the destination, indicating whether it is a queue or a topic, for example.","example":"queue","enum":["queue","topic"]},"storedMessages":{"title":"Stored Messages","minimum":0,"type":"integer","description":"The total count of messages currently stored in the destination.","format":"int64","example":123},"delayedMessages":{"title":"Delayed Messages","minimum":0,"type":"integer","description":"The number of messages delayed for delivery, which might occur due to timing or prioritization settings.","format":"int64","example":123},"pendingMessages":{"title":"Pending Messages","minimum":0,"type":"integer","description":"The count of messages pending processing in the destination.","format":"int64","example":123},"schemaId":{"title":"Schema ID","type":"string","description":"The identifier for the schema associated with this destination, which may define the structure or rules for messages.","example":"schema-123"},"noInterestMessages":{"title":"No Interest Messages","minimum":0,"type":"integer","description":"The count of messages dropped due to lack of interest by consumers.","format":"int64","example":5},"publishedMessages":{"title":"Published Messages","minimum":0,"type":"integer","description":"Total count of messages published to this destination.","format":"int64","example":1000},"retrievedMessages":{"title":"Retrieved Messages","minimum":0,"type":"integer","description":"The total number of messages retrieved from the destination by consumers.","format":"int64","example":980},"expiredMessages":{"title":"Expired Messages","minimum":0,"type":"integer","description":"The count of messages that expired before being delivered.","format":"int64","example":10},"deliveredMessages":{"title":"Delivered Messages","minimum":0,"type":"integer","description":"The number of messages successfully delivered to consumers.","format":"int64","example":970},"readTimeAveNs":{"title":"Average Read Time","minimum":0,"type":"integer","description":"The average time, in nanoseconds, to read messages from the store.","format":"int64","example":1500},"writeTimeAveNs":{"title":"Average Write Time","minimum":0,"type":"integer","description":"The average time, in nanoseconds, to write messages to the store.","format":"int64","example":2000},"deleteTimeAveNs":{"title":"Average Delete Time","minimum":0,"type":"integer","description":"The average time, in nanoseconds, to delete messages from the store.","format":"int64","example":1200}},"description":"Represents a messaging destination, such as a queue or topic, within the system."},"DestinationDetailsResponse":{"type":"object","properties":{"destination":{"$ref":"#/components/schemas/DestinationDTO"},"subscriptionList":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionStateDTO"}}}},"DiscoveredServersDTO":{"title":"Discovered Servers","type":"object","properties":{"serverName":{"title":"Server Name","type":"string","description":"The unique name of the discovered server.","example":"myServer"},"systemTopicPrefix":{"title":"System Topic Prefix","type":"string","description":"The name space prefix used for system topics","nullable":true,"example":"$SYS"},"schemaSupport":{"title":"Schema Support","type":"boolean","description":"Indicates whether the server supports schema validation for messages.","example":true},"schemaPrefix":{"title":"Schema Prefix","type":"string","description":"The name space prefix used for schemas","nullable":true,"example":"$SCHEMA"},"version":{"title":"Server Version","type":"string","description":"The version of the server software, typically following semantic versioning.","example":"1.2.3"},"buildDate":{"title":"Build Date","type":"string","description":"The date the server software was built, formatted as YYYY-MM-DD.","nullable":true,"example":"2024-01-15"},"services":{"title":"Services","type":"object","additionalProperties":{"$ref":"#/components/schemas/Services"},"description":"A map of services provided by the server, where each key is the service name and the value provides service-specific information.","nullable":true,"example":{"mqtt":{},"amqp":{}}}},"description":"Represents information about discovered servers, including configuration details, schema support, and available services."},"Services":{"title":"Services","type":"object","properties":{"protocol":{"type":"string"},"port":{"type":"integer","format":"int32"},"transport":{"type":"string"},"addresses":{"type":"array","items":{"type":"string"}},"properties":{"type":"object","additionalProperties":{"type":"string"}}},"description":"A map of services provided by the server, where each key is the service name and the value provides service-specific information.","nullable":true,"example":{"mqtt":{},"amqp":{}}},"RequestedAction":{"type":"object","properties":{"state":{"type":"string"}}},"DeviceInfoDTO":{"title":"Device Information","type":"object","properties":{"name":{"title":"Device Name","type":"string","description":"The unique name or identifier for the device.","example":"temperatureSensor01"},"description":{"title":"Device Description","type":"string","description":"A brief description of the device’s purpose or functionality.","nullable":true,"example":"Temperature sensor for monitoring room temperature"},"type":{"title":"Device Type","type":"string","description":"The type or category of the device, indicating its general function or use.","example":"sensor"},"state":{"title":"Device State","type":"string","description":"Retrieves any state registers, could be sensor data or device state, is dependent on the device.","example":"25.0C"}},"description":"Represents detailed information about a device, including its name, type, state, and description."},"IntegrationInfoDTO":{"title":"Integration Information","type":"object","properties":{"config":{"$ref":"#/components/schemas/EndPointConnectionServerConfigDTO"},"state":{"type":"string"}},"description":"Provides configuration and details about a specific integration connection."},"IntegrationStatusDTO":{"title":"Integration Status","type":"object","properties":{"interfaceName":{"title":"Interface Name","type":"string","description":"The name of the interface associated with this integration.","example":"myInterface"},"bytesSent":{"title":"Bytes Sent","minimum":0,"type":"integer","description":"The total number of bytes sent by the interface.","format":"int64","example":123456},"bytesReceived":{"title":"Bytes Received","minimum":0,"type":"integer","description":"The total number of bytes received by the interface.","format":"int64","example":654321},"messagesSent":{"title":"Messages Sent","minimum":0,"type":"integer","description":"The total number of messages sent by the interface.","format":"int64","example":100},"messagesReceived":{"title":"Messages Received","minimum":0,"type":"integer","description":"The total number of messages received by the interface.","format":"int64","example":95},"errors":{"title":"Connection Errors","minimum":0,"type":"integer","description":"The total count of connection errors encountered.","format":"int64","example":2},"lastReadTime":{"title":"Last Read Time","type":"integer","description":"The timestamp of the last read operation.","format":"int64","example":1625812345678},"lastWriteTime":{"title":"Last Write Time","type":"integer","description":"The timestamp of the last write operation.","format":"int64","example":1625812345678},"state":{"title":"Interface State","type":"string","description":"The current state of the interface (e.g., active, inactive).","example":"active"},"statistics":{"title":"Statistics","type":"object","additionalProperties":{"$ref":"#/components/schemas/LinkedMovingAverageRecordDTO"},"description":"A map of moving averages related to interface performance metrics.","nullable":true,"example":"{\"averageRead\": {\"name\": \"averageRead\", \"unitName\": \"bytes\", \"current\": 50, ...}}"}},"description":"Represents the status of an integration, including bytes and messages processed, connection state, errors, and performance statistics."},"LinkedMovingAverageRecordDTO":{"title":"Linked Moving Average Record","type":"object","properties":{"name":{"title":"Metric Name","type":"string","description":"The name of the metric being recorded (e.g., 'latency', 'throughput').","example":"latency"},"unitName":{"title":"Unit Name","type":"string","description":"The unit of measurement for the metric (e.g., 'ms' for milliseconds).","example":"ms"},"timeSpan":{"title":"Timespan","minimum":0,"type":"integer","description":"The timespan over which the moving average is calculated, in milliseconds.","format":"int64","example":60000},"current":{"title":"Current Value","minimum":0,"type":"integer","description":"The current moving average value for the metric.","format":"int64","example":150},"stats":{"title":"Statistics Map","type":"object","additionalProperties":{"title":"Statistics Map","type":"integer","description":"A map containing additional statistical values, where each key is a descriptive label and each value is a measurement.","format":"int64"},"description":"A map containing additional statistical values, where each key is a descriptive label and each value is a measurement.","example":{"min":100,"max":200,"average":150}}},"description":"Represents a record of moving average statistics, tracking metrics over a defined timespan with specific units.","example":"{\"latency\": {\"name\": \"latency\", \"unitName\": \"ms\", \"current\": 10, ...}}"},"InterfaceInfoDTO":{"title":"Interface Information","required":["schemaLoadingVersion"],"type":"object","properties":{"schemaLoadingVersion":{"maximum":10,"minimum":0,"type":"integer","description":"Configuration schema version. 0 = legacy format, 1 = current format.","format":"int32","example":1,"default":1},"uniqueId":{"title":"unique id","type":"string","description":"UUID to reference the interface"},"name":{"title":"Interface Name","type":"string","description":"Unique name of the interface","example":"myInterface"},"port":{"title":"Port","type":"integer","description":"Port that the interface is bound to","format":"int32","example":8080},"host":{"title":"Host","type":"string","description":"Host that the interface is bound to","example":"http://localhost"},"state":{"title":"State","type":"string","description":"Current state of the interface","example":"Started"},"config":{"$ref":"#/components/schemas/EndPointServerConfigDTO"}},"description":"Contains details about an interface, including its name, host, port, and current state."},"InterfaceStatusDTO":{"title":"Interface Status","type":"object","properties":{"interfaceName":{"title":"Interface Name","type":"string","description":"Name of the interface","example":"myInterface"},"totalBytesSent":{"title":"Total Bytes Sent","minimum":0,"type":"integer","description":"Total number of bytes sent by the interface.","format":"int64","example":1024000},"totalBytesReceived":{"title":"Total Bytes Received","minimum":0,"type":"integer","description":"Total number of bytes received by the interface.","format":"int64","example":2048000},"totalMessagesSent":{"title":"Total Messages Sent","minimum":0,"type":"integer","description":"Total number of messages sent by the interface.","format":"int64","example":500},"totalMessagesReceived":{"title":"Total Messages Received","minimum":0,"type":"integer","description":"Total number of messages received by the interface.","format":"int64","example":480},"bytesSent":{"title":"Bytes Sent per Second","minimum":0,"type":"number","description":"Number of bytes sent per second.","format":"float","example":1000},"bytesReceived":{"title":"Bytes Received per Second","minimum":0,"type":"number","description":"Number of bytes received per second.","format":"float","example":2000},"messagesSent":{"title":"Messages Sent per Second","minimum":0,"type":"number","description":"Number of messages sent per second.","format":"float","example":5},"messagesReceived":{"title":"Messages Received per Second","minimum":0,"type":"number","description":"Number of messages received per second.","format":"float","example":4},"connections":{"title":"Current Connections","minimum":0,"type":"integer","description":"Number of current connections.","format":"int64","example":10},"errors":{"title":"Connection Errors","minimum":0,"type":"integer","description":"Total number of connection errors.","format":"int64","example":3},"statistics":{"title":"Statistics","type":"object","additionalProperties":{"$ref":"#/components/schemas/LinkedMovingAverageRecordDTO"},"description":"A map of moving averages for various metrics.","nullable":true}},"description":"Represents detailed statistics about an interface, including bytes and messages sent/received, connection count, and error counts."},"Engine":{"required":["filteringSupport","maxQueues","maxTopics","namedSubscriptionSupport","queueSupport","schemaSupport","tempQueueSupport","tempTopicSupport","topicSupport"],"type":"object","properties":{"queueSupport":{"type":"boolean","description":"Enable queue support.","example":true},"topicSupport":{"type":"boolean","description":"Enable topic (pub/sub) support.","example":true},"tempQueueSupport":{"type":"boolean","description":"Enable temporary queue support.","example":true},"tempTopicSupport":{"type":"boolean","description":"Enable temporary topic support.","example":true},"namedSubscriptionSupport":{"type":"boolean","description":"Enable named subscription support.","example":true},"filteringSupport":{"type":"boolean","description":"Enable message filtering support.","example":true},"schemaSupport":{"type":"boolean","description":"Enable schema-based validation and routing.","example":true},"maxTopics":{"type":"integer","description":"Maximum number of topics allowed.","format":"int32","example":1000000},"maxQueues":{"type":"integer","description":"Maximum number of queues allowed.","format":"int32","example":100000}},"description":"Core messaging engine feature configuration for the license. All fields are required."},"FeatureDetails":{"required":["expiry","feature","info"],"type":"object","properties":{"feature":{"$ref":"#/components/schemas/Features"},"expiry":{"type":"string","description":"Expiry date and time for the license.","format":"date-time"},"info":{"type":"string","description":"Additional information about the license.","example":"Enterprise license with full feature set"}},"description":"Detailed license feature definition including expiry and metadata. All fields are required."},"Features":{"required":["engine","hardware","interConnections","management","ml","name","network","overrideFeatures","protocols","storage"],"type":"object","properties":{"name":{"type":"string","description":"Name of the licensed feature set.","example":"Enterprise"},"ml":{"type":"boolean","description":"Indicates if machine learning features are enabled.","example":true},"overrideFeatures":{"type":"boolean","description":"If true, explicitly overrides default feature configuration.","example":false},"network":{"$ref":"#/components/schemas/Network"},"protocols":{"$ref":"#/components/schemas/Protocols"},"management":{"$ref":"#/components/schemas/Management"},"interConnections":{"$ref":"#/components/schemas/InterConnections"},"storage":{"$ref":"#/components/schemas/Storage"},"hardware":{"$ref":"#/components/schemas/Hardware"},"engine":{"$ref":"#/components/schemas/Engine"}},"description":"License feature configuration. All fields are required."},"Hardware":{"required":["i2c","oneWire","serial","spi"],"type":"object","properties":{"i2c":{"type":"boolean","description":"Enable I2C device support.","example":true},"spi":{"type":"boolean","description":"Enable SPI device support.","example":true},"oneWire":{"type":"boolean","description":"Enable OneWire device support.","example":false},"serial":{"type":"boolean","description":"Enable serial hardware support.","example":true}},"description":"Hardware feature configuration for the license. All fields are required."},"InterConnections":{"required":["filteringSupport","pullSupport","pushSupport"],"type":"object","properties":{"pushSupport":{"type":"boolean","description":"Enable push-based interconnection support.","example":true},"pullSupport":{"type":"boolean","description":"Enable pull-based interconnection support.","example":true},"filteringSupport":{"type":"boolean","description":"Enable filtering capabilities on interconnections.","example":true}},"description":"Interconnection feature configuration for the license. All fields are required."},"Management":{"required":["jmx","jolokia","restApi","sysTopics"],"type":"object","properties":{"jolokia":{"type":"boolean","description":"Enable Jolokia (JMX over HTTP) support.","example":false},"restApi":{"type":"boolean","description":"Enable REST API management interface.","example":true},"jmx":{"type":"boolean","description":"Enable JMX management interface.","example":true},"sysTopics":{"type":"boolean","description":"Enable system topics for internal monitoring and control.","example":true}},"description":"Management feature configuration for the license. All fields are required."},"Network":{"required":["canbus","dtls","hmac","lora","maxConnections","ogws","satellite","serial","ssl","stogi","tcp","udp"],"type":"object","properties":{"udp":{"type":"boolean","description":"Enable UDP transport.","example":true},"hmac":{"type":"boolean","description":"Enable HMAC authentication.","example":true},"tcp":{"type":"boolean","description":"Enable TCP transport.","example":true},"ssl":{"type":"boolean","description":"Enable SSL/TLS transport.","example":true},"dtls":{"type":"boolean","description":"Enable DTLS transport.","example":false},"lora":{"type":"boolean","description":"Enable LoRa communication.","example":false},"serial":{"type":"boolean","description":"Enable serial communication.","example":false},"canbus":{"type":"boolean","description":"Enable CAN bus communication.","example":true},"ogws":{"type":"boolean","description":"Enable ORBCOMM OGWS integration.","example":false},"stogi":{"type":"boolean","description":"Enable ST OGi modem support.","example":false},"satellite":{"type":"boolean","description":"Enable satellite communication features.","example":false},"maxConnections":{"type":"integer","description":"Maximum number of concurrent network connections allowed.","format":"int32","example":1000}},"description":"Network feature configuration for the license. All fields are required."},"Protocols":{"required":["amqp","coap","extensions","lora","mavlink","mqtt","mqtt_sn","n2k","nats","nmea_0183","rest","semtech","stogi","stomp","ws","wss"],"type":"object","properties":{"mqtt":{"type":"boolean","description":"Enable MQTT protocol support.","example":true},"amqp":{"type":"boolean","description":"Enable AMQP protocol support.","example":true},"nats":{"type":"boolean","description":"Enable NATS protocol support.","example":true},"mqtt_sn":{"type":"boolean","description":"Enable MQTT-SN protocol support.","example":false},"coap":{"type":"boolean","description":"Enable CoAP protocol support.","example":false},"nmea_0183":{"type":"boolean","description":"Enable NMEA 0183 protocol support.","example":false},"semtech":{"type":"boolean","description":"Enable Semtech LoRa protocol support.","example":false},"extensions":{"type":"boolean","description":"Enable custom protocol extensions.","example":true},"stomp":{"type":"boolean","description":"Enable STOMP protocol support.","example":false},"rest":{"type":"boolean","description":"Enable REST protocol support.","example":true},"lora":{"type":"boolean","description":"Enable LoRa protocol support.","example":false},"ws":{"type":"boolean","description":"Enable WebSocket (WS) protocol support.","example":true},"wss":{"type":"boolean","description":"Enable secure WebSocket (WSS) protocol support.","example":true},"stogi":{"type":"boolean","description":"Enable ST OGi protocol support.","example":false},"mavlink":{"type":"boolean","description":"Enable MAVLink protocol support.","example":true},"n2k":{"type":"boolean","description":"Enable NMEA 2000 (N2K) protocol support.","example":false}},"description":"Protocol feature configuration for the license. All fields are required."},"Storage":{"required":["cacheSupport","compressionArchive","fileSupport","s3Archive"],"type":"object","properties":{"s3Archive":{"type":"boolean","description":"Enable S3-based archival storage.","example":true},"compressionArchive":{"type":"boolean","description":"Enable compression for archived data.","example":true},"fileSupport":{"type":"boolean","description":"Enable local file-based storage support.","example":true},"cacheSupport":{"type":"boolean","description":"Enable caching mechanisms for storage.","example":true}},"description":"Storage feature configuration for the license. All fields are required."},"LogEntries":{"type":"object","properties":{"logEntries":{"type":"array","items":{"$ref":"#/components/schemas/LogEntry"}}}},"LogEntry":{"title":"LogEntry","type":"object","properties":{"logNumber":{"title":"logNumber","type":"integer","description":"Represents the order for the log entry.","format":"int64"},"level":{"title":"level","type":"integer","description":"The level of this log entry","format":"int32"},"message":{"title":"message","type":"string","description":"The actual log entry"}},"description":"Represents a log entry from the server."},"LoRaDeviceInfoDTO":{"title":"LoRa Device Information","type":"object","properties":{"name":{"title":"Device Name","type":"string","description":"The name of the LoRa device.","example":"LoRaDevice_01"},"radio":{"title":"Radio Type","type":"string","description":"Type of radio module used by the LoRa device.","example":"SX1276"},"bytesSent":{"title":"Bytes Sent","minimum":0,"type":"integer","description":"Total number of bytes sent by the LoRa device.","format":"int64","example":1048576},"bytesReceived":{"title":"Bytes Received","minimum":0,"type":"integer","description":"Total number of bytes received by the LoRa device.","format":"int64","example":2048000},"packetsSent":{"title":"Packets Sent","minimum":0,"type":"integer","description":"Total number of packets sent by the LoRa device.","format":"int64","example":500},"packetsReceived":{"title":"Packets Received","minimum":0,"type":"integer","description":"Total number of packets received by the LoRa device.","format":"int64","example":480},"endPointInfoList":{"title":"Endpoint Information List","type":"array","description":"A list of endpoint information for the device, detailing each endpoint’s status and metrics.","nullable":true,"items":{"$ref":"#/components/schemas/LoRaEndPointInfoDTO"}}},"description":"Provides detailed information about a LoRa device, including sent and received data statistics and endpoint details."},"LoRaEndPointInfoDTO":{"title":"LoRa Endpoint Information","type":"object","properties":{"nodeId":{"title":"Node ID","minimum":0,"type":"integer","description":"Unique identifier for the LoRa node.","format":"int32","example":1},"lastRSSI":{"title":"Last RSSI","maximum":0,"minimum":-200,"type":"integer","description":"The most recent Received Signal Strength Indicator (RSSI) value for this endpoint.","format":"int32","example":-70},"incomingQueueSize":{"title":"Incoming Queue Size","minimum":0,"type":"integer","description":"The size of the incoming message queue for this endpoint.","format":"int32","example":10},"connectionSize":{"title":"Connection Size","minimum":0,"type":"integer","description":"The number of active connections for this endpoint.","format":"int32","example":5},"lastRead":{"title":"Last read operation","type":"integer","description":"The last time a packet was received","format":"int64"},"lastWrite":{"title":"Last write operation","type":"integer","description":"The last time a packet was sent","format":"int64"}},"description":"Provides information about a LoRa endpoint, including node ID, RSSI, and queue size.","nullable":true},"LoRaEndPointConnectionInfoDTO":{"title":"LoRa Endpoint Connection Information","type":"object","properties":{"rssi":{"title":"RSSI","maximum":0,"minimum":-200,"type":"integer","description":"Received Signal Strength Indicator (RSSI) for the connection.","format":"int64","example":-70},"missedPackets":{"title":"Missed Packets","minimum":0,"type":"integer","description":"The number of packets that were missed or lost.","format":"int64","example":3},"receivedPackets":{"title":"Received Packets","minimum":0,"type":"integer","description":"The total number of packets successfully received.","format":"int64","example":500},"remoteNodeId":{"title":"Remote Node ID","minimum":0,"type":"integer","description":"The identifier of the remote node in the connection.","format":"int32","example":2},"lastPacketId":{"title":"Last Packet ID","minimum":0,"type":"integer","description":"The identifier of the last packet received.","format":"int64","example":1000},"lastReadTime":{"title":"Last Read Time","type":"integer","description":"The timestamp of the last read operation from this connection.","format":"int64","example":1625812345678},"lastWriteTime":{"title":"Last Write Time","type":"integer","description":"The timestamp of the last write operation to this connection.","format":"int64","example":1625812345678}},"description":"Represents connection metrics and information for a LoRa endpoint connection, including signal strength and packet details."},"TransactionData":{"type":"object","properties":{"destinationName":{"type":"string"},"eventIds":{"type":"array","items":{"type":"integer","format":"int64"}}}},"ConsumedMessages":{"type":"object","properties":{"destination":{"type":"string"},"messages":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/MessageDTO"}}}}},"ConsumedResponse":{"type":"object","properties":{"consumedMessages":{"type":"array","items":{"$ref":"#/components/schemas/ConsumedMessages"}}}},"MessageDTO":{"title":"Message","required":["payload"],"type":"object","properties":{"identifier":{"title":"Message Identifier","type":"integer","description":"The event identifier","format":"int64"},"payload":{"title":"Payload","type":"string","description":"The main payload content of the message, represented as a byte64 string.","example":"VGhpcyBpcyBhIGV4YW1wbGUgZGF0YS4="},"contentType":{"title":"Content Type","type":"string","description":"The MIME type of the message payload, indicating its format.","nullable":true,"example":"application/json"},"correlationData":{"title":"Correlation Data","type":"string","description":"Additional data used for correlating messages, provided as a byte array.","format":"byte","nullable":true,"example":"WzEsMiwzLDRd"},"expiry":{"title":"Expiry Time","type":"integer","description":"The expiry time for the message in milliseconds. Default is -1, indicating no expiry.","format":"int64","example":60000,"default":-1},"priority":{"title":"Priority","type":"integer","description":"The priority level of the message, ranging from 0 (lowest) to 10 (highest). Default is 4 (normal).","format":"int32","example":4,"default":4},"qualityOfService":{"title":"Quality of Service","type":"integer","description":"The Quality of Service level for the message: 0 (at most once), 1 (at least once), or 2 (exactly once).","format":"int32","example":1,"default":0},"creation":{"title":"Creation Date/Time","type":"string","description":"The time the server received this event","format":"date-time","nullable":true},"dataMap":{"title":"Message Parameters","type":"object","additionalProperties":{"title":"Message Parameters","type":"object","description":"A map containing optional key-value pairs associated with the message.","nullable":true,"example":{"key1":"value1","key2":42}},"description":"A map containing optional key-value pairs associated with the message.","nullable":true,"example":{"key1":"value1","key2":42}},"metaData":{"title":"Event Meta Data","type":"object","additionalProperties":{"title":"Event Meta Data","type":"string","description":"A map of string, string values that the server has added to the event as it was processed","nullable":true,"example":"{\"key1\":\"value1\",\"key2\":42}"},"description":"A map of string, string values that the server has added to the event as it was processed","nullable":true,"example":{"key1":"value1","key2":42}}},"description":"Represents a messaging entity with configurable quality, priority, and metadata attributes."},"ConsumeRequestDTO":{"title":"Consume Request","type":"object","properties":{"destination":{"title":"Destination name","type":"string","description":"Optional, if supplied gets any messages outstanding for this destination, else all messages pending delivery","example":"topicName"},"depth":{"title":"Depth","type":"integer","description":"The max number of events that should be returned","format":"int32","example":60,"default":10}},"description":"Requests the server to respond with any outstanding messages specified by the destination or all if no destination supplied"},"SubscriptionDepth":{"type":"object","properties":{"depth":{"type":"integer","format":"int32"},"destination":{"type":"string"}}},"SubscriptionDepthResponse":{"type":"object","properties":{"subscriptionDepths":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionDepth"}}}},"PublishRequestDTO":{"title":"Publish Request","required":["destinationName","message"],"type":"object","properties":{"destinationName":{"title":"Destination Topic","type":"string","description":"The topic to which the message will be published. This should be a valid topic name recognized by the messaging system.","example":"sensor/data"},"message":{"$ref":"#/components/schemas/MessageDTO"},"retain":{"title":"Retain Message","type":"boolean","description":"Indicates if the message should be retained on the destination. If true, the message will be stored and sent to new subscribers on the topic.","example":false,"default":false}},"description":"Represents a request to publish a message to a specified topic with optional retention."},"AsyncMessageDTO":{"required":["payload"],"type":"object","properties":{"identifier":{"title":"Message Identifier","type":"integer","description":"The event identifier","format":"int64"},"payload":{"title":"Payload","type":"string","description":"The main payload content of the message, represented as a byte64 string.","example":"VGhpcyBpcyBhIGV4YW1wbGUgZGF0YS4="},"contentType":{"title":"Content Type","type":"string","description":"The MIME type of the message payload, indicating its format.","nullable":true,"example":"application/json"},"correlationData":{"title":"Correlation Data","type":"string","description":"Additional data used for correlating messages, provided as a byte array.","format":"byte","nullable":true,"example":"WzEsMiwzLDRd"},"expiry":{"title":"Expiry Time","type":"integer","description":"The expiry time for the message in milliseconds. Default is -1, indicating no expiry.","format":"int64","example":60000,"default":-1},"priority":{"title":"Priority","type":"integer","description":"The priority level of the message, ranging from 0 (lowest) to 10 (highest). Default is 4 (normal).","format":"int32","example":4,"default":4},"qualityOfService":{"title":"Quality of Service","type":"integer","description":"The Quality of Service level for the message: 0 (at most once), 1 (at least once), or 2 (exactly once).","format":"int32","example":1,"default":0},"creation":{"title":"Creation Date/Time","type":"string","description":"The time the server received this event","format":"date-time","nullable":true},"dataMap":{"title":"Message Parameters","type":"object","additionalProperties":{"title":"Message Parameters","type":"object","description":"A map containing optional key-value pairs associated with the message.","nullable":true,"example":{"key1":"value1","key2":42}},"description":"A map containing optional key-value pairs associated with the message.","nullable":true,"example":{"key1":"value1","key2":42}},"metaData":{"title":"Event Meta Data","type":"object","additionalProperties":{"title":"Event Meta Data","type":"string","description":"A map of string, string values that the server has added to the event as it was processed","nullable":true,"example":"{\"key1\":\"value1\",\"key2\":42}"},"description":"A map of string, string values that the server has added to the event as it was processed","nullable":true,"example":{"key1":"value1","key2":42}},"destinationName":{"title":"Destination Name","type":"string","description":"The complete path for the destination that the event is part of","example":"/folder/topic"}},"description":"AsyncMessageDTO represents messages delivered via SSE."},"SubscriptionRequestDTO":{"title":"Subscription Request","required":["destinationName"],"type":"object","properties":{"destinationName":{"title":"Destination Name","type":"string","description":"The name of the destination (e.g., topic or queue) to which the subscription is bound.Supports MQTT style wild card subscription","example":"sensor/data or /sensor/# "},"namedSubscription":{"title":"Named Subscription","type":"string","description":"An optional name for a named subscription, allowing clients to re-use existing subscriptions if provided.","nullable":true,"example":"temperatureAlerts"},"filter":{"title":"Filter Expression","type":"string","description":"An optional filter expression written in JMS selector syntax to filter messages received by the subscription.","nullable":true,"example":"temperature > 25"},"maxDepth":{"title":"Maximum Queue Depth","type":"integer","description":"The maximum number of messages that can be queued for the subscription before new messages are dropped.","format":"int32","nullable":true,"example":10,"default":1},"transactional":{"title":"Transactional subscription","type":"boolean","description":"Flag to indicate the subscription is transactional","example":true,"default":false},"retainMessage":{"title":"Retain Message","type":"boolean","description":"Indicates if messages should be retained on the destination for this subscription, meaning they will be stored and made available to future subscribers.","nullable":true,"example":false,"default":false}},"description":"Represents a request to create a subscription to a specific destination, with optional filtering and message retention."},"SchemaConfigDTO":{"type":"object","properties":{"uniqueId":{"type":"string","description":"Unique identifier for the schema","nullable":true,"example":"it_019c21a1-0626-7258-ae03-78fd8247d4f4"},"versionId":{"type":"string","description":"Schema version identifier","nullable":true,"example":"1"},"epoch":{"type":"integer","description":"Epoch value associated with the schema","format":"int64","nullable":true,"example":1700000000},"name":{"type":"string","description":"Human-readable schema title","nullable":true,"example":"Engine Telemetry"},"description":{"type":"string","description":"Schema description","nullable":true},"documentation":{"type":"string","description":"Documentation reference or embedded documentation","nullable":true},"labels":{"type":"object","additionalProperties":{"type":"string","description":"Labels/metadata attached to the schema","nullable":true},"description":"Labels/metadata attached to the schema","nullable":true},"ancestor":{"type":"string","description":"Unique ID of the ancestor schema (if versioned/derived)","nullable":true},"format":{"type":"string","description":"Schema format identifier","nullable":true,"example":"json"},"schemaUrl":{"type":"string","description":"Schema URL reference (optional)","nullable":true},"schema":{"$ref":"#/components/schemas/JsonObject"},"schemaBase64":{"type":"string","description":"Schema definition encoded as Base64. Either schema or schemaBase64 must be provided.","nullable":true},"createdAt":{"type":"string","description":"Creation time in ISO-8601 with offset","format":"date-time","nullable":true},"modifiedAt":{"type":"string","description":"Last modification time in ISO-8601 with offset","format":"date-time","nullable":true},"notBefore":{"type":"string","description":"Schema is not valid before this time (optional)","format":"date-time","nullable":true},"expiresAfter":{"type":"string","description":"Schema expires after this time (optional)","format":"date-time","nullable":true}},"description":"Schema configuration as exposed via the REST API"},"SchemaPostDTO":{"title":"Schema Post Data","type":"object","properties":{"schema":{"title":"Schema","type":"string","description":"A JSON-encoded string representing the schema object to be posted.","example":"{\"type\":\"record\",\"name\":\"User\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"}]}"},"context":{"title":"Context","type":"string","description":"The name or context of the schema, identifying the scope or purpose for which it is used.","example":"UserProfile"}},"description":"Represents the data required to post a new schema, including the JSON-encoded schema object and its context."},"StringListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"string"}}}},"SchemaMapResponse":{"type":"object","properties":{"data":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}},"CacheInfo":{"type":"object","properties":{"enabled":{"type":"boolean"},"lifeTime":{"type":"integer","format":"int64"},"scanTime":{"type":"integer","format":"int64"},"cacheSize":{"type":"integer","format":"int64"},"cacheHits":{"type":"integer","format":"int64"},"cacheMisses":{"type":"integer","format":"int64"}}},"ServerInfoDTO":{"title":"Status Message","type":"object","properties":{"serverName":{"type":"string","description":"Server name","example":"maps-server"},"version":{"type":"string","description":"Build version of the server","example":"3.3.7"},"buildDate":{"type":"string","description":"Build date of the server","example":"2024-10-13"},"totalMemory":{"type":"integer","description":"Total memory in bytes","format":"int64","example":536870912},"maxMemory":{"type":"integer","description":"Maximum memory in bytes","format":"int64","example":1073741824},"freeMemory":{"type":"integer","description":"Free memory in bytes","format":"int64","example":268435456},"numberOfThreads":{"type":"integer","description":"Number of active threads","format":"int32","example":120},"timeToCreateNano":{"type":"integer","description":"Time taken to create the status message, in nanoseconds","format":"int64","example":1000000},"uptime":{"type":"integer","description":"Server uptime in milliseconds","format":"int64","example":123456789},"connections":{"type":"integer","description":"Total connections count","format":"int64","example":150},"destinations":{"type":"integer","description":"Total destinations count","format":"int64","example":30},"cpuTime":{"type":"integer","description":"CPU time in nanoseconds","format":"int64","example":1234567890},"cpuPercent":{"type":"number","description":"CPU usage percentage","format":"float","example":12.5},"storageSize":{"type":"integer","description":"Storage size in bytes","format":"int64","example":104857600},"threadState":{"type":"object","additionalProperties":{"type":"integer","description":"Map of thread states and their counts","format":"int32"},"description":"Map of thread states and their counts","example":{"RUNNABLE":50,"WAITING":10}}},"description":"Provides detailed status information about the server, including memory usage, CPU statistics, and thread states."},"ServerStatisticsDTO":{"title":"Server Statistics","type":"object","properties":{"packetsSent":{"type":"integer","description":"Total packets sent","format":"int64","example":1024},"packetsReceived":{"type":"integer","description":"Total packets received","format":"int64","example":2048},"totalReadBytes":{"type":"integer","description":"Total read bytes","format":"int64","example":5242880},"totalWriteBytes":{"type":"integer","description":"Total write bytes","format":"int64","example":4194304},"totalConnections":{"type":"integer","description":"Total connections","format":"int64","example":150},"totalDisconnections":{"type":"integer","description":"Total disconnections","format":"int64","example":145},"totalNoInterestMessages":{"type":"integer","description":"Total messages with no interest","format":"int64","example":10},"totalSubscribedMessages":{"type":"integer","description":"Total subscribed messages","format":"int64","example":5000},"totalPublishedMessages":{"type":"integer","description":"Total published messages","format":"int64","example":6000},"totalRetrievedMessages":{"type":"integer","description":"Total retrieved messages","format":"int64","example":2500},"totalExpiredMessages":{"type":"integer","description":"Total expired messages","format":"int64","example":20},"totalDeliveredMessages":{"type":"integer","description":"Total delivered messages","format":"int64","example":4000},"publishedPerSecond":{"type":"number","description":"Published messages per second","format":"float","example":50},"subscribedPerSecond":{"type":"number","description":"Subscribed messages per second","format":"float","example":45},"noInterestPerSecond":{"type":"number","description":"No interest messages per second","format":"float","example":5},"deliveredPerSecond":{"type":"number","description":"Delivered messages per second","format":"float","example":60},"retrievedPerSecond":{"type":"number","description":"Retrieved messages per second","format":"float","example":30},"stats":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/LinkedMovingAverageRecordDTO"},"description":"Statistics map","example":"{\"latency\": {\"name\": \"latency\", \"unitName\": \"ms\", \"current\": 10, ...}}"}},"description":"Contains various metrics and statistics for server performance, including message rates, connection counts, and data throughput."},"ServerHealthStateResponse":{"type":"object","properties":{"status":{"type":"string"},"issueCount":{"type":"integer","format":"int32"}}},"SubSystemStatusDTO":{"title":"SubSystem Status","required":["name","status"],"type":"object","properties":{"name":{"title":"Name","type":"string","description":"The name of the subsystem.","example":"Messaging Service"},"comment":{"title":"Comment","type":"string","description":"A comment or additional information about the subsystem's status.","nullable":true,"example":"System is operating normally."},"status":{"title":"Status Enum","type":"string","description":"Enumeration of possible statuses for a subsystem.","example":"OK","enum":["OK","STOPPED","PAUSED","DISABLED","WARN","ERROR"]}},"description":"Represents the status of a subsystem in the messaging server."},"ServerActionRequest":{"type":"object","properties":{"state":{"type":"string"}}}},"securitySchemes":{"basicAuth":{"type":"http","scheme":"basic"},"authScheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}}} +{ + "openapi": "3.0.1", + "info": { + "title": "Maps Messaging Rest Server", + "description": "Maps Messaging Server Rest API, provides simple Rest API to manage and interact with the server", + "contact": { + "name": "Info MapsMessaging B.V.", + "url": "http://mapsmessaging.io", + "email": "info@mapsmessaging.io" + }, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0" + }, + "version": "00.00.00-SNAPSHOT" + }, + "externalDocs": { + "description": "Maps Messaging", + "url": "https://www.mapsmessaging.io/" + }, + "servers": [ + { + "url": "http://localhost:3000", + "description": "Default Server" + } + ], + "security": [ + { + "basicAuth": [] + } + ], + "tags": [ + { + "name": "Authentication and Authorisation Management", + "description": "Provides endpoints for managing user authentication and authorisation, including login, logout, token management, and role-based access control to ensure secure interactions with the server." + }, + { + "name": "Destination Management", + "description": "Facilitates the management of destinations such as topics and queues. Includes operations for creating, updating, deleting, and querying destinations, as well as managing subscriptions." + }, + { + "name": "Messaging Interface", + "description": "Offers APIs for sending and receiving messages, enabling communication between clients and the server. Supports various messaging protocols and real-time event handling." + }, + { + "name": "Server Health", + "description": "Includes endpoints for monitoring the server's health and operational status, providing simple and detailed responses for status checks and diagnostics." + }, + { + "name": "Server Interface Management", + "description": "Manages the server's network interfaces, including configuration, monitoring, and troubleshooting of connections to ensure optimal performance and reliability." + }, + { + "name": "Schema Management", + "description": "Provides functionality to configure, manage, and query schemas used by the server, enabling seamless integration with structured data formats and validation mechanisms." + }, + { + "name": "Server Management", + "description": "Includes operations for monitoring and managing the server's status, configurations, and performance metrics to ensure smooth and efficient operation." + }, + { + "name": "Server Integration Management", + "description": "Manages the server's integrations with other messaging brokers, enabling interoperability and seamless data exchange across distributed systems." + }, + { + "name": "Server Integration Status", + "description": "Retrieves the current status of the server to server integration." + }, + { + "name": "Connection Management", + "description": "Handles client connections to the server, offering endpoints for monitoring, managing, and troubleshooting active connections and session details." + }, + { + "name": "Discovery Management", + "description": "Provides mechanisms for managing the server's discovery agents, allowing automated detection and configuration of network services and resources." + }, + { + "name": "Hardware Management", + "description": "Enables the management of hardware devices integrated with the server, including configuration, monitoring, and diagnostics for seamless hardware-software interaction." + }, + { + "name": "LoRa Device Management", + "description": "Offers APIs for managing LoRa devices, including adding, updating, retrieving configurations, monitoring device statistics, and managing endpoint connections." + }, + { + "name": "Logging Monitor", + "description": "Offers simple API to retrieve server logs or to stream server logs via SSE" + }, + { + "name": "User Authentication", + "description": "Provides the rest api login, logout and token refresh" + }, + { + "name": "ML Model Store", + "description": "Endpoints for managing ML models in the system." + } + ], + "paths": { + "/api/v1/session": { + "get": { + "tags": [ + "User Authentication" + ], + "summary": "Returns the current authentication session", + "description": "Returns information about the current user authentication session, can be used to see if the user is logged in", + "operationId": "getUserSession", + "responses": { + "200": { + "description": "Returns if there have been updates", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCheckResponse" + } + } + } + }, + "400": { + "description": "Bad request" + } + } + } + }, + "/api/v1/login": { + "post": { + "tags": [ + "User Authentication" + ], + "summary": "User login", + "description": "Allows a user to log in and obtain an authentication token. This endpoint does not require authentication and overrides global security settings.", + "operationId": "login", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Login successful or not required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + } + } + } + }, + "/api/v1/logout": { + "post": { + "tags": [ + "User Authentication" + ], + "summary": "User logout", + "description": "Logs out the currently authenticated user by invalidating their session.", + "operationId": "logout", + "responses": { + "200": { + "description": "Logout successful" + }, + "400": { + "description": "Bad request or invalid session state" + } + } + } + }, + "/api/v1/refreshToken": { + "get": { + "tags": [ + "User Authentication" + ], + "summary": "Refreshes the users JWT", + "description": "Refreshes the current JWT cookie used for auth.", + "operationId": "refreshToken", + "responses": { + "200": { + "description": "Refresh was successful or not required", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + } + } + } + }, + "/health": { + "get": { + "tags": [ + "Server Health" + ], + "summary": "Check server health", + "description": "Checks the health of all subsystems and returns their overall status. Possible values are 'Ok', 'Warning', or 'Error'.", + "operationId": "getHealth", + "responses": { + "200": { + "description": "Health status returned" + }, + "400": { + "description": "Bad request" + } + } + } + }, + "/api/v1/updates": { + "get": { + "tags": [ + "Server Health" + ], + "summary": "Check for configuration updates", + "description": "Provides information about any changes in the server's configuration update counts.", + "operationId": "checkForUpdates", + "responses": { + "200": { + "description": "Returns if there have been updates", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCheckResponse" + } + } + } + }, + "400": { + "description": "Bad request" + } + } + } + }, + "/api/v1/name": { + "get": { + "tags": [ + "Server Health" + ], + "summary": "Retrieve the server's unique name", + "description": "Returns the unique identifier of the server instance.", + "operationId": "getName", + "responses": { + "200": { + "description": "Get server name was successful", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/ping": { + "get": { + "tags": [ + "Server Health" + ], + "summary": "Ping the server", + "description": "A simple endpoint to verify that the server is operational and responsive.", + "operationId": "getPing", + "responses": { + "200": { + "description": "Server is operational" + }, + "400": { + "description": "Bad request" + } + } + } + }, + "/api/v1/auth/config": { + "get": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Get the auth configuration", + "description": "Retrieves the configuration used to setup the authentication and authorisation. Requires authentication if enabled in the configuration.", + "operationId": "getAuthConfiguration", + "responses": { + "200": { + "description": "Get auth configuration was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthManagerConfigDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "post": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Update the auth configuration", + "description": "Updates the configuration used to setup the authentication and authorisation. Requires authentication if enabled in the configuration.", + "operationId": "updateAuthConfiguration", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthManagerConfigDTO" + } + } + } + }, + "responses": { + "200": { + "description": "Update authetication was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "304": { + "description": "No change detected" + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + }, + "security": [ + { + "basicAuth": [] + } + ] + } + }, + "/api/v1/auth/acl/check": { + "post": { + "summary": "Check access for an identity to a resource", + "description": "Checks whether the identity has the specified permission on the given resource", + "operationId": "checkAccess", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AclCheckRequestDTO" + } + } + } + }, + "responses": { + "200": { + "description": "ACL check was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AclCheckResponseDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/auth/permissions": { + "get": { + "summary": "Get the authorisation permission list", + "description": "Retrieves the read only permissions used by the servers Authorisation", + "operationId": "getAuthorisationStaticInfo", + "responses": { + "200": { + "description": "Get permissions was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuthorisationConfigDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/auth/groups/{groupUuid}/acl": { + "get": { + "summary": "Get explicit ACL entries for a group", + "description": "Retrieves explicit ACL entries for the specified group, grouped by resource", + "operationId": "getGroupAcl", + "parameters": [ + { + "name": "groupUuid", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Group ACL retrieval was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdentityAclViewDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/auth/identities/{userUuid}/acl": { + "get": { + "summary": "Get explicit ACL entries for an identity", + "description": "Retrieves explicit ACL entries for the specified identity, grouped by resource", + "operationId": "getIdentityAcl", + "parameters": [ + { + "name": "userUuid", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Identity ACL retrieval was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdentityAclViewDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/auth/resources/acl": { + "get": { + "summary": "Get the ACL for a specific resource", + "description": "Retrieves explicit ACL entries for the given resource", + "operationId": "getResourceAcl", + "parameters": [ + { + "name": "resourceType", + "in": "query", + "description": "Resource type", + "required": true, + "schema": { + "type": "string" + }, + "example": "TOPIC" + }, + { + "name": "resourceKey", + "in": "query", + "description": "Resource key or identifier", + "required": true, + "schema": { + "type": "string" + }, + "example": "/sensors/room1/temp" + } + ], + "responses": { + "200": { + "description": "ACL retrieval was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AclResourceViewDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "put": { + "summary": "Replace the ACL for a specific resource", + "description": "Replaces the explicit ACL entries for the given resource with the provided set", + "operationId": "updateResourceAcl", + "parameters": [ + { + "name": "batchTimeoutMillis", + "in": "query", + "schema": { + "type": "integer", + "format": "int64", + "default": 5000 + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AclResourceUpdateRequestDTO" + } + } + } + }, + "responses": { + "200": { + "description": "ACL update was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AclResourceViewDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/auth/groups": { + "get": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Get all groups", + "description": "Retrieves all currently known groups. Requires authentication if enabled in the configuration.", + "operationId": "getAllGroups", + "parameters": [ + { + "name": "filter", + "in": "query", + "description": "Optional filter string ", + "schema": { + "type": "string", + "example": "name = 'admin'" + } + } + ], + "responses": { + "200": { + "description": "Get all groups was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupDTO" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "post": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Add new group", + "description": "Adds a new group to the group list. Requires authentication if enabled in the configuration.", + "operationId": "addGroup", + "requestBody": { + "content": { + "*/*": { + "schema": { + "type": "string" + } + } + } + }, + "responses": { + "200": { + "description": "Add group was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/auth/groups/{groupUuid}/{userUuid}": { + "post": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Add user to group", + "description": "Adds a user to a group using the UUID of the user and UUID of the group . Requires authentication if enabled in the configuration.", + "operationId": "addUserToGroup", + "parameters": [ + { + "name": "groupUuid", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userUuid", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Add group to user was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "delete": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Removes a user from group", + "description": "Removes a user from a group using the users UUID and the groups UUID . Requires authentication if enabled in the configuration.", + "operationId": "removeUserFromGroup", + "parameters": [ + { + "name": "groupUuid", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userUuid", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Remove user from group was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/auth/groups/{groupUuid}": { + "get": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Get group by UUID", + "description": "Retrieve the group using the UUID of the specific group. Requires authentication if enabled in the configuration.", + "operationId": "getGroupById", + "parameters": [ + { + "name": "groupUuid", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Get groupby id was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "delete": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Delete a group", + "description": "Deletes a group from the list and removes all user memberships. Requires authentication if enabled in the configuration.", + "operationId": "deleteGroup", + "parameters": [ + { + "name": "groupUuid", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Delete group was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/auth/user-lockouts": { + "get": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Get all currently locked users", + "description": "Retrieves all currently known users that are locked out due to failed log in attempts.", + "operationId": "getAllLockedUsers", + "responses": { + "200": { + "description": "Get all users was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LockStatus" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/auth/user-lockouts/{userUuid}": { + "delete": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Unlocks a user that is currently locked due to invalid login attempts", + "description": "When a user exceeds the failed login attempts they are locked out for a period of time", + "operationId": "unlockUser", + "parameters": [ + { + "name": "userUuid", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Unlock was successful", + "content": { + "application/json": {} + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/auth/users": { + "get": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Get all users", + "description": "Retrieves all currently known users filtered by the optional filter string, SQL like syntax. Requires authentication if enabled in the configuration.", + "operationId": "getAllUsers", + "parameters": [ + { + "name": "filter", + "in": "query", + "description": "Optional filter string ", + "schema": { + "type": "string", + "example": "username = 'bill'" + } + } + ], + "responses": { + "200": { + "description": "Get all users was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserDTO" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "post": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Add a new user", + "description": "Adds a new user to the system. Requires authentication if enabled in the configuration.", + "operationId": "addUser", + "requestBody": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/NewUserDTO" + } + } + } + }, + "responses": { + "200": { + "description": "Add user was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/auth/users/{userUuid}/password": { + "put": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Change user password", + "description": "Change the password for a user. Admin may reset any user. A user may change their own password; currentPassword may be required depending on policy.", + "operationId": "changeUserPassword", + "parameters": [ + { + "name": "userUuid", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChangePasswordDTO" + } + } + } + }, + "responses": { + "204": { + "description": "Password changed" + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "404": { + "description": "User not found" + } + } + } + }, + "/api/v1/auth/users/{userUuid}": { + "get": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Get user by username", + "description": "Retrieve the user by username. Requires authentication if enabled in the configuration.", + "operationId": "getUser", + "parameters": [ + { + "name": "userUuid", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Get user was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "delete": { + "tags": [ + "Authentication and Authorisation Management" + ], + "summary": "Delete a user", + "description": "Deletes a user from the system. Requires authentication if enabled in the configuration.", + "operationId": "deleteUser", + "parameters": [ + { + "name": "userUuid", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Delete user was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/connections/{connectionId}": { + "get": { + "tags": [ + "Connection Management" + ], + "summary": "Get connection details for the specified id", + "description": "Retrieve the details of the specified connection id. Requires authentication if enabled in the configuration.", + "operationId": "getConnectionDetails", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Get specific connection details was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EndPointDetailsDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "404": { + "description": "Connection not found" + } + } + }, + "delete": { + "tags": [ + "Connection Management" + ], + "summary": "Close a connection", + "description": "Requests the connection specified be closed. Requires authentication if enabled in the configuration.", + "operationId": "closeSpecificConnection", + "parameters": [ + { + "name": "connectionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Close connection was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "404": { + "description": "Connection not found" + } + } + } + }, + "/api/v1/server/connections": { + "get": { + "tags": [ + "Connection Management" + ], + "summary": "Get all connections", + "description": "Retrieve a list of all current connections to the server, can be filtered with the optional filter string. Requires authentication if enabled in the configuration.", + "operationId": "getAllConnections", + "parameters": [ + { + "name": "filter", + "in": "query", + "description": "Optional filter string ", + "schema": { + "type": "string", + "example": "totalOverflow > 10 OR totalUnderflow > 5" + } + } + ], + "responses": { + "200": { + "description": "Get all connections was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndPointSummaryDTO" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/destination": { + "get": { + "tags": [ + "Destination Management" + ], + "summary": "Retrieve a list of all destinations with optional filtering and sorting", + "description": "Fetch a paginated list of all known destinations. You can filter the list using a selector string, limit the number of returned entries using the 'size' parameter, and sort the results by attributes such as Name, Published Messages, or Stored Messages. Cached results are returned if available to enhance performance. Authentication is required if the server configuration mandates it.", + "operationId": "getAllDestinations", + "parameters": [ + { + "name": "filter", + "in": "query", + "description": "An optional filter string for selecting specific destinations. The filter should be a valid expression that complies with the selector syntax.", + "schema": { + "type": "string", + "example": "type = 'topic' AND storedMessages > 50" + } + }, + { + "name": "size", + "in": "query", + "description": "The maximum number of destinations to return in the response. A default value is used if this parameter is not provided.", + "schema": { + "type": "integer", + "format": "int32", + "example": 100, + "default": 40 + } + }, + { + "name": "sortBy", + "in": "query", + "description": "The attribute by which the list of destinations should be sorted before returning. Possible values include Name, Published, Delivered, Stored, Pending, Delayed, and Expired.", + "schema": { + "type": "string", + "example": "Published", + "enum": [ + "Name", + "Published", + "Delivered", + "Stored", + "Pending", + "Delayed", + "Expired" + ], + "default": "Published" + } + } + ], + "responses": { + "200": { + "description": "Get all destinations was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DestinationDTO" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/destination/detail": { + "get": { + "tags": [ + "Destination Management" + ], + "summary": "Retrieve detailed information about a destination", + "description": "Fetch detailed information for a specific destination identified by its name. Authentication is required if the server configuration mandates it. Cached results are returned if available to enhance performance.", + "operationId": "getDestinationDetails", + "parameters": [ + { + "name": "destinationName", + "in": "query", + "description": "The name of the destination for which details are requested", + "required": true, + "schema": { + "type": "string", + "example": "destination-01" + } + } + ], + "responses": { + "200": { + "description": "Get destination details was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DestinationDetailsResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "404": { + "description": "Destination not found" + } + } + } + }, + "/api/v1/server/discovery/config": { + "get": { + "tags": [ + "Discovery Management" + ], + "summary": "Get the discovery agents configuration", + "description": "Retrieves the configuration used to the discovery agent. Requires authentication if enabled in the configuration.", + "operationId": "getDiscoveryAgentConfiguration", + "responses": { + "200": { + "description": "Get discobvery config was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DiscoveryManagerConfigDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "post": { + "tags": [ + "Discovery Management" + ], + "summary": "Update the discovery agents configuration", + "description": "Updates the configuration used to control the discovery agent. Requires authentication if enabled in the configuration.", + "operationId": "updateDiscoveryAgentConfiguration", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DiscoveryManagerConfigDTO" + } + } + } + }, + "responses": { + "200": { + "description": "Update discovery configuration was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "304": { + "description": "No changes made" + } + }, + "security": [ + { + "basicAuth": [] + } + ] + } + }, + "/api/v1/server/discovery": { + "get": { + "tags": [ + "Discovery Management" + ], + "summary": "Get discovered servers", + "description": "Retrieve a list of all currently discovered servers, can be filtered with the optional filter. Requires authentication if enabled in the configuration.", + "operationId": "getAllDiscoveredServers", + "parameters": [ + { + "name": "filter", + "in": "query", + "description": "Optional filter string ", + "schema": { + "type": "string", + "example": "schemaSupport = TRUE OR systemTopicPrefix IS NOT NULL" + } + } + ], + "responses": { + "200": { + "description": "Update discovery configuration was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DiscoveredServersDTO" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + }, + "security": [ + { + "basicAuth": [] + } + ] + }, + "patch": { + "tags": [ + "Discovery Management" + ], + "summary": "Manages the discovery manager", + "description": "Manages the state of the discovery manager", + "operationId": "handleDiscoveryActionRequest", + "requestBody": { + "description": "Requested action to apply to all inter-server connections", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RequestedAction" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/hardware/config": { + "get": { + "tags": [ + "Hardware Management" + ], + "summary": "Get hardware configuration", + "description": "Retrieve the configuration for the hardware sub-system. Requires authentication if enabled in the configuration.", + "operationId": "getDeviceConfig", + "responses": { + "200": { + "description": "Get hardware config was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceManagerConfigDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "post": { + "tags": [ + "Hardware Management" + ], + "summary": "Update hardware configuration", + "description": "Update the configuration for the hardware sub-system. Requires authentication if enabled in the configuration.", + "operationId": "updateDeviceConfig", + "requestBody": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/DeviceManagerConfigDTO" + } + } + } + }, + "responses": { + "200": { + "description": "Update device config was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "304": { + "description": "No changes made" + } + } + } + }, + "/api/v1/server/hardware": { + "get": { + "tags": [ + "Hardware Management" + ], + "summary": "Get known devices", + "description": "Retreive a list of all detected devices currently online. Requires authentication if enabled in the configuration.", + "operationId": "getAllDiscoveredDevices", + "responses": { + "200": { + "description": "Get all discovered devices was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DeviceInfoDTO" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/hardware/scan": { + "post": { + "tags": [ + "Hardware Management" + ], + "summary": "Scan for new hardware", + "description": "Requests a scan to detect new hardware on I2C bus or configured devices. Requires authentication if enabled in the configuration.", + "operationId": "scanForDevices", + "responses": { + "200": { + "description": "Scan for devices was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/integration/{name}": { + "get": { + "tags": [ + "Server Integration Management" + ], + "summary": "Get integration by name", + "description": "Retrieves the configuration on the inter-server integration connection. Requires authentication if enabled in the configuration.", + "operationId": "getByNameIntegration", + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationInfoDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "404": { + "description": "Integration name was not found" + } + } + }, + "patch": { + "tags": [ + "Server Integration Management" + ], + "summary": "Manages inter-server connection", + "description": "Handles state for the inter-server connection", + "operationId": "handleIntegrationActionRequest", + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Requested action to apply to inter-server connection", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RequestedAction" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/integration/{name}/connection": { + "get": { + "tags": [ + "Server Integration Management" + ], + "summary": "Get integration status by name", + "description": "Retrieves the current status on the inter-server integration connection. Requires authentication if enabled in the configuration.", + "operationId": "getIntegrationConnection", + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EndPointSummaryDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "404": { + "description": "Integration name was not found" + } + } + } + }, + "/api/v1/server/integration/{name}/status": { + "get": { + "tags": [ + "Server Integration Management" + ], + "summary": "Get inter-server status", + "description": "Retrieve the current status for the inter-server specified by name. Requires authentication if enabled in the configuration.", + "operationId": "getIntegrationStatus", + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationStatusDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/integrations/status": { + "get": { + "tags": [ + "Server Integration Management" + ], + "summary": "Get all inter-server status", + "description": "Retrieve all current statuses for the inter-server. Requires authentication if enabled in the configuration.", + "operationId": "getAllIntegrationStatus", + "parameters": [ + { + "name": "filter", + "in": "query", + "description": "Optional filter string ", + "schema": { + "type": "string", + "example": "state = PAUSED" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationListStatus" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/integrations": { + "get": { + "tags": [ + "Server Integration Management" + ], + "summary": "Get all inter-server connections", + "description": "Retrieves a list of all inter-server configurations. Requires authentication if enabled in the configuration.", + "operationId": "getAllIntegrations", + "parameters": [ + { + "name": "filter", + "in": "query", + "description": "Optional filter string ", + "schema": { + "type": "string", + "example": "state = PAUSED" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IntegrationDetailResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "patch": { + "tags": [ + "Server Integration Management" + ], + "summary": "Manages all inter-server connections", + "description": "Handles state for all inter-server connections", + "operationId": "handleIntegrationActionRequest_1", + "requestBody": { + "description": "Requested action to apply to all inter-server connections", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RequestedAction" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/interfaces/{endpoint}": { + "get": { + "tags": [ + "Server Interface Management" + ], + "summary": "Get end point configurations", + "description": "Get the end point configuration specifed by the name. Requires authentication if enabled in the configuration.", + "operationId": "getEndPoint", + "parameters": [ + { + "name": "endpoint", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InterfaceInfoDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "404": { + "description": "Endpoint not found" + } + } + }, + "put": { + "tags": [ + "Server Interface Management" + ], + "summary": "Update end point configuration", + "description": "Update the configuration supplied for the named endpoint.", + "operationId": "updateInterfaceConfiguration", + "parameters": [ + { + "name": "endpoint", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/EndPointServerConfigDTO" + } + } + } + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "404": { + "description": "Endpoint not found" + } + } + }, + "patch": { + "tags": [ + "Server Interface Management" + ], + "summary": "Controls the specific end point", + "description": "Applies the requested state to all configured interface endpoints.", + "operationId": "manageSpecificInterface", + "parameters": [ + { + "name": "endpoint", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Requested action to apply to all inter-server connections", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RequestedAction" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/interfaces/{endpoint}/connections": { + "get": { + "tags": [ + "Server Interface Management" + ], + "summary": "Get end point connections", + "description": "Get current connections on this endpoint. Requires authentication if enabled in the configuration.", + "operationId": "getEndPointConnections", + "parameters": [ + { + "name": "endpoint", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EndPointSummaryDTO" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/interfaces/{endpoint}/status": { + "get": { + "tags": [ + "Server Interface Management" + ], + "summary": "Get end point status", + "description": "Get the current status and metrics for the specified end point.", + "operationId": "getInterfaceStatus", + "parameters": [ + { + "name": "endpoint", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InterfaceStatusDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/interfaces/status": { + "get": { + "tags": [ + "Server Interface Management" + ], + "summary": "Get all end point status", + "description": "Get all end point statuses and metrics, fitlered with the optional filter.", + "operationId": "getAllInterfaceStatus", + "parameters": [ + { + "name": "filter", + "in": "query", + "description": "Optional filter string ", + "schema": { + "type": "string", + "example": "state = 'started'" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InterfaceStatusDTO" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/interfaces": { + "get": { + "tags": [ + "Server Interface Management" + ], + "summary": "Get all end point details", + "description": "get all end point configuration details, filtered with the optional filter.", + "operationId": "getAllInterfaces", + "parameters": [ + { + "name": "filter", + "in": "query", + "description": "Optional filter string ", + "schema": { + "type": "string", + "example": "state = 'started'" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InterfaceInfoDTO" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "patch": { + "tags": [ + "Server Interface Management" + ], + "summary": "Manages all end points", + "description": "Manages actions on all endpoints.", + "operationId": "handleInterfaceActionRequest", + "requestBody": { + "description": "Requested action to apply to all inter-server connections", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RequestedAction" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/log": { + "get": { + "tags": [ + "Logging Monitor" + ], + "summary": "Get last stored log entries", + "description": "Retrieve the last configured number of log entries from the server", + "operationId": "getLogEntries", + "parameters": [ + { + "name": "filter", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LogEntries" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/log/sse": { + "get": { + "tags": [ + "Logging Monitor" + ], + "summary": "Request a temporary token to access the server side logs", + "description": "Retrieve a temporary token that allows access to the server side log stream", + "operationId": "requestSseToken", + "responses": { + "200": { + "description": "String token to use to access the log SSE", + "content": { + "text": {} + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/log/sse/stream/{token}": { + "get": { + "tags": [ + "Logging Monitor" + ], + "summary": "Stream live log entries", + "description": "Subscribe to dynamic log events using Server-Sent Events", + "operationId": "streamLogs", + "parameters": [ + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "filter", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "SSE stream of LogEntry events", + "content": { + "text/event-stream": { + "schema": { + "$ref": "#/components/schemas/LogEntry" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/device/lora": { + "get": { + "tags": [ + "LoRa Device Management" + ], + "summary": "Retrieve all LoRa devices", + "description": "Fetches a list of all LoRa devices along with their configurations and statistics.", + "operationId": "getAllLoRaDevices", + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LoRaDeviceInfoDTO" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/device/lora/{deviceName}": { + "get": { + "tags": [ + "LoRa Device Management" + ], + "summary": "Retrieve a specific LoRa device", + "description": "Fetches the details of a specific LoRa device identified by its name.", + "operationId": "getLoRaDevice", + "parameters": [ + { + "name": "deviceName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoRaDeviceInfoDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "404": { + "description": "LoRa device not found" + } + } + } + }, + "/api/v1/device/lora/{deviceName}/{nodeId}": { + "get": { + "tags": [ + "LoRa Device Management" + ], + "summary": "Retrieve endpoint connections for a LoRa device", + "description": "Fetches the connection information for a specific endpoint of a LoRa device, identified by the device name and node ID.", + "operationId": "getLoRaEndPointConnections", + "parameters": [ + { + "name": "deviceName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "nodeId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LoRaEndPointConnectionInfoDTO" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/device/lora/config": { + "get": { + "tags": [ + "LoRa Device Management" + ], + "summary": "Retrieve all LoRa device configurations", + "description": "Fetches a list of all configured LoRa devices and their settings.", + "operationId": "getAllLoRaDeviceConfigs", + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LoRaDeviceConfigInfoDTO" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "post": { + "tags": [ + "LoRa Device Management" + ], + "summary": "Add a new LoRa device configuration", + "description": "Creates a new LoRa device configuration and adds it to the system.", + "operationId": "addLoRaDeviceConfig", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoRaDeviceConfigInfoDTO" + } + } + } + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "404": { + "description": "Device not found" + } + } + } + }, + "/api/v1/device/lora/{deviceName}/config": { + "get": { + "tags": [ + "LoRa Device Management" + ], + "summary": "Retrieve a specific LoRa device configuration", + "description": "Fetches the configuration for a specific LoRa device identified by its name.", + "operationId": "getLoRaDeviceConfig", + "parameters": [ + { + "name": "deviceName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoRaDeviceConfigInfoDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "404": { + "description": "Device not found" + } + } + }, + "delete": { + "tags": [ + "LoRa Device Management" + ], + "summary": "Delete a specific LoRa device configuration", + "description": "Removes a LoRa device configuration identified by its unique ID.", + "operationId": "deleteLoRaDeviceConfig", + "parameters": [ + { + "name": "deviceName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "404": { + "description": "Device not found" + } + } + } + }, + "/api/v1/messaging/abort": { + "post": { + "tags": [ + "Messaging Interface" + ], + "summary": "Abort the message", + "description": "Abort the message specifed by the id and the destination name", + "operationId": "abortMessages", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TransactionData" + } + } + } + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/messaging/commit": { + "post": { + "tags": [ + "Messaging Interface" + ], + "summary": "Commit the message", + "description": "Commit the message specifed by the id and the destination name", + "operationId": "commitMessages", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TransactionData" + } + } + } + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/messaging/consume": { + "post": { + "tags": [ + "Messaging Interface" + ], + "summary": "Get messages", + "description": "Retrieves messages for a specified subscription", + "operationId": "consumeMessages", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConsumeRequestDTO" + } + } + } + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConsumedResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/messaging/subscriptionDepth": { + "post": { + "tags": [ + "Messaging Interface" + ], + "summary": "Get message depth", + "description": "Get the depth of the queue for a specified subscription", + "operationId": "getSubscriptionDepth", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConsumeRequestDTO" + } + } + } + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionDepthResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/messaging/publish": { + "post": { + "tags": [ + "Messaging Interface" + ], + "summary": "Publish a message", + "description": "Publishes a message to a specified topic", + "operationId": "publishMessage", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublishRequestDTO" + } + } + } + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/messaging/sse": { + "get": { + "tags": [ + "Messaging Interface" + ], + "summary": "Request a temporary token to access the listed destinations events", + "description": "Retrieve a temporary token that allows access to the destinations event stream", + "operationId": "requestSseMessageToken", + "parameters": [ + { + "name": "destination", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "String token to use to access the log SSE", + "content": { + "text": {} + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/messaging/sse/stream/{token}": { + "get": { + "tags": [ + "Messaging Interface" + ], + "summary": "Expose AsyncMessageDTO in OpenAPI", + "description": "Delivers messages via Server Side Events, supports MQTT wild card plus JMS style filtering", + "operationId": "subscribeSSE", + "parameters": [ + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "destinationName", + "in": "query", + "required": true, + "schema": { + "title": "Destination Name", + "type": "string", + "description": "The name of the destination (e.g., topic or queue) to which the subscription is bound.Supports MQTT style wild card subscription", + "example": "sensor/data or /sensor/# " + } + }, + { + "name": "namedSubscription", + "in": "query", + "schema": { + "title": "Named Subscription", + "type": "string", + "description": "An optional name for a named subscription, allowing clients to re-use existing subscriptions if provided.", + "nullable": true, + "example": "temperatureAlerts" + } + }, + { + "name": "filter", + "in": "query", + "schema": { + "title": "Filter Expression", + "type": "string", + "description": "An optional filter expression written in JMS selector syntax to filter messages received by the subscription.", + "nullable": true, + "example": "temperature > 25" + } + }, + { + "name": "maxDepth", + "in": "query", + "schema": { + "title": "Maximum Queue Depth", + "type": "integer", + "description": "The maximum number of messages that can be queued for the subscription before new messages are dropped.", + "format": "int32", + "nullable": true, + "example": 10, + "default": 1 + } + }, + { + "name": "retainMessage", + "in": "query", + "schema": { + "title": "Retain Message", + "type": "boolean", + "description": "Indicates if messages should be retained on the destination for this subscription, meaning they will be stored and made available to future subscribers.", + "nullable": true, + "example": false, + "default": false + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AsyncMessageDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/messaging/subscribe": { + "post": { + "tags": [ + "Messaging Interface" + ], + "summary": "Subscribe to a topic", + "description": "Subscribes to a specified topic", + "operationId": "subscribeToTopic", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionRequestDTO" + } + } + } + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/messaging/unsubscribe": { + "post": { + "tags": [ + "Messaging Interface" + ], + "summary": "Unsubscribe from a topic", + "description": "Unsubscribes from a specified topic", + "operationId": "unsubscribeToTopic", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionRequestDTO" + } + } + } + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/models/{modelName}": { + "get": { + "tags": [ + "ML Model Store" + ], + "summary": "Download model", + "description": "Downloads a model by name.", + "operationId": "getModel", + "parameters": [ + { + "name": "modelName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Model content" + }, + "404": { + "description": "Model not found" + } + } + }, + "post": { + "tags": [ + "ML Model Store" + ], + "summary": "ML Model upload", + "description": "uploads a model", + "operationId": "uploadModel", + "parameters": [ + { + "name": "modelName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "object" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Model content" + }, + "404": { + "description": "Model not found" + } + } + }, + "delete": { + "tags": [ + "ML Model Store" + ], + "summary": "Delete model", + "description": "Deletes the model by name.", + "operationId": "deleteModel", + "parameters": [ + { + "name": "modelName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Model deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusResponse" + } + } + } + } + } + }, + "head": { + "tags": [ + "ML Model Store" + ], + "summary": "Check if model exists", + "description": "Checks if a model with the given name exists.", + "operationId": "modelExists", + "parameters": [ + { + "name": "modelName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Model exists" + }, + "404": { + "description": "Model not found" + } + } + } + }, + "/api/v1/server/models": { + "get": { + "tags": [ + "ML Model Store" + ], + "summary": "List all models", + "description": "Returns a list of all available model names.", + "operationId": "listModels", + "responses": { + "200": { + "description": "List of model names", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "406": { + "description": "ML not supported" + } + } + } + }, + "/api/v1/server/schemas": { + "get": { + "tags": [ + "Schema Management" + ], + "summary": "Get all schemas", + "description": "Retrieves all schema configurations, optionally filtered by a query string.", + "operationId": "getAllSchemas", + "parameters": [ + { + "name": "filter", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SchemaConfig" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "post": { + "tags": [ + "Schema Management" + ], + "summary": "Add new schema", + "description": "Adds a new schema configuration to the system.", + "operationId": "addSchema", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SchemaPostDTO" + } + } + } + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "delete": { + "tags": [ + "Schema Management" + ], + "summary": "Delete all schemas", + "description": "Deletes all schemas, optionally filtered by a query string.", + "operationId": "deleteAllSchemas", + "parameters": [ + { + "name": "filter", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/schemas/{schemaId}": { + "get": { + "tags": [ + "Schema Management" + ], + "summary": "Get specific schema", + "description": "Retrieves the details of a specific schema by its unique ID.", + "operationId": "getSchemaById", + "parameters": [ + { + "name": "schemaId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "delete": { + "tags": [ + "Schema Management" + ], + "summary": "Delete specific schema", + "description": "Deletes a schema configuration by its unique ID.", + "operationId": "deleteSchemaById", + "parameters": [ + { + "name": "schemaId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + }, + "404": { + "description": "Schema not found" + } + } + } + }, + "/api/v1/server/schemas/formats": { + "get": { + "tags": [ + "Schema Management" + ], + "summary": "Get supported formats", + "description": "Retrieves a list of all known schema formats supported by the system.", + "operationId": "getKnownFormats", + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StringListResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/schemas/link-format": { + "get": { + "tags": [ + "Schema Management" + ], + "summary": "Get link-format configuration", + "description": "Retrieves the link-format configuration list.", + "operationId": "getLinkFormat", + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/schemas/context/{context}": { + "get": { + "tags": [ + "Schema Management" + ], + "summary": "Get schemas by context", + "description": "Retrieves all schemas that match the specified context.", + "operationId": "getSchemaByContext", + "parameters": [ + { + "name": "context", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/schemas/type/{type}": { + "get": { + "tags": [ + "Schema Management" + ], + "summary": "Get schemas by type", + "description": "Retrieves all schemas that match the specified type.", + "operationId": "getSchemaByType", + "parameters": [ + { + "name": "type", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/schemas/impl/{schemaId}": { + "get": { + "tags": [ + "Schema Management" + ], + "summary": "Get specific schema definition", + "description": "Retrieves the schema artifact bytes by unique ID.", + "operationId": "getSchemaImplById", + "parameters": [ + { + "name": "schemaId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "*/*": {} + } + }, + "304": { + "description": "Not Modified" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + } + } + } + }, + "/api/v1/server/schemas/map": { + "get": { + "tags": [ + "Schema Management" + ], + "summary": "Get schema mappings", + "description": "Retrieves all schemas and their associated mapping information.", + "operationId": "getSchemaMapping", + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SchemaMapResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/cache": { + "get": { + "tags": [ + "Server Config Management" + ], + "summary": "Retrieve cache information", + "description": "Fetches detailed information about the server's central cache, including size, usage statistics, and entries.", + "operationId": "getCacheInformation", + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CacheInfo" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "delete": { + "tags": [ + "Server Config Management" + ], + "summary": "Clear cache", + "description": "Clears all entries in the server's central cache to free up memory and ensure data consistency.", + "operationId": "clearCacheInformation", + "responses": { + "204": { + "description": "Cache cleared successfully (no content)" + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/config": { + "get": { + "tags": [ + "Server Config Management" + ], + "summary": "Retrieve server configuration", + "description": "Fetches the current server configuration settings as a JSON object. Uses caching for improved performance.", + "operationId": "getServerConfig", + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MessageDaemonConfigDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + }, + "put": { + "tags": [ + "Server Config Management" + ], + "summary": "Update server configuration", + "description": "Updates the server configuration with the provided settings. Saves changes to disk and clears relevant cache entries to ensure consistency.", + "operationId": "updateServerConfig", + "requestBody": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/MessageDaemonConfigDTO" + } + } + } + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/details/info": { + "get": { + "tags": [ + "Server Management" + ], + "summary": "Get server build information", + "description": "Retrieves detailed information about the server build, such as version and configuration details. Uses caching for improved performance.", + "operationId": "getBuildInfo", + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServerInfoDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/details/stats": { + "get": { + "tags": [ + "Server Management" + ], + "summary": "Get server statistics", + "description": "Retrieves server usage statistics, including metrics such as CPU usage, memory usage, and active connections. Uses caching for improved performance.", + "operationId": "getStats", + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServerStatisticsDTO" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/health": { + "get": { + "tags": [ + "Server Management" + ], + "summary": "Get server subsystem status summary", + "description": "Returns a simple summary of the server status.", + "operationId": "getServerHealthSummary", + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServerHealthStateResponse" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server/status": { + "get": { + "tags": [ + "Server Management" + ], + "summary": "Get server subsystem status", + "description": "Retrieves the current status of all server subsystems, including their operational state (e.g., OK, Warning, or Error). Uses caching for improved performance.", + "operationId": "getServerStatus", + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SubSystemStatusDTO" + } + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/api/v1/server": { + "patch": { + "tags": [ + "Server Management" + ], + "summary": "Restart or shutdown the server", + "description": "Restarts or shuts down the server gracefully, preserving any necessary state before the restart operation begins.", + "operationId": "serverAction", + "requestBody": { + "description": "Requested action to apply to all inter-server connections", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RequestedAction" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Operation was successful", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad request" + }, + "401": { + "description": "Invalid credentials or unauthorized access" + }, + "403": { + "description": "User is not authorised to access the resource" + } + } + } + }, + "/application.wadl/{path}": { + "get": { + "operationId": "getExternalGrammar", + "parameters": [ + { + "name": "path", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "default": { + "description": "default response", + "content": { + "application/xml": {} + } + } + } + } + }, + "/application.wadl": { + "get": { + "operationId": "getWadl", + "responses": { + "default": { + "description": "default response", + "content": { + "application/vnd.sun.wadl+xml": {}, + "application/xml": {} + } + } + } + } + } + }, + "components": { + "schemas": { + "UpdateCheckResponse": { + "type": "object", + "properties": { + "schemaUpdate": { + "type": "integer", + "format": "int64" + }, + "destinationUpdate": { + "type": "integer", + "format": "int64" + }, + "interfaceUpdate": { + "type": "integer", + "format": "int64" + } + } + }, + "LoginResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "username": { + "type": "string" + }, + "accessMap": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "uniqueId": { + "type": "string", + "format": "uuid" + } + } + }, + "LoginRequest": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "The username for login", + "example": "admin" + }, + "password": { + "type": "string", + "description": "The password for login", + "example": "P@ssw0rd!" + }, + "persistent": { + "type": "boolean", + "description": "Whether the session should be persistent", + "example": true + }, + "sessionId": { + "type": "string", + "description": "Optional client-provided session ID", + "example": "session-12345" + }, + "longLived": { + "type": "boolean", + "description": "Request a long-lived session (e.g. 7 days)", + "example": true + } + }, + "description": "Login request payload containing credentials and session options" + }, + "StatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + } + } + }, + "AuthManagerConfigDTO": { + "type": "object", + "properties": { + "authenticationEnabled": { + "type": "boolean", + "description": "Indicates if authentication is enabled", + "example": true + }, + "authorisationEnabled": { + "type": "boolean", + "description": "Indicates if authorization is enabled", + "example": true + }, + "authConfig": { + "type": "object", + "description": "Configuration properties for authentication" + }, + "minimumPasswordLength": { + "minimum": 1, + "type": "integer", + "description": "Minimum password length.", + "format": "int32", + "example": 12 + }, + "maximumPasswordLength": { + "minimum": 6, + "type": "integer", + "description": "Maximum password length.", + "format": "int32", + "example": 128 + }, + "minimumLowercase": { + "minimum": 0, + "type": "integer", + "description": "Minimum number of lowercase letters required.", + "format": "int32", + "example": 1 + }, + "minimumUppercase": { + "minimum": 0, + "type": "integer", + "description": "Minimum number of uppercase letters required.", + "format": "int32", + "example": 1 + }, + "minimumDigits": { + "minimum": 0, + "type": "integer", + "description": "Minimum number of digits required.", + "format": "int32", + "example": 1 + }, + "minimumSpecial": { + "minimum": 0, + "type": "integer", + "description": "Minimum number of special characters required.", + "format": "int32", + "example": 1 + }, + "allowedSpecialCharacters": { + "type": "string", + "description": "Allowed special characters set. If empty/null, any non-alphanumeric character may be treated as special (implementation-defined).", + "example": "!@#$%^&*()-_=+[]{};:,.?/\\|" + }, + "rejectWhitespace": { + "type": "boolean", + "description": "If true, whitespace characters are rejected in passwords.", + "example": true + }, + "rejectContainsUsername": { + "type": "boolean", + "description": "If true, passwords containing the username (case-insensitive) are rejected.", + "example": true + }, + "maximumConsecutiveIdenticalCharacters": { + "minimum": 0, + "type": "integer", + "description": "Maximum number of identical consecutive characters allowed (e.g., 'aaa'). Use 0 to disable.", + "format": "int32", + "example": 3 + }, + "passwordRegex": { + "type": "string", + "description": "If set, overrides composition rules. Java regex pattern the password must match. Leave null to use the composition settings.", + "example": "^(?=.{12,128}$)(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*()\\-_=+\\[\\]{};:,.?/\\\\|]).*$" + }, + "passwordHistoryCount": { + "minimum": 0, + "type": "integer", + "description": "Number of previous passwords that cannot be reused. Use 0 to disable.", + "format": "int32", + "example": 5 + }, + "passwordMaxAgeDays": { + "minimum": 0, + "type": "integer", + "description": "Maximum password age in days before forcing a reset. Use 0 to disable.", + "format": "int32", + "example": 90 + }, + "maxFailuresBeforeLock": { + "minimum": 1, + "type": "integer", + "description": "Number of consecutive authentication failures required before an account is locked.", + "format": "int32", + "example": 5 + }, + "initialLockSeconds": { + "minimum": 1, + "type": "integer", + "description": "Initial lock duration in seconds once the failure threshold is exceeded. Subsequent locks may increase up to the configured maximum.", + "format": "int32", + "example": 30 + }, + "maxLockSeconds": { + "minimum": 1, + "type": "integer", + "description": "Maximum lock duration in seconds. Lock times will not grow beyond this value regardless of repeated failures.", + "format": "int32", + "example": 900 + }, + "failureDecaySeconds": { + "minimum": 1, + "type": "integer", + "description": "Time in seconds after which recorded authentication failures decay if no new failures occur. This allows accounts to recover naturally over time.", + "format": "int32", + "example": 900 + }, + "enableSoftDelay": { + "type": "boolean", + "description": "Enable progressive response delays before lockout is triggered. When enabled, each failed attempt adds a short delay before authentication is processed.", + "example": true + }, + "softDelayMillisPerFailure": { + "minimum": 0, + "type": "integer", + "description": "Additional delay in milliseconds applied per authentication failure when soft delay is enabled.", + "format": "int32", + "example": 200 + }, + "maxSoftDelayMillis": { + "minimum": 0, + "type": "integer", + "description": "Maximum cumulative soft delay in milliseconds that can be applied before authentication processing. Prevents unbounded delays.", + "format": "int32", + "example": 2000 + } + }, + "description": "Auth Manager Configuration DTO" + }, + "AclCheckResponseDTO": { + "type": "object", + "properties": { + "decision": { + "type": "string", + "description": "Decision for the requested permission", + "example": "ALLOW", + "enum": [ + "ALLOW", + "DENY" + ] + }, + "permission": { + "type": "string", + "description": "Permission name that was checked", + "example": "publish" + }, + "reason": { + "type": "string", + "description": "Human readable explanation of how this decision was reached" + }, + "sources": { + "type": "array", + "description": "Optional list of rule summaries that contributed to the decision", + "items": { + "type": "string", + "description": "Optional list of rule summaries that contributed to the decision" + } + } + }, + "description": "Result of an ACL check" + }, + "AclCheckRequestDTO": { + "required": [ + "identityId", + "permission", + "resourceKey", + "resourceType" + ], + "type": "object", + "properties": { + "identityId": { + "type": "string", + "description": "Identity identifier", + "example": "admin" + }, + "resourceType": { + "type": "string", + "description": "Resource type", + "example": "TOPIC" + }, + "resourceKey": { + "type": "string", + "description": "Resource key or identifier", + "example": "/sensors/room1/temp" + }, + "permission": { + "type": "string", + "description": "Permission name to check", + "example": "publish" + }, + "explain": { + "type": "boolean", + "description": "If true, the server should include human readable explanation" + } + }, + "description": "Request to check access for an identity to a resource with a permission" + }, + "AuthorisationConfigDTO": { + "title": "Authorisation Static Configuration DTO", + "type": "object", + "properties": { + "permissions": { + "type": "array", + "description": "List of known permissions that can granted to identities and groups", + "example": "CONNECT, PUBLISH", + "items": { + "$ref": "#/components/schemas/PermissionDetailsDTO" + } + }, + "resourceTypes": { + "type": "array", + "description": "Set of known and enforced resource types", + "example": "server, topic, queue", + "items": { + "$ref": "#/components/schemas/ResourceTypeDetailsDTO" + } + } + }, + "description": "Contains the static configuration used by authorisation." + }, + "PermissionDetailsDTO": { + "title": "Permission details", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "server": { + "type": "boolean" + } + }, + "description": "Contains details about the permission.", + "example": "CONNECT, PUBLISH" + }, + "ResourceTypeDetailsDTO": { + "title": "Resource Type details", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "server": { + "type": "boolean" + } + }, + "description": "Contains details about the resource types.", + "example": "server, topic, queue" + }, + "IdentityAclEntryDTO": { + "required": [ + "effect", + "permissions", + "resourceKey", + "resourceType" + ], + "type": "object", + "properties": { + "resourceType": { + "type": "string", + "description": "Resource type", + "example": "TOPIC" + }, + "resourceKey": { + "type": "string", + "description": "Resource key or identifier", + "example": "/sensors/room1/temp" + }, + "effect": { + "type": "string", + "description": "Effect of this ACL entry", + "example": "ALLOW", + "enum": [ + "ALLOW", + "DENY" + ] + }, + "permissions": { + "type": "array", + "description": "List of permission names granted or denied", + "items": { + "type": "string", + "description": "List of permission names granted or denied" + } + } + }, + "description": "Explicit ACL entry for an identity or group, grouped by resource" + }, + "IdentityAclViewDTO": { + "type": "object", + "properties": { + "principalType": { + "type": "string", + "description": "Principal type", + "example": "IDENTITY", + "enum": [ + "IDENTITY", + "GROUP" + ] + }, + "principalId": { + "type": "string", + "description": "Principal identifier", + "example": "admin" + }, + "entries": { + "type": "array", + "description": "Explicit ACL entries grouped by resource", + "items": { + "$ref": "#/components/schemas/IdentityAclEntryDTO" + } + } + }, + "description": "View of explicit ACL entries for an identity or group" + }, + "AclEntryDTO": { + "required": [ + "effect", + "principalId", + "principalType" + ], + "type": "object", + "properties": { + "principalType": { + "type": "string", + "description": "Type of principal", + "example": "IDENTITY", + "enum": [ + "IDENTITY", + "GROUP" + ] + }, + "principalId": { + "type": "string", + "description": "Principal identifier (user id or group id)", + "example": "admin" + }, + "effect": { + "type": "string", + "description": "Effect of this ACL entry", + "example": "ALLOW", + "enum": [ + "ALLOW", + "DENY" + ] + }, + "permissions": { + "type": "array", + "description": "List of permission names granted or denied by this entry", + "items": { + "type": "string", + "description": "List of permission names granted or denied by this entry" + } + } + }, + "description": "Represents a single ACL entry for a principal on a resource" + }, + "AclResourceViewDTO": { + "required": [ + "entries", + "resourceKey", + "resourceType" + ], + "type": "object", + "properties": { + "resourceType": { + "type": "string", + "description": "Resource type", + "example": "TOPIC" + }, + "resourceKey": { + "type": "string", + "description": "Resource key or identifier", + "example": "/sensors/room1/temp" + }, + "entries": { + "type": "array", + "description": "Explicit ACL entries defined directly on this resource", + "items": { + "$ref": "#/components/schemas/AclEntryDTO" + } + } + }, + "description": "Represents the ACL for a specific resource" + }, + "AclResourceUpdateRequestDTO": { + "required": [ + "entries", + "resourceKey", + "resourceType" + ], + "type": "object", + "properties": { + "resourceType": { + "type": "string", + "description": "Resource type", + "example": "TOPIC" + }, + "resourceKey": { + "type": "string", + "description": "Resource key or identifier", + "example": "/sensors/room1/temp" + }, + "entries": { + "type": "array", + "description": "New set of ACL entries for this resource (explicit only)", + "items": { + "$ref": "#/components/schemas/AclEntryDTO" + } + } + }, + "description": "Request to replace the ACL for a specific resource" + }, + "GroupDTO": { + "title": "Group", + "required": [ + "name", + "uniqueId" + ], + "type": "object", + "properties": { + "name": { + "title": "Group Name", + "type": "string", + "description": "The name of the group, such as an administrative or user-defined role.", + "example": "admin" + }, + "uniqueId": { + "title": "Group Unique ID", + "type": "string", + "description": "The unique identifier for the group, generated as a UUID.", + "format": "uuid", + "example": "e808afcb-1ff9-46cd-a322-3119dbf1d071" + }, + "usersList": { + "title": "Group Members", + "type": "array", + "description": "A list of users of this group.", + "nullable": true, + "items": { + "$ref": "#/components/schemas/UserDTO" + } + } + }, + "description": "Represents a group of users within the system, identified by a unique name and ID." + }, + "GroupInfoDTO": { + "title": "GroupInfo", + "required": [ + "name", + "uniqueId" + ], + "type": "object", + "properties": { + "name": { + "title": "Group Name", + "type": "string", + "description": "The name of the group, such as an administrative or user-defined role.", + "example": "admin" + }, + "uniqueId": { + "title": "Group Unique ID", + "type": "string", + "description": "The unique identifier for the group, generated as a UUID.", + "format": "uuid", + "example": "e808afcb-1ff9-46cd-a322-3119dbf1d071" + } + }, + "description": "Group information only, no user lists", + "nullable": true, + "example": [ + "admin", + "everyone" + ] + }, + "UserDTO": { + "title": "User", + "required": [ + "uniqueId", + "username" + ], + "type": "object", + "properties": { + "username": { + "title": "Username", + "type": "string", + "description": "The unique name assigned to the user.", + "example": "myUserName" + }, + "uniqueId": { + "title": "User Unique ID", + "type": "string", + "description": "The UUID representing this specific user, ensuring unique identification across the system.", + "format": "uuid", + "example": "83db8741-57ca-4147-a973-49789d9150bb" + }, + "groupList": { + "title": "User Group Memberships", + "type": "array", + "description": "A list of group names to which the user belongs, providing role-based access and permissions.", + "nullable": true, + "example": [ + "admin", + "everyone" + ], + "items": { + "$ref": "#/components/schemas/GroupInfoDTO" + } + }, + "attributes": { + "title": "User Attributes", + "type": "object", + "additionalProperties": { + "title": "User Attributes", + "type": "string", + "description": "A map of user-specific attributes, such as home directory or other key-value pairs for configuration.", + "nullable": true, + "example": "{\"homeDir\":\"/home/user1\",\"shell\":\"/bin/bash\"}" + }, + "description": "A map of user-specific attributes, such as home directory or other key-value pairs for configuration.", + "nullable": true, + "example": { + "homeDir": "/home/user1", + "shell": "/bin/bash" + } + } + }, + "description": "Represents a user within the system, including username, unique ID, group memberships, and user-specific attributes." + }, + "LockStatus": { + "type": "object", + "properties": { + "uuid": { + "type": "string", + "format": "uuid" + }, + "username": { + "type": "string" + }, + "locked": { + "type": "boolean" + }, + "remainingLockSeconds": { + "type": "integer", + "format": "int64" + }, + "lockedUntilIso": { + "type": "string" + } + } + }, + "NewUserDTO": { + "title": "New User", + "required": [ + "password", + "username" + ], + "type": "object", + "properties": { + "username": { + "title": "Username", + "type": "string", + "description": "The unique username for the new user account.", + "example": "myNewUserName" + }, + "password": { + "title": "Password", + "type": "string", + "description": "The password or passphrase for the new user, intended to provide secure access.", + "example": "My Very Unique Password" + } + }, + "description": "Represents a new user account with a username and password." + }, + "ChangePasswordDTO": { + "required": [ + "newPassword" + ], + "type": "object", + "properties": { + "newPassword": { + "title": "New Password", + "minLength": 1, + "type": "string", + "description": "The new password to set.", + "example": "NewStrongerPassword123!" + } + } + }, + "EndPointSummaryDTO": { + "title": "End Point Information", + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "Unique identifier for the endpoint", + "format": "int64" + }, + "adapter": { + "type": "string", + "description": "Adapter name or type associated with this endpoint" + }, + "name": { + "type": "string", + "description": "Name assigned to the endpoint" + }, + "user": { + "type": "string", + "description": "Username associated with the endpoint" + }, + "protocolName": { + "type": "string", + "description": "Name of the protocol used by the endpoint" + }, + "protocolVersion": { + "type": "string", + "description": "Version of the protocol used by the endpoint" + }, + "proxyAddress": { + "type": "string", + "description": "Proxy address used to connect the endpoint, if any" + }, + "connectedTimeMs": { + "type": "integer", + "description": "Connection start time in milliseconds since epoch", + "format": "int64" + }, + "lastRead": { + "type": "integer", + "description": "Timestamp of the last read operation in milliseconds since epoch", + "format": "int64" + }, + "lastWrite": { + "type": "integer", + "description": "Timestamp of the last write operation in milliseconds since epoch", + "format": "int64" + }, + "totalBytesRead": { + "type": "integer", + "description": "Total bytes read by the endpoint", + "format": "int64" + }, + "totalBytesWritten": { + "type": "integer", + "description": "Total bytes written by the endpoint", + "format": "int64" + }, + "totalOverflow": { + "type": "integer", + "description": "Total number of buffer overflows", + "format": "int64" + }, + "totalUnderflow": { + "type": "integer", + "description": "Total number of buffer underflows", + "format": "int64" + }, + "bytesRead": { + "type": "integer", + "description": "Bytes read in the current interval", + "format": "int64" + }, + "bytesWritten": { + "type": "integer", + "description": "Bytes written in the current interval", + "format": "int64" + }, + "overFlow": { + "type": "integer", + "description": "Buffer overflow count in the current interval", + "format": "int64" + }, + "underFlow": { + "type": "integer", + "description": "Buffer underflow count in the current interval", + "format": "int64" + } + }, + "description": "Provides overview information about the end point" + }, + "AmqpProtocolInformation": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolInformationDTO" + }, + { + "type": "object", + "properties": { + "sessionInfoList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SessionInformationDTO" + } + } + } + } + ] + }, + "CoapProtocolInformation": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolInformationDTO" + }, + { + "type": "object", + "properties": { + "sessionInfo": { + "$ref": "#/components/schemas/SessionInformationDTO" + } + } + } + ] + }, + "EndPointDetailsDTO": { + "title": "End Point Information", + "type": "object", + "properties": { + "endPointSummary": { + "$ref": "#/components/schemas/EndPointSummaryDTO" + }, + "protocolInformation": { + "$ref": "#/components/schemas/ProtocolInformationDTO" + } + }, + "description": "Provides detailed information about the end point" + }, + "ExtensionProtocolInformation": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolInformationDTO" + }, + { + "type": "object", + "properties": { + "sessionInfo": { + "$ref": "#/components/schemas/SessionInformationDTO" + } + } + } + ] + }, + "LoraProtocolInformation": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolInformationDTO" + }, + { + "type": "object", + "properties": { + "sessionInfo": { + "$ref": "#/components/schemas/SessionInformationDTO" + } + } + } + ] + }, + "MqttProtocolInformation": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolInformationDTO" + }, + { + "type": "object", + "properties": { + "sessionInfo": { + "$ref": "#/components/schemas/SessionInformationDTO" + } + } + } + ] + }, + "MqttSnProtocolInformation": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolInformationDTO" + }, + { + "type": "object", + "properties": { + "sessionInfo": { + "$ref": "#/components/schemas/SessionInformationDTO" + } + } + } + ] + }, + "MqttV5ProtocolInformation": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolInformationDTO" + }, + { + "type": "object", + "properties": { + "sessionInfo": { + "$ref": "#/components/schemas/SessionInformationDTO" + } + } + } + ] + }, + "NmeaProtocolInformation": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolInformationDTO" + }, + { + "type": "object", + "properties": { + "sessionInfo": { + "$ref": "#/components/schemas/SessionInformationDTO" + } + } + } + ] + }, + "ProtocolInformationDTO": { + "title": "Protocol Information", + "required": [ + "type" + ], + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Type of the protocol", + "enum": [ + "amqp", + "coap", + "lora", + "mqtt", + "mqtt-sn", + "mqttV5", + "NMEA-0183", + "semtech", + "stomp", + "rest", + "extension", + "orbcomm", + "satellite" + ] + }, + "sessionId": { + "type": "string", + "description": "Unique identifier of the session", + "example": "session-12345" + }, + "timeout": { + "type": "integer", + "description": "Timeout in milliseconds before the protocol session is considered inactive", + "format": "int64", + "example": 30000 + }, + "keepAlive": { + "type": "integer", + "description": "Keep-alive interval in milliseconds for protocol connections", + "format": "int64", + "example": 15000 + }, + "messageTransformationName": { + "type": "string", + "description": "Name of the message transformation applied to this protocol", + "example": "default-transformation" + }, + "selectorMapping": { + "type": "object", + "additionalProperties": { + "type": "string", + "description": "Mapping of selectors to protocol-specific expressions", + "example": "{\"temperature\":\"> 20\",\"status\":\"active\"}" + }, + "description": "Mapping of selectors to protocol-specific expressions", + "example": { + "temperature": "> 20", + "status": "active" + } + }, + "destinationTransformationMapping": { + "type": "object", + "additionalProperties": { + "type": "string", + "description": "Mapping of destinations to transformation names", + "example": "{\"alerts\":\"alert-transform\",\"telemetry\":\"telemetry-transform\"}" + }, + "description": "Mapping of destinations to transformation names", + "example": { + "alerts": "alert-transform", + "telemetry": "telemetry-transform" + } + } + }, + "description": "Provides detailed information about the protocol and session", + "discriminator": { + "propertyName": "type", + "mapping": { + "amqp": "#/components/schemas/AmqpProtocolInformation", + "coap": "#/components/schemas/CoapProtocolInformation", + "lora": "#/components/schemas/LoraProtocolInformation", + "mqtt": "#/components/schemas/MqttProtocolInformation", + "mqtt-sn": "#/components/schemas/MqttSnProtocolInformation", + "mqttV5": "#/components/schemas/MqttV5ProtocolInformation", + "NMEA-0183": "#/components/schemas/NmeaProtocolInformation", + "semtech": "#/components/schemas/SemtechProtocolInformation", + "stomp": "#/components/schemas/StompProtocolInformation", + "rest": "#/components/schemas/RestProtocolInformation", + "extension": "#/components/schemas/ExtensionProtocolInformation", + "orbcomm": "#/components/schemas/SatelliteProtocolInformation", + "satellite": "#/components/schemas/SatelliteDeviceProtocolInformation" + } + } + }, + "RemoteDeviceInfo": { + "type": "object", + "properties": { + "lastRegistrationUtc": { + "type": "string" + }, + "lastUpdatedUtc": { + "type": "string" + }, + "wakeUpInterval": { + "type": "integer", + "format": "int32" + }, + "operationModeCode": { + "type": "integer", + "format": "int32" + }, + "networkCode": { + "type": "integer", + "format": "int32" + }, + "isRegistered": { + "type": "integer", + "format": "int32" + }, + "uniqueId": { + "type": "string" + } + }, + "description": "Information about the remote satellite device" + }, + "RestProtocolInformation": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolInformationDTO" + }, + { + "type": "object", + "properties": { + "sessionInfo": { + "$ref": "#/components/schemas/SessionInformationDTO" + } + } + } + ] + }, + "SatelliteDeviceProtocolInformation": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolInformationDTO" + } + ] + }, + "SatelliteProtocolInformation": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolInformationDTO" + }, + { + "type": "object", + "properties": { + "sessionInfo": { + "$ref": "#/components/schemas/SessionInformationDTO" + }, + "remoteDeviceInfo": { + "$ref": "#/components/schemas/RemoteDeviceInfo" + }, + "bytesTransmitted": { + "type": "integer", + "description": "Total number of bytes transmitted through the satellite link", + "format": "int64", + "example": 1048576 + }, + "bytesReceived": { + "type": "integer", + "description": "Total number of bytes received through the satellite link", + "format": "int64", + "example": 524288 + }, + "packetsSent": { + "type": "integer", + "description": "Total number of packets sent through the satellite link", + "format": "int64", + "example": 250 + }, + "packetsReceived": { + "type": "integer", + "description": "Total number of packets received through the satellite link", + "format": "int64", + "example": 245 + } + } + } + ] + }, + "SemtechProtocolInformation": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolInformationDTO" + }, + { + "type": "object", + "properties": { + "sessionInfo": { + "$ref": "#/components/schemas/SessionInformationDTO" + } + } + } + ] + }, + "SessionContextDTO": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "uniqueId": { + "type": "string" + }, + "hasWill": { + "type": "boolean" + }, + "expiry": { + "type": "integer", + "format": "int64" + }, + "authorized": { + "type": "boolean" + }, + "receiveMaximum": { + "type": "integer", + "format": "int32" + }, + "resetState": { + "type": "boolean" + }, + "persistentSession": { + "type": "boolean" + }, + "restored": { + "type": "boolean" + } + } + }, + "SessionInformationDTO": { + "title": "End Point Information", + "type": "object", + "properties": { + "sessionInfo": { + "$ref": "#/components/schemas/SessionContextDTO" + }, + "subscriptionInfo": { + "$ref": "#/components/schemas/SubscriptionInformationDTO" + } + }, + "description": "Provides detailed information about the session" + }, + "StompProtocolInformation": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolInformationDTO" + }, + { + "type": "object", + "properties": { + "sessionInfo": { + "$ref": "#/components/schemas/SessionInformationDTO" + } + } + } + ] + }, + "SubscriptionContextDTO": { + "type": "object", + "properties": { + "maxAtRest": { + "type": "integer", + "format": "int32" + }, + "receiveMaximum": { + "type": "integer", + "format": "int32" + }, + "subscriptionId": { + "type": "integer", + "format": "int64" + }, + "destinationName": { + "type": "string" + }, + "sharedName": { + "type": "string" + }, + "selector": { + "type": "string" + }, + "alias": { + "type": "string" + }, + "acknowledgementController": { + "type": "string" + }, + "retainHandler": { + "type": "string" + }, + "qualityOfService": { + "type": "string" + }, + "creditHandler": { + "type": "string" + }, + "destinationMode": { + "type": "string" + }, + "noLocalMessages": { + "type": "boolean" + }, + "retainAsPublish": { + "type": "boolean" + }, + "allowOverlap": { + "type": "boolean" + }, + "browser": { + "type": "boolean" + }, + "sync": { + "type": "boolean" + } + } + }, + "SubscriptionInformationDTO": { + "title": "End Point Information", + "type": "object", + "properties": { + "hibernated": { + "type": "boolean" + }, + "persistent": { + "type": "boolean" + }, + "sessionId": { + "type": "string" + }, + "uniqueId": { + "type": "string" + }, + "subscriptionContextList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SubscriptionContextDTO" + } + }, + "subscriptionStateList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SubscriptionStateDTO" + } + } + }, + "description": "Provides detailed information about the individual subscription" + }, + "SubscriptionStateDTO": { + "type": "object", + "properties": { + "destinationName": { + "type": "string" + }, + "sessionId": { + "type": "string" + }, + "hibernating": { + "type": "boolean" + }, + "size": { + "type": "integer", + "format": "int32" + }, + "pending": { + "type": "integer", + "format": "int32" + }, + "sync": { + "type": "boolean" + }, + "hasMessagesInFlight": { + "type": "boolean" + }, + "hasAtRestMessages": { + "type": "boolean" + }, + "messagesIgnored": { + "type": "integer", + "format": "int64" + }, + "messagesRegistered": { + "type": "integer", + "format": "int64" + }, + "messagesSent": { + "type": "integer", + "format": "int64" + }, + "messagesAcked": { + "type": "integer", + "format": "int64" + }, + "messagesRolledBack": { + "type": "integer", + "format": "int64" + }, + "messagesExpired": { + "type": "integer", + "format": "int64" + }, + "paused": { + "type": "boolean" + } + } + }, + "DestinationDTO": { + "title": "Destination", + "required": [ + "delayedMessages", + "name", + "pendingMessages", + "schemaId", + "storedMessages", + "type" + ], + "type": "object", + "properties": { + "name": { + "title": "Destination Name", + "type": "string", + "description": "The unique name of the destination, which acts as an identifier within the messaging system.", + "example": "myDestination" + }, + "type": { + "title": "Destination Type", + "type": "string", + "description": "The type of the destination, indicating whether it is a queue or a topic, for example.", + "example": "queue", + "enum": [ + "queue", + "topic" + ] + }, + "storedMessages": { + "title": "Stored Messages", + "minimum": 0, + "type": "integer", + "description": "The total count of messages currently stored in the destination.", + "format": "int64", + "example": 123 + }, + "delayedMessages": { + "title": "Delayed Messages", + "minimum": 0, + "type": "integer", + "description": "The number of messages delayed for delivery, which might occur due to timing or prioritization settings.", + "format": "int64", + "example": 123 + }, + "pendingMessages": { + "title": "Pending Messages", + "minimum": 0, + "type": "integer", + "description": "The count of messages pending processing in the destination.", + "format": "int64", + "example": 123 + }, + "schemaId": { + "title": "Schema ID", + "type": "string", + "description": "The identifier for the schema associated with this destination, which may define the structure or rules for messages.", + "example": "schema-123" + }, + "noInterestMessages": { + "title": "No Interest Messages", + "minimum": 0, + "type": "integer", + "description": "The count of messages dropped due to lack of interest by consumers.", + "format": "int64", + "example": 5 + }, + "publishedMessages": { + "title": "Published Messages", + "minimum": 0, + "type": "integer", + "description": "Total count of messages published to this destination.", + "format": "int64", + "example": 1000 + }, + "retrievedMessages": { + "title": "Retrieved Messages", + "minimum": 0, + "type": "integer", + "description": "The total number of messages retrieved from the destination by consumers.", + "format": "int64", + "example": 980 + }, + "expiredMessages": { + "title": "Expired Messages", + "minimum": 0, + "type": "integer", + "description": "The count of messages that expired before being delivered.", + "format": "int64", + "example": 10 + }, + "deliveredMessages": { + "title": "Delivered Messages", + "minimum": 0, + "type": "integer", + "description": "The number of messages successfully delivered to consumers.", + "format": "int64", + "example": 970 + }, + "readTimeAveNs": { + "title": "Average Read Time", + "minimum": 0, + "type": "integer", + "description": "The average time, in nanoseconds, to read messages from the store.", + "format": "int64", + "example": 1500 + }, + "writeTimeAveNs": { + "title": "Average Write Time", + "minimum": 0, + "type": "integer", + "description": "The average time, in nanoseconds, to write messages to the store.", + "format": "int64", + "example": 2000 + }, + "deleteTimeAveNs": { + "title": "Average Delete Time", + "minimum": 0, + "type": "integer", + "description": "The average time, in nanoseconds, to delete messages from the store.", + "format": "int64", + "example": 1200 + } + }, + "description": "Represents a messaging destination, such as a queue or topic, within the system." + }, + "DestinationDetailsResponse": { + "type": "object", + "properties": { + "destination": { + "$ref": "#/components/schemas/DestinationDTO" + }, + "subscriptionList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SubscriptionStateDTO" + } + } + } + }, + "DiscoveryManagerConfigDTO": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Indicates if the discovery manager is enabled", + "example": false + }, + "hostnames": { + "type": "string", + "description": "Hostnames for discovery", + "example": "::" + }, + "addTxtRecords": { + "type": "boolean", + "description": "Whether to add TXT records", + "example": true + }, + "domainName": { + "type": "string", + "description": "Domain name for discovery", + "example": ".local" + } + }, + "description": "Discovery Manager Configuration DTO" + }, + "DiscoveredServersDTO": { + "title": "Discovered Servers", + "type": "object", + "properties": { + "serverName": { + "title": "Server Name", + "type": "string", + "description": "The unique name of the discovered server.", + "example": "myServer" + }, + "systemTopicPrefix": { + "title": "System Topic Prefix", + "type": "string", + "description": "The name space prefix used for system topics", + "nullable": true, + "example": "$SYS" + }, + "schemaSupport": { + "title": "Schema Support", + "type": "boolean", + "description": "Indicates whether the server supports schema validation for messages.", + "example": true + }, + "schemaPrefix": { + "title": "Schema Prefix", + "type": "string", + "description": "The name space prefix used for schemas", + "nullable": true, + "example": "$SCHEMA" + }, + "version": { + "title": "Server Version", + "type": "string", + "description": "The version of the server software, typically following semantic versioning.", + "example": "1.2.3" + }, + "buildDate": { + "title": "Build Date", + "type": "string", + "description": "The date the server software was built, formatted as YYYY-MM-DD.", + "nullable": true, + "example": "2024-01-15" + }, + "services": { + "title": "Services", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Services" + }, + "description": "A map of services provided by the server, where each key is the service name and the value provides service-specific information.", + "nullable": true, + "example": { + "mqtt": {}, + "amqp": {} + } + } + }, + "description": "Represents information about discovered servers, including configuration details, schema support, and available services." + }, + "Services": { + "title": "Services", + "type": "object", + "properties": { + "protocol": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int32" + }, + "transport": { + "type": "string" + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "properties": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "description": "A map of services provided by the server, where each key is the service name and the value provides service-specific information.", + "nullable": true, + "example": { + "mqtt": {}, + "amqp": {} + } + }, + "RequestedAction": { + "type": "object", + "properties": { + "state": { + "type": "string" + } + } + }, + "BaseTriggerConfigDTO": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Type of the trigger", + "example": "cron", + "enum": [ + "cron", + "interrupt", + "periodic" + ] + }, + "name": { + "type": "string", + "description": "Name of the trigger", + "example": "dailyTrigger" + } + }, + "description": "Abstract base class for all schema configurations", + "discriminator": { + "propertyName": "type", + "mapping": { + "cron": "#/components/schemas/CronTriggerConfigDTO", + "interrupt": "#/components/schemas/InterruptTriggerConfigDTO", + "periodic": "#/components/schemas/PeriodicTriggerConfigDTO" + } + } + }, + "CronTriggerConfigDTO": { + "type": "object", + "description": "Cron Trigger Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/BaseTriggerConfigDTO" + }, + { + "type": "object", + "properties": { + "cron": { + "type": "string", + "description": "Cron expression for the trigger", + "example": "0 0 * * *" + } + } + } + ] + }, + "DeviceManagerConfigDTO": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Indicates if the device manager is enabled", + "example": true + }, + "demoEnabled": { + "type": "boolean", + "description": "Indicates if the device manager will load the demo devices", + "example": false + }, + "triggers": { + "type": "array", + "description": "List of trigger configurations", + "items": { + "$ref": "#/components/schemas/BaseTriggerConfigDTO" + } + }, + "i2cBuses": { + "type": "array", + "description": "List of I2C bus configurations", + "items": { + "$ref": "#/components/schemas/I2CBusConfigDTO" + } + }, + "spiBus": { + "$ref": "#/components/schemas/SpiDeviceBusConfigDTO" + }, + "oneWireBus": { + "$ref": "#/components/schemas/OneWireBusConfigDTO" + }, + "serialDeviceBusConfig": { + "$ref": "#/components/schemas/SerialDeviceBusConfig" + } + }, + "description": "Device Manager Configuration DTO" + }, + "I2CBusConfigDTO": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Indicates if the device bus is enabled" + }, + "topicNameTemplate": { + "type": "string", + "description": "Template for the topic name" + }, + "autoScan": { + "type": "boolean", + "description": "Specifies if auto-scan is enabled" + }, + "scanTime": { + "type": "integer", + "description": "Scan time interval in milliseconds", + "format": "int32" + }, + "filter": { + "type": "string", + "description": "Filter configuration for the device bus" + }, + "selector": { + "type": "string", + "description": "Selector configuration for the device bus" + }, + "bus": { + "type": "integer", + "description": "Bus number for the I2C device", + "format": "int32" + }, + "trigger": { + "type": "string", + "description": "Trigger configuration for the I2C bus" + }, + "devices": { + "type": "array", + "description": "List of I2C devices on this bus", + "items": { + "$ref": "#/components/schemas/I2CDeviceConfigDTO" + } + } + }, + "description": "DTO for I2C Bus configuration properties" + }, + "I2CDeviceConfigDTO": { + "type": "object", + "properties": { + "address": { + "type": "integer", + "description": "Address of the I2C device", + "format": "int32" + }, + "name": { + "type": "string", + "description": "Name of the I2C device" + }, + "selector": { + "type": "string", + "description": "Selector configuration for the I2C device" + } + }, + "description": "DTO for I2C Device configuration properties" + }, + "InterruptTriggerConfigDTO": { + "type": "object", + "description": "Interrupt Trigger Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/BaseTriggerConfigDTO" + }, + { + "type": "object", + "properties": { + "address": { + "type": "integer", + "description": "Address of the interrupt trigger", + "format": "int32", + "example": 1 + }, + "pullDirection": { + "type": "string", + "description": "Pull direction of the interrupt trigger (e.g., UP or DOWN)", + "example": "UP" + }, + "id": { + "type": "string", + "description": "Unique identifier for the trigger", + "example": "trigger1" + } + } + } + ] + }, + "OneWireBusConfigDTO": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Indicates if the device bus is enabled" + }, + "topicNameTemplate": { + "type": "string", + "description": "Template for the topic name" + }, + "autoScan": { + "type": "boolean", + "description": "Specifies if auto-scan is enabled" + }, + "scanTime": { + "type": "integer", + "description": "Scan time interval in milliseconds", + "format": "int32" + }, + "filter": { + "type": "string", + "description": "Filter configuration for the device bus" + }, + "selector": { + "type": "string", + "description": "Selector configuration for the device bus" + }, + "name": { + "type": "string", + "description": "Name of the OneWire bus", + "example": "oneWireBus1" + }, + "trigger": { + "type": "string", + "description": "Trigger mechanism for OneWire bus", + "example": "temperatureTrigger" + } + }, + "description": "OneWire Bus Configuration DTO" + }, + "PeriodicTriggerConfigDTO": { + "type": "object", + "description": "Periodic Trigger Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/BaseTriggerConfigDTO" + }, + { + "type": "object", + "properties": { + "interval": { + "type": "integer", + "description": "Interval for the periodic trigger in milliseconds", + "format": "int32", + "example": 5000 + } + } + } + ] + }, + "SerialConfigDTO": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Type of the endpoint", + "example": "tcp, ssl, udp, dtls, loraSerial, loraDevice, serial", + "enum": [ + "tcp", + "ssl", + "udp", + "dtls", + "loraDevice", + "loraSerial", + "serial" + ] + }, + "discoverable": { + "type": "boolean", + "description": "Whether the endpoint is discoverable", + "example": false + }, + "selectorThreadCount": { + "type": "integer", + "description": "Number of selector threads", + "format": "int32", + "example": 2 + }, + "serverReadBufferSize": { + "type": "integer", + "description": "Server read buffer size in bytes", + "format": "int64", + "example": 10240 + }, + "serverWriteBufferSize": { + "type": "integer", + "description": "Server write buffer size in bytes", + "format": "int64", + "example": 10240 + }, + "proxyProtocolMode": { + "type": "string", + "description": "Proxy Protocol support mode. 'ENABLED' allows but doesn't require it, 'REQUIRED' enforces it, 'DISABLED' will NOT check for incoming PROXY requests.", + "example": "REQUIRED", + "enum": [ + "ENABLED", + "DISABLED", + "REQUIRED" + ] + }, + "allowedProxyHosts": { + "type": "string", + "description": "Comma-separated list of allowed proxy source addresses. Supports hostnames, IPv4/IPv6 addresses, and CIDR blocks (e.g., 192.168.0.0/24, ::1, example.com).", + "example": "192.168.1.0/24,10.0.0.1,example.com,::1" + }, + "connectionTimeout": { + "type": "integer", + "description": "Time to wait for a client to establish the connection, in milliseconds", + "format": "int64", + "example": 5000 + }, + "port": { + "type": "string", + "description": "Serial port name", + "example": "/dev/ttyS0" + }, + "baudRate": { + "type": "integer", + "description": "Baud rate for the serial connection", + "format": "int32", + "example": 9600, + "enum": [ + 110, + 300, + 600, + 1200, + 2400, + 4800, + 9600, + 14400, + 19200, + 28800, + 38400, + 57600, + 115200, + 230400, + 460800, + 921600 + ] + }, + "dataBits": { + "type": "integer", + "description": "Number of data bits in the serial connection", + "format": "int32", + "example": 8, + "enum": [ + 5, + 6, + 7, + 8 + ] + }, + "stopBits": { + "type": "string", + "description": "Number of stop bits in the serial connection", + "example": "1", + "enum": [ + "1", + "1.5", + "2" + ] + }, + "parity": { + "type": "string", + "description": "Parity setting for the serial connection", + "example": "n", + "enum": [ + "n", + "o", + "e", + "m", + "s" + ] + }, + "flowControl": { + "type": "integer", + "description": "Flow control setting for the serial connection", + "format": "int32", + "example": 1, + "enum": [ + 0, + 1, + 2, + 3 + ] + }, + "readTimeOut": { + "type": "integer", + "description": "Read timeout in milliseconds", + "format": "int32", + "example": 60000 + }, + "writeTimeOut": { + "type": "integer", + "description": "Write timeout in milliseconds", + "format": "int32", + "example": 60000 + }, + "bufferSize": { + "type": "integer", + "description": "Buffer size in bytes", + "format": "int32", + "example": 262144 + }, + "serialNo": { + "type": "string", + "description": "Serial number for the device, optional", + "example": "262144" + } + }, + "description": "Serial Configuration DTO" + }, + "SerialDeviceBusConfig": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Indicates if the device bus is enabled" + }, + "topicNameTemplate": { + "type": "string", + "description": "Template for the topic name" + }, + "autoScan": { + "type": "boolean", + "description": "Specifies if auto-scan is enabled" + }, + "scanTime": { + "type": "integer", + "description": "Scan time interval in milliseconds", + "format": "int32" + }, + "filter": { + "type": "string", + "description": "Filter configuration for the device bus" + }, + "selector": { + "type": "string", + "description": "Selector configuration for the device bus" + }, + "name": { + "type": "string", + "description": "Name of the serial bus managemnt", + "example": "serial" + }, + "devices": { + "type": "array", + "description": "List of Serial devices devices on this bus", + "items": { + "$ref": "#/components/schemas/SerialDeviceDTO" + } + }, + "trigger": { + "type": "string", + "description": "Trigger mechanism for OneWire bus", + "example": "temperatureTrigger" + } + }, + "description": "Serial device configuration" + }, + "SerialDeviceDTO": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Indicates if the device bus is enabled" + }, + "topicNameTemplate": { + "type": "string", + "description": "Template for the topic name" + }, + "autoScan": { + "type": "boolean", + "description": "Specifies if auto-scan is enabled" + }, + "scanTime": { + "type": "integer", + "description": "Scan time interval in milliseconds", + "format": "int32" + }, + "filter": { + "type": "string", + "description": "Filter configuration for the device bus" + }, + "selector": { + "type": "string", + "description": "Selector configuration for the device bus" + }, + "name": { + "type": "string", + "description": "Name of the Serial Device", + "example": "SEN0640" + }, + "serialConfig": { + "$ref": "#/components/schemas/SerialConfigDTO" + } + }, + "description": "Serial Bus Configuration DTO" + }, + "SpiDeviceBusConfigDTO": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Indicates if the device bus is enabled" + }, + "topicNameTemplate": { + "type": "string", + "description": "Template for the topic name" + }, + "autoScan": { + "type": "boolean", + "description": "Specifies if auto-scan is enabled" + }, + "scanTime": { + "type": "integer", + "description": "Scan time interval in milliseconds", + "format": "int32" + }, + "filter": { + "type": "string", + "description": "Filter configuration for the device bus" + }, + "selector": { + "type": "string", + "description": "Selector configuration for the device bus" + }, + "name": { + "type": "string", + "description": "Name of the SPI bus", + "example": "spiBus1" + }, + "devices": { + "type": "array", + "description": "List of SPI devices on this bus", + "items": { + "$ref": "#/components/schemas/SpiDeviceConfigDTO" + } + }, + "trigger": { + "type": "string", + "description": "Trigger mechanism for OneWire bus", + "example": "temperatureTrigger" + } + }, + "description": "SPI Device Bus Configuration DTO" + }, + "SpiDeviceConfigDTO": { + "type": "object", + "properties": { + "address": { + "type": "integer", + "description": "Device address on the SPI bus", + "format": "int32", + "example": 1 + }, + "name": { + "type": "string", + "description": "Name of the SPI device", + "example": "TemperatureSensor" + }, + "selector": { + "type": "string", + "description": "Selector used for the device", + "example": "tempSelector" + }, + "spiBus": { + "type": "integer", + "description": "SPI bus number", + "format": "int32", + "example": 0 + }, + "spiMode": { + "type": "integer", + "description": "SPI mode for the device", + "format": "int32", + "example": 1 + }, + "spiChipSelect": { + "type": "integer", + "description": "Chip select line for the SPI device", + "format": "int32", + "example": 0 + }, + "config": { + "type": "object", + "additionalProperties": { + "type": "string", + "description": "Configuration map" + }, + "description": "Configuration map" + } + }, + "description": "SPI Device Configuration DTO" + }, + "DeviceInfoDTO": { + "title": "Device Information", + "type": "object", + "properties": { + "name": { + "title": "Device Name", + "type": "string", + "description": "The unique name or identifier for the device.", + "example": "temperatureSensor01" + }, + "description": { + "title": "Device Description", + "type": "string", + "description": "A brief description of the device�s purpose or functionality.", + "nullable": true, + "example": "Temperature sensor for monitoring room temperature" + }, + "type": { + "title": "Device Type", + "type": "string", + "description": "The type or category of the device, indicating its general function or use.", + "example": "sensor" + }, + "state": { + "title": "Device State", + "type": "string", + "description": "Retrieves any state registers, could be sensor data or device state, is dependent on the device.", + "example": "25.0C" + } + }, + "description": "Represents detailed information about a device, including its name, type, state, and description." + }, + "AmqpConfigDTO": { + "type": "object", + "description": "AMQP Protocol Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolConfigDTO" + }, + { + "type": "object", + "properties": { + "idleTimeout": { + "type": "integer", + "description": "Idle timeout in milliseconds", + "format": "int32", + "example": 30000 + }, + "maxFrameSize": { + "type": "integer", + "description": "Maximum frame size in bytes", + "format": "int32", + "example": 65536 + }, + "linkCredit": { + "type": "integer", + "description": "Link credit for the AMQP connection", + "format": "int32", + "example": 50 + }, + "durable": { + "type": "boolean", + "description": "Specifies if the AMQP link is durable", + "example": false + }, + "incomingCapacity": { + "type": "integer", + "description": "Incoming capacity of the AMQP session", + "format": "int32", + "example": 65536 + }, + "outgoingWindow": { + "type": "integer", + "description": "Outgoing window size for the AMQP session", + "format": "int32", + "example": 100 + } + } + } + ] + }, + "AuthConfig": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Username for authentication", + "example": "user123" + }, + "password": { + "type": "string", + "description": "Password for authentication", + "example": "password" + }, + "sessionId": { + "type": "string", + "description": "Session ID for the authentication session", + "example": "session-xyz" + }, + "tokenGenerator": { + "type": "string", + "description": "Token generator type", + "example": "JWT" + }, + "tokenConfig": { + "type": "object", + "additionalProperties": { + "type": "object", + "description": "Configuration settings for the token generator", + "example": { + "expiry": 3600 + } + }, + "description": "Configuration settings for the token generator", + "example": { + "expiry": 3600 + } + } + }, + "description": "Authentication configuration for endpoint connection" + }, + "CoapConfigDTO": { + "type": "object", + "description": "CoAP Protocol Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolConfigDTO" + }, + { + "type": "object", + "properties": { + "maxBlockSize": { + "type": "integer", + "description": "Maximum block size for CoAP", + "format": "int32", + "example": 128 + }, + "idleTime": { + "type": "integer", + "description": "Idle time period for CoAP connections in seconds", + "format": "int32", + "example": 120 + } + } + } + ] + }, + "ConnectionAuthConfigDTO": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Username for authentication", + "example": "user123" + }, + "password": { + "type": "string", + "description": "Password for authentication", + "example": "pass123" + }, + "clientId": { + "type": "string", + "description": "Client ID for the connection", + "example": "client123" + }, + "tokenGenerator": { + "type": "string", + "description": "Token generator type", + "example": "JWT" + } + }, + "description": "Connection Authentication Configuration DTO" + }, + "DtlsConfigDTO": { + "type": "object", + "description": "TLS Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/EndPointConfigDTO" + }, + { + "type": "object", + "properties": { + "packetReuseTimeout": { + "type": "integer", + "description": "Timeout for reusing packets, in milliseconds", + "format": "int64", + "example": 1000 + }, + "idleSessionTimeout": { + "type": "integer", + "description": "Idle session timeout duration, in seconds", + "format": "int64", + "example": 600 + }, + "hmacHostLookupCacheExpiry": { + "type": "integer", + "description": "Expiry time for HMAC host lookup cache, in seconds", + "format": "int64", + "example": 600 + }, + "hmacConfigList": { + "type": "array", + "description": "List of HMAC configurations for nodes", + "items": { + "$ref": "#/components/schemas/HmacConfigDTO" + } + }, + "sslConfig": { + "$ref": "#/components/schemas/SslConfigDTO" + } + } + } + ] + }, + "EndPointConfigDTO": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Type of the endpoint", + "example": "tcp, ssl, udp, dtls, loraSerial, loraDevice, serial", + "enum": [ + "tcp", + "ssl", + "udp", + "dtls", + "loraDevice", + "loraSerial", + "serial" + ] + }, + "discoverable": { + "type": "boolean", + "description": "Whether the endpoint is discoverable", + "example": false + }, + "selectorThreadCount": { + "type": "integer", + "description": "Number of selector threads", + "format": "int32", + "example": 2 + }, + "serverReadBufferSize": { + "type": "integer", + "description": "Server read buffer size in bytes", + "format": "int64", + "example": 10240 + }, + "serverWriteBufferSize": { + "type": "integer", + "description": "Server write buffer size in bytes", + "format": "int64", + "example": 10240 + }, + "proxyProtocolMode": { + "type": "string", + "description": "Proxy Protocol support mode. 'ENABLED' allows but doesn't require it, 'REQUIRED' enforces it, 'DISABLED' will NOT check for incoming PROXY requests.", + "example": "REQUIRED", + "enum": [ + "ENABLED", + "DISABLED", + "REQUIRED" + ] + }, + "allowedProxyHosts": { + "type": "string", + "description": "Comma-separated list of allowed proxy source addresses. Supports hostnames, IPv4/IPv6 addresses, and CIDR blocks (e.g., 192.168.0.0/24, ::1, example.com).", + "example": "192.168.1.0/24,10.0.0.1,example.com,::1" + }, + "connectionTimeout": { + "type": "integer", + "description": "Time to wait for a client to establish the connection, in milliseconds", + "format": "int64", + "example": 5000 + } + }, + "description": "Abstract base class for all schema configurations", + "discriminator": { + "propertyName": "type", + "mapping": { + "dtls": "#/components/schemas/DtlsConfigDTO", + "loraSerial": "#/components/schemas/LoRaSerialConfigDTO", + "loraDevice": "#/components/schemas/LoRaChipConfigDTO", + "serial": "#/components/schemas/SerialConfigDTO", + "tcp": "#/components/schemas/TcpConfigDTO", + "ssl": "#/components/schemas/TlsConfigDTO", + "udp": "#/components/schemas/UdpConfigDTO" + } + } + }, + "EndPointConnectionServerConfigDTO": { + "title": "Connection Configuration", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the endpoint server", + "example": "MainServer" + }, + "url": { + "type": "string", + "description": "URL for the endpoint server", + "example": "tcp://localhost:1883" + }, + "endPointConfig": { + "$ref": "#/components/schemas/EndPointConfigDTO" + }, + "saslConfig": { + "$ref": "#/components/schemas/SaslConfigDTO" + }, + "protocolConfigs": { + "type": "array", + "description": "List of protocol configurations for the endpoint", + "items": { + "$ref": "#/components/schemas/ProtocolConfigDTO" + } + }, + "authenticationRealm": { + "type": "string", + "description": "Authentication realm", + "example": "defaultRealm" + }, + "backlog": { + "type": "integer", + "description": "Backlog for the endpoint server", + "format": "int32", + "example": 100 + }, + "selectorTaskWait": { + "type": "integer", + "description": "Selector task wait time", + "format": "int32", + "example": 10 + }, + "authConfig": { + "$ref": "#/components/schemas/AuthConfig" + }, + "linkTransformation": { + "type": "string", + "description": "Link transformation for the endpoint connection", + "example": "transformationType" + }, + "linkConfigs": { + "type": "array", + "description": "List of link configurations", + "items": { + "$ref": "#/components/schemas/LinkConfigDTO" + } + }, + "pluginConnection": { + "type": "boolean", + "description": "Is this a 3rd party plugin connection" + }, + "cost": { + "type": "integer", + "description": "An arbitrary cost associated with using this connection", + "format": "int32", + "example": 0, + "default": 10 + }, + "groupName": { + "type": "string", + "description": "Optional name of the group that the connection belongs to", + "example": "Main data uplink" + }, + "protocols": { + "type": "string" + } + }, + "description": "Endpoint Connection Server Configuration DTO" + }, + "ExtensionConfigDTO": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolConfigDTO" + }, + { + "type": "object", + "properties": { + "config": { + "type": "object", + "additionalProperties": { + "type": "object", + "description": "Map of config entries" + }, + "description": "Map of config entries" + }, + "protocol": { + "type": "string", + "description": "name of the extension protocl" + } + } + } + ] + }, + "HmacConfigDTO": { + "type": "object", + "properties": { + "host": { + "type": "string", + "description": "The host for the HMAC configuration", + "example": "example.com" + }, + "port": { + "type": "integer", + "description": "The port used for HMAC communication", + "format": "int32", + "example": 8080 + }, + "secret": { + "type": "string", + "description": "The secret key for HMAC operations", + "example": "mySecretKey" + }, + "hmacAlgorithm": { + "type": "string", + "description": "The HMAC algorithm to use", + "example": "HmacSHA256" + }, + "hmacManager": { + "type": "string", + "description": "The manager handling HMAC operations", + "example": "Appender" + }, + "hmacSharedKey": { + "type": "string", + "description": "The shared key used for HMAC", + "example": "sharedKey" + } + }, + "description": "HMAC Configuration DTO" + }, + "IntegrationInfoDTO": { + "title": "Integration Information", + "type": "object", + "properties": { + "config": { + "$ref": "#/components/schemas/EndPointConnectionServerConfigDTO" + }, + "state": { + "type": "string" + } + }, + "description": "Provides configuration and details about a specific integration connection." + }, + "KeyStoreConfigDTO": { + "type": "object", + "properties": { + "alias": { + "type": "string", + "description": "Alias used in the key store", + "example": "myKeyAlias" + }, + "type": { + "type": "string", + "description": "Type of the key store", + "example": "JKS" + }, + "providerName": { + "type": "string", + "description": "Name of the security provider", + "example": "SunJSSE" + }, + "managerFactory": { + "type": "string", + "description": "Key manager factory algorithm", + "example": "SunX509" + }, + "path": { + "type": "string", + "description": "Path to the key store file", + "example": "/path/to/keystore.jks" + }, + "passphrase": { + "type": "string", + "description": "Passphrase for the key store", + "example": "changeit" + }, + "provider": { + "type": "string", + "description": "Provider name for the key store", + "example": "SunJSSE" + } + }, + "description": "Key Store Configuration DTO" + }, + "LinkConfigDTO": { + "type": "object", + "properties": { + "direction": { + "type": "string", + "description": "Direction of the link", + "example": "inbound" + }, + "remoteNamespace": { + "type": "string", + "description": "Remote namespace", + "example": "remote_ns" + }, + "localNamespace": { + "type": "string", + "description": "Local namespace", + "example": "local_ns" + }, + "selector": { + "type": "string", + "description": "Message selector", + "example": "selector_criteria" + }, + "includeSchema": { + "type": "boolean", + "description": "Include schema flag", + "example": true + }, + "transformer": { + "type": "object", + "additionalProperties": { + "type": "object", + "description": "Transformer configuration map" + }, + "description": "Transformer configuration map" + }, + "statistics": { + "$ref": "#/components/schemas/StatisticsConfigDTO" + }, + "namespaceFilters": { + "$ref": "#/components/schemas/NamespaceFilters" + }, + "qualityOfService": { + "type": "string", + "description": "Quality of server QoS:0, 1 or 2, for non MQTT 1 or 2 imply transactional", + "nullable": true, + "example": "1", + "enum": [ + "QualityOfService.AT_MOST_ONCE(level=0, description=Best Effort, no guarantee of delivery, storeOffLine=false, sendPacketId=false, clientAcknowledgement=AUTO)", + "QualityOfService.AT_LEAST_ONCE(level=1, description=Guarantees at least once but may be duplicated delivery if connection fails between sending and Ack, storeOffLine=true, sendPacketId=true, clientAcknowledgement=INDIVIDUAL)", + "QualityOfService.EXACTLY_ONCE(level=2, description=Only once delivery, in that the event is delivered to the client once and once only, storeOffLine=true, sendPacketId=true, clientAcknowledgement=INDIVIDUAL)", + "QualityOfService.MQTT_SN_REGISTERED(level=3, description=Used by MQTT-SN to send publish events to a known topic without the need to have a connection established, this is reserved for MQTT-SN, storeOffLine=true, sendPacketId=false, clientAcknowledgement=AUTO)" + ] + } + }, + "description": "Link Configuration DTO" + }, + "LoRaChipConfigDTO": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/EndPointConfigDTO" + }, + { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the LoRa device", + "example": "LoRaNode1" + }, + "power": { + "type": "integer", + "description": "Power setting for the device", + "format": "int32", + "example": 14 + }, + "frequency": { + "type": "number", + "description": "Operating frequency of the device in MHz", + "format": "float", + "example": 868.0 + }, + "address": { + "type": "integer", + "description": "Base address to register for, 1-254", + "format": "int32", + "example": 2 + }, + "transmissionRate": { + "type": "integer", + "description": "Transmission rate to limit the number of packets/second, 0 - unlimited, else per second", + "format": "int32", + "example": 5 + }, + "hexKey": { + "type": "string", + "description": "Optional hex based 16 byte key", + "example": "0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0" + }, + "radio": { + "type": "string", + "description": "Radio type of the LoRa device", + "example": "SX1276" + }, + "cs": { + "type": "integer", + "description": "Chip Select (CS) pin number", + "format": "int32", + "example": 10 + }, + "irq": { + "type": "integer", + "description": "IRQ pin number", + "format": "int32", + "example": 7 + }, + "rst": { + "type": "integer", + "description": "Reset (RST) pin number", + "format": "int32", + "example": 3 + }, + "cadTimeout": { + "type": "integer", + "description": "CAD timeout setting", + "format": "int32", + "example": 500 + } + } + } + ] + }, + "LoRaProtocolConfigDTO": { + "type": "object", + "description": "LoRa Protocol Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolConfigDTO" + }, + { + "type": "object", + "properties": { + "retransmit": { + "type": "integer", + "description": "Maximum retransmission rate for LoRa", + "format": "int32", + "example": 10 + } + } + } + ] + }, + "LoRaSerialConfigDTO": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/EndPointConfigDTO" + }, + { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the LoRa device", + "example": "LoRaNode1" + }, + "power": { + "type": "integer", + "description": "Power setting for the device", + "format": "int32", + "example": 14 + }, + "frequency": { + "type": "number", + "description": "Operating frequency of the device in MHz", + "format": "float", + "example": 868.0 + }, + "address": { + "type": "integer", + "description": "Base address to register for, 1-254", + "format": "int32", + "example": 2 + }, + "transmissionRate": { + "type": "integer", + "description": "Transmission rate to limit the number of packets/second, 0 - unlimited, else per second", + "format": "int32", + "example": 5 + }, + "hexKey": { + "type": "string", + "description": "Optional hex based 16 byte key", + "example": "0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0" + }, + "serialConfig": { + "$ref": "#/components/schemas/SerialConfigDTO" + } + } + } + ] + }, + "MessageOverrideDTO": { + "type": "object", + "properties": { + "expiry": { + "type": "integer", + "description": "Override message expiry in milliseconds", + "format": "int64", + "example": 60000 + }, + "priority": { + "type": "string", + "description": "Override message priority", + "example": "NORMAL", + "enum": [ + "Priority.LOWEST(value=0, description=Lowest priority)", + "Priority.ONE_ABOVE_LOWEST(value=1, description=Lowest priority +1)", + "Priority.TWO_ABOVE_LOWEST(value=2, description=Lowest priority +2)", + "Priority.ONE_BELOW_NORMAL(value=3, description=Normal priority -1)", + "Priority.NORMAL(value=4, description=Normal priority)", + "Priority.ONE_ABOVE_NORMAL(value=5, description=Normal priority +1)", + "Priority.TWO_ABOVE_NORMAL(value=6, description=Normal priority +2)", + "Priority.THREE_ABOVE_NORMAL(value=7, description=Normal priority +3)", + "Priority.TWO_BELOW_HIGHEST(value=8, description=Highest priority -2)", + "Priority.ONE_BELOW_HIGHEST(value=9, description=Highest priority -1)", + "Priority.HIGHEST(value=10, description=Highest priority)" + ] + }, + "qualityOfService": { + "type": "string", + "description": "Override message quality of service", + "example": "AT_LEAST_ONCE", + "enum": [ + "QualityOfService.AT_MOST_ONCE(level=0, description=Best Effort, no guarantee of delivery, storeOffLine=false, sendPacketId=false, clientAcknowledgement=AUTO)", + "QualityOfService.AT_LEAST_ONCE(level=1, description=Guarantees at least once but may be duplicated delivery if connection fails between sending and Ack, storeOffLine=true, sendPacketId=true, clientAcknowledgement=INDIVIDUAL)", + "QualityOfService.EXACTLY_ONCE(level=2, description=Only once delivery, in that the event is delivered to the client once and once only, storeOffLine=true, sendPacketId=true, clientAcknowledgement=INDIVIDUAL)", + "QualityOfService.MQTT_SN_REGISTERED(level=3, description=Used by MQTT-SN to send publish events to a known topic without the need to have a connection established, this is reserved for MQTT-SN, storeOffLine=true, sendPacketId=false, clientAcknowledgement=AUTO)" + ] + }, + "responseTopic": { + "type": "string", + "description": "Override response topic", + "example": "/default/response" + }, + "contentType": { + "type": "string", + "description": "Override content type", + "example": "application/json" + }, + "schemaId": { + "type": "string", + "description": "Override schema ID", + "example": "default-schema-id" + }, + "retain": { + "type": "boolean", + "description": "Override retain message flag", + "example": true + }, + "meta": { + "type": "object", + "additionalProperties": { + "type": "string", + "description": "Metadata to inject if not present in the message" + }, + "description": "Metadata to inject if not present in the message" + }, + "dataMap": { + "type": "object", + "additionalProperties": { + "type": "object", + "description": "Data map to inject if keys are not present in the message" + }, + "description": "Data map to inject if keys are not present in the message" + } + }, + "description": "Message override configuration DTO" + }, + "MqttConfigDTO": { + "type": "object", + "description": "MQTT Protocol Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolConfigDTO" + }, + { + "type": "object", + "properties": { + "maximumSessionExpiry": { + "type": "integer", + "description": "Maximum session expiry for MQTT", + "format": "int64", + "example": 86400 + }, + "maximumBufferSize": { + "type": "integer", + "description": "Maximum buffer size for MQTT", + "format": "int64", + "example": 10485760 + }, + "serverReceiveMaximum": { + "type": "integer", + "description": "Server receive maximum", + "format": "int32", + "example": 10 + }, + "clientReceiveMaximum": { + "type": "integer", + "description": "Client receive maximum", + "format": "int32", + "example": 65535 + }, + "clientMaximumTopicAlias": { + "type": "integer", + "description": "Client maximum topic alias", + "format": "int32", + "example": 32767 + }, + "serverMaximumTopicAlias": { + "type": "integer", + "description": "Server maximum topic alias", + "format": "int32", + "example": 0 + }, + "strictClientId": { + "type": "boolean", + "description": "Indicates if strict client ID enforcement is enabled", + "example": false + } + } + } + ] + }, + "MqttSnConfigDTO": { + "type": "object", + "description": "MQTT-SN Protocol Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolConfigDTO" + }, + { + "type": "object", + "properties": { + "gatewayId": { + "type": "string", + "description": "Gateway ID for MQTT-SN", + "example": "1" + }, + "receiveMaximum": { + "type": "integer", + "description": "Receive maximum", + "format": "int32", + "example": 10 + }, + "idleSessionTimeout": { + "type": "integer", + "description": "Idle session timeout in seconds", + "format": "int64", + "example": 600 + }, + "maximumSessionExpiry": { + "type": "integer", + "description": "Maximum session expiry time in seconds", + "format": "int32", + "example": 86400 + }, + "enablePortChanges": { + "type": "boolean", + "description": "Enable port changes", + "example": true + }, + "enableAddressChanges": { + "type": "boolean", + "description": "Enable address changes", + "example": false + }, + "advertiseGateway": { + "type": "boolean", + "description": "Advertise the gateway", + "example": false + }, + "registeredTopics": { + "type": "string", + "description": "Registered topics" + }, + "advertiseInterval": { + "type": "integer", + "description": "Advertise interval in seconds", + "format": "int32", + "example": 30 + }, + "maxRegisteredSize": { + "type": "integer", + "description": "Maximum registered size", + "format": "int32", + "example": 32767 + }, + "maxInFlightEvents": { + "type": "integer", + "description": "Maximum in-flight events", + "format": "int32", + "example": 1 + }, + "dropQoS0": { + "type": "boolean", + "description": "Drop QoS 0 events", + "example": false + }, + "eventQueueTimeout": { + "type": "integer", + "description": "Event queue timeout in seconds", + "format": "int32", + "example": 0 + }, + "predefinedTopicsList": { + "type": "array", + "description": "List of predefined topics", + "items": { + "$ref": "#/components/schemas/PredefinedTopics" + } + } + } + } + ] + }, + "MqttV5ConfigDTO": { + "type": "object", + "description": "MQTT V5 Protocol Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolConfigDTO" + }, + { + "type": "object", + "properties": { + "maximumSessionExpiry": { + "type": "integer", + "description": "Maximum session expiry for MQTT", + "format": "int64", + "example": 86400 + }, + "maximumBufferSize": { + "type": "integer", + "description": "Maximum buffer size for MQTT", + "format": "int64", + "example": 10485760 + }, + "serverReceiveMaximum": { + "type": "integer", + "description": "Server receive maximum", + "format": "int32", + "example": 10 + }, + "clientReceiveMaximum": { + "type": "integer", + "description": "Client receive maximum", + "format": "int32", + "example": 65535 + }, + "clientMaximumTopicAlias": { + "type": "integer", + "description": "Client maximum topic alias", + "format": "int32", + "example": 32767 + }, + "serverMaximumTopicAlias": { + "type": "integer", + "description": "Server maximum topic alias", + "format": "int32", + "example": 0 + }, + "strictClientId": { + "type": "boolean", + "description": "Indicates if strict client ID enforcement is enabled", + "example": false + }, + "minServerKeepAlive": { + "type": "integer", + "description": "Minimum server keep-alive interval in seconds", + "format": "int32", + "example": 0 + }, + "maxServerKeepAlive": { + "type": "integer", + "description": "Maximum server keep-alive interval in seconds", + "format": "int32", + "example": 60 + } + } + } + ] + }, + "NamespaceFilter": { + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "depth": { + "type": "integer", + "format": "int32" + }, + "selector": { + "type": "string" + }, + "forcePriority": { + "type": "boolean" + }, + "executor": { + "$ref": "#/components/schemas/ParserExecutor" + } + } + }, + "NamespaceFilters": { + "type": "object", + "properties": { + "allFilters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NamespaceFilter" + } + } + }, + "description": "Specific filtering on namespace", + "nullable": true + }, + "NmeaConfigDTO": { + "type": "object", + "description": "NMEA Protocol Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolConfigDTO" + }, + { + "type": "object", + "properties": { + "serial": { + "$ref": "#/components/schemas/SerialConfigDTO" + } + } + } + ] + }, + "ParserExecutor": { + "type": "object" + }, + "PredefinedTopics": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "Unique identifier for the topic", + "format": "int32", + "example": 1 + }, + "topic": { + "type": "string", + "description": "Topic name", + "example": "my/topic" + }, + "address": { + "type": "string", + "description": "Address associated with the topic", + "example": "*" + } + }, + "description": "List of predefined topics" + }, + "ProtocolConfigDTO": { + "required": [ + "type" + ], + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Type of the protocol configuration", + "enum": [ + "amqp", + "coap", + "lora", + "loop", + "mqtt", + "mqtt-sn", + "mqttV5", + "NMEA-0183", + "orbcomm", + "satellite", + "semtech", + "stomp", + "websocket", + "extension" + ] + }, + "proxyProtocol": { + "type": "boolean", + "description": "Support Proxy Protocol on the connection" + }, + "remoteAuthConfig": { + "$ref": "#/components/schemas/ConnectionAuthConfigDTO" + }, + "messageDefaults": { + "$ref": "#/components/schemas/MessageOverrideDTO" + }, + "protocol": { + "type": "string" + } + }, + "description": "Abstract base class for all protocol configurations", + "discriminator": { + "propertyName": "type", + "mapping": { + "amqp": "#/components/schemas/AmqpConfigDTO", + "coap": "#/components/schemas/CoapConfigDTO", + "lora": "#/components/schemas/LoRaProtocolConfigDTO", + "mqtt": "#/components/schemas/MqttConfigDTO", + "mqtt-sn": "#/components/schemas/MqttSnConfigDTO", + "mqttV5": "#/components/schemas/MqttV5ConfigDTO", + "NMEA-0183": "#/components/schemas/NmeaConfigDTO", + "satellite": "#/components/schemas/SatelliteConfigDTO", + "orbcomm": "#/components/schemas/StoGiConfigDTO", + "semtech": "#/components/schemas/SemtechConfigDTO", + "stomp": "#/components/schemas/StompConfigDTO", + "websocket": "#/components/schemas/WebSocketConfigDTO", + "extension": "#/components/schemas/ExtensionConfigDTO" + } + } + }, + "SaslConfigDTO": { + "title": "SASL Configuration DTO", + "type": "object", + "properties": { + "realmName": { + "type": "string", + "description": "The realm name used for SASL authentication", + "example": "example-realm" + }, + "mechanism": { + "type": "string", + "description": "The SASL mechanism, such as PLAIN or SCRAM-SHA-256", + "example": "PLAIN" + }, + "identityProvider": { + "type": "string", + "description": "The identity provider for SASL", + "example": "authProvider123" + }, + "saslEntries": { + "type": "object", + "additionalProperties": { + "type": "object", + "description": "Additional SASL entries as key-value pairs", + "example": { + "entry1": "value1" + } + }, + "description": "Additional SASL entries as key-value pairs", + "example": { + "entry1": "value1" + } + } + }, + "description": "Represents the configuration for SASL authentication used for REST communication." + }, + "SatelliteConfigDTO": { + "type": "object", + "description": "Base Satellite Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolConfigDTO" + }, + { + "type": "object", + "properties": { + "incomingMessagePollInterval": { + "type": "integer", + "description": "Time in seconds to poll the modem for incoming messages", + "format": "int64", + "example": 15, + "default": 10 + }, + "outgoingMessagePollInterval": { + "type": "integer", + "description": "Time in seconds to poll for outgoing messages", + "format": "int64", + "example": 60, + "default": 60 + }, + "maxBufferSize": { + "type": "integer", + "description": "maximum buffer size allowed by the satellite communications", + "format": "int32", + "example": 4000, + "default": 4000 + }, + "compressionCutoffSize": { + "type": "integer", + "description": "minimum sized buffer that will be compressed", + "format": "int32", + "example": 512, + "default": 256 + }, + "messageLifeTimeInMinutes": { + "type": "integer", + "description": "life time of message in minutes", + "format": "int32", + "example": 5, + "default": 10 + }, + "sharedSecret": { + "type": "string", + "description": "Shared secret for encryption", + "example": "this is a shared secret" + }, + "sendHighPriorityMessages": { + "type": "boolean", + "description": "If set, then high priority messages will NOT be queued, will incur additional charges", + "example": false, + "default": false + }, + "sinNumber": { + "type": "integer", + "description": "The SIN number that maps should use, must be greater then 128", + "format": "int32", + "example": 147, + "default": 147 + }, + "baseUrl": { + "type": "string", + "description": "URL of the server" + }, + "httpRequestTimeout": { + "type": "integer", + "description": "HTTP Request time out in seconds", + "format": "int32" + }, + "maxInflightEventsPerDevice": { + "type": "integer", + "description": "Max number of events to be in flight per each modems", + "format": "int32" + }, + "commonInboundPublishRoot": { + "type": "string", + "description": "Topic template for publishing decoded common (SIN < 127) inbound messages (after parsing SIN/MIN).", + "example": "/{deviceId}/common/in/{sin}/{min}", + "default": "/{deviceId}/common/in/{sin}/{min}" + }, + "commonOutboundPublishRoot": { + "type": "string", + "description": "Topic root for accepting outbound common (SIN < 127) messages to be encoded and sent to the modem. Wildcards are allowed.", + "example": "/{deviceId}/common/out/#", + "default": "/{deviceId}/common/out/#" + }, + "mapsInboundPublishRoot": { + "type": "string", + "description": "Topic template for publishing decoded MAPS (SIN 147) inbound messages into a namespace tree (after parsing).", + "example": "/{deviceId}/maps/in/{namespace}/#", + "default": "/{deviceId}/maps/in/{namespace}/#" + }, + "mapsOutboundPublishRoot": { + "type": "string", + "description": "Topic template for accepting outbound MAPS (SIN 147) messages from a namespace tree to be encoded and sent to the modem.", + "example": "/{deviceId}/maps/out/{namespace}/#", + "default": "/{deviceId}/maps/out/{namespace}/#" + }, + "outboundBroadcast": { + "type": "string", + "description": "Topic used to broadcast a message to all modems/clients (encoded and sent to each).", + "example": "/inmarsat/broadcast", + "default": "/inmarsat/broadcast" + }, + "mailboxId": { + "type": "string", + "description": "Mailbox ID" + }, + "mailboxPassword": { + "type": "string", + "description": "Mailbox password" + }, + "deviceInfoUpdateMinutes": { + "type": "integer", + "description": "Device Info update time in minutes", + "format": "int32" + } + } + } + ] + }, + "SemtechConfigDTO": { + "type": "object", + "description": "Semtech Protocol Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolConfigDTO" + }, + { + "type": "object", + "properties": { + "maxQueued": { + "type": "integer", + "description": "Maximum queue size for Semtech", + "format": "int32", + "example": 10 + }, + "inboundTopicName": { + "type": "string", + "description": "Inbound topic name for Semtech messages", + "example": "/semtech/inbound" + }, + "outboundTopicName": { + "type": "string", + "description": "Outbound topic name for Semtech messages", + "example": "/semtech/outbound" + }, + "statusTopicName": { + "type": "string", + "description": "Status topic name for Semtech", + "example": "/semtech/status" + } + } + } + ] + }, + "SslConfigDTO": { + "type": "object", + "properties": { + "clientCertificateRequired": { + "type": "boolean", + "description": "Whether client certificate is required", + "example": true + }, + "clientCertificateWanted": { + "type": "boolean", + "description": "Whether client certificate is wanted", + "example": true + }, + "crlUrl": { + "type": "string", + "description": "URL for Certificate Revocation List", + "example": "http://example.com/crl" + }, + "crlInterval": { + "type": "integer", + "description": "Interval in milliseconds for CRL refresh", + "format": "int64", + "example": 3600000 + }, + "context": { + "type": "string", + "description": "SSL context identifier", + "example": "TLSv3" + }, + "keyStore": { + "$ref": "#/components/schemas/KeyStoreConfigDTO" + }, + "trustStore": { + "$ref": "#/components/schemas/KeyStoreConfigDTO" + } + }, + "description": "SSL Configuration DTO" + }, + "StatisticsConfigDTO": { + "title": "Analytics", + "type": "object", + "properties": { + "statisticName": { + "title": "name of the statistic engine to run", + "type": "string", + "description": "The number of events to process before emitting an event containing the data", + "example": "Advanced" + }, + "eventCount": { + "title": "Number of events", + "type": "integer", + "description": "The number of events to process before emitting an event containing the data", + "format": "int32", + "example": 100 + }, + "ignoreList": { + "title": "Ignore List", + "type": "array", + "description": "Lists the keys that should be ignored from the event and not part of the resultant statistics, Comma seperated", + "nullable": true, + "example": "modelName,serialNumber", + "items": { + "title": "Ignore List", + "type": "string", + "description": "Lists the keys that should be ignored from the event and not part of the resultant statistics, Comma seperated", + "nullable": true, + "example": "modelName,serialNumber" + } + }, + "keyList": { + "title": "Key List", + "type": "array", + "description": "Specific set of keys to use rather than auto discovery this is used to refine the keys used", + "nullable": true, + "example": "temperature, humidity", + "items": { + "title": "Key List", + "type": "string", + "description": "Specific set of keys to use rather than auto discovery this is used to refine the keys used", + "nullable": true, + "example": "temperature, humidity" + } + } + }, + "description": "Configures the event stream statistics analytics" + }, + "StoGiConfigDTO": { + "type": "object", + "description": "OrbComm ST and OGi Modem Protocol Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolConfigDTO" + }, + { + "type": "object", + "properties": { + "incomingMessagePollInterval": { + "type": "integer", + "description": "Time in seconds to poll the modem for incoming messages", + "format": "int64", + "example": 15, + "default": 10 + }, + "outgoingMessagePollInterval": { + "type": "integer", + "description": "Time in seconds to poll for outgoing messages", + "format": "int64", + "example": 60, + "default": 60 + }, + "maxBufferSize": { + "type": "integer", + "description": "maximum buffer size allowed by the satellite communications", + "format": "int32", + "example": 4000, + "default": 4000 + }, + "compressionCutoffSize": { + "type": "integer", + "description": "minimum sized buffer that will be compressed", + "format": "int32", + "example": 512, + "default": 256 + }, + "messageLifeTimeInMinutes": { + "type": "integer", + "description": "life time of message in minutes", + "format": "int32", + "example": 5, + "default": 10 + }, + "sharedSecret": { + "type": "string", + "description": "Shared secret for encryption", + "example": "this is a shared secret" + }, + "sendHighPriorityMessages": { + "type": "boolean", + "description": "If set, then high priority messages will NOT be queued, will incur additional charges", + "example": false, + "default": false + }, + "sinNumber": { + "type": "integer", + "description": "The SIN number that maps should use, must be greater then 128", + "format": "int32", + "example": 147, + "default": 147 + }, + "serial": { + "$ref": "#/components/schemas/SerialConfigDTO" + }, + "modemResponseTimeout": { + "type": "integer", + "description": "Time in milliseconds to wait for a modem response", + "format": "int64" + }, + "initialSetup": { + "type": "string", + "description": "Initial modem setup string" + }, + "locationPollInterval": { + "type": "integer", + "description": "Time in seconds between polling modem location and statistics, 0 disables it", + "format": "int64", + "example": 60, + "default": 0 + }, + "modemStatsTopic": { + "type": "string", + "description": "If present, then the name of the topic to send modem statistics to", + "example": "/modem/stats", + "default": "/modem/stats" + }, + "modemRawRequest": { + "type": "string", + "description": "If present, then the name of the topic that will be used to send raw messages to", + "example": "/incoming/{sin}/{min}", + "default": "/incoming/{sin}/{min}" + }, + "modemRawResponse": { + "type": "string", + "description": "If present, then the name of the topic that will be used monitor for response and send directly to the modem", + "example": "/outbound", + "default": "/outbound" + } + } + } + ] + }, + "StompConfigDTO": { + "type": "object", + "description": "STOMP Protocol Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolConfigDTO" + }, + { + "type": "object", + "properties": { + "maxBufferSize": { + "type": "integer", + "description": "Maximum buffer size for STOMP", + "format": "int32", + "example": 65535 + }, + "maxReceive": { + "type": "integer", + "description": "Maximum receive limit for STOMP", + "format": "int32", + "example": 1000 + }, + "base64EncodeBinary": { + "type": "boolean", + "description": "Encode the outgoing buffer as bas64 if binary", + "example": true + } + } + } + ] + }, + "TcpConfigDTO": { + "type": "object", + "description": "TCP Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/EndPointConfigDTO" + }, + { + "type": "object", + "properties": { + "receiveBufferSize": { + "type": "integer", + "description": "Size of the receive buffer", + "format": "int32", + "example": 128000 + }, + "sendBufferSize": { + "type": "integer", + "description": "Size of the send buffer", + "format": "int32", + "example": 128000 + }, + "timeout": { + "type": "integer", + "description": "Connection timeout in milliseconds", + "format": "int32", + "example": 60000 + }, + "backlog": { + "type": "integer", + "description": "Backlog for TCP connections", + "format": "int32", + "example": 100 + }, + "soLingerDelaySec": { + "type": "integer", + "description": "SO linger delay in seconds", + "format": "int32", + "example": 10 + }, + "readDelayOnFragmentation": { + "type": "integer", + "description": "Read delay on fragmentation", + "format": "int32", + "example": 100 + }, + "fragmentationLimit": { + "type": "integer", + "description": "Fragmentation limit for the connection", + "format": "int32", + "example": 5 + }, + "enableReadDelayOnFragmentation": { + "type": "boolean", + "description": "Enable read delay on fragmentation", + "example": true + } + } + } + ] + }, + "TlsConfigDTO": { + "type": "object", + "description": "TLS Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/EndPointConfigDTO" + }, + { + "type": "object", + "properties": { + "receiveBufferSize": { + "type": "integer", + "description": "Size of the receive buffer", + "format": "int32", + "example": 128000 + }, + "sendBufferSize": { + "type": "integer", + "description": "Size of the send buffer", + "format": "int32", + "example": 128000 + }, + "timeout": { + "type": "integer", + "description": "Connection timeout in milliseconds", + "format": "int32", + "example": 60000 + }, + "backlog": { + "type": "integer", + "description": "Backlog for TCP connections", + "format": "int32", + "example": 100 + }, + "soLingerDelaySec": { + "type": "integer", + "description": "SO linger delay in seconds", + "format": "int32", + "example": 10 + }, + "readDelayOnFragmentation": { + "type": "integer", + "description": "Read delay on fragmentation", + "format": "int32", + "example": 100 + }, + "fragmentationLimit": { + "type": "integer", + "description": "Fragmentation limit for the connection", + "format": "int32", + "example": 5 + }, + "enableReadDelayOnFragmentation": { + "type": "boolean", + "description": "Enable read delay on fragmentation", + "example": true + }, + "sslConfig": { + "$ref": "#/components/schemas/SslConfigDTO" + } + } + } + ] + }, + "UdpConfigDTO": { + "type": "object", + "description": "UDP Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/EndPointConfigDTO" + }, + { + "type": "object", + "properties": { + "packetReuseTimeout": { + "type": "integer", + "description": "Timeout for reusing packets, in milliseconds", + "format": "int64", + "example": 1000 + }, + "idleSessionTimeout": { + "type": "integer", + "description": "Idle session timeout duration, in seconds", + "format": "int64", + "example": 600 + }, + "hmacHostLookupCacheExpiry": { + "type": "integer", + "description": "Expiry time for HMAC host lookup cache, in seconds", + "format": "int64", + "example": 600 + }, + "hmacConfigList": { + "type": "array", + "description": "List of HMAC configurations for nodes", + "items": { + "$ref": "#/components/schemas/HmacConfigDTO" + } + } + } + } + ] + }, + "WebSocketConfigDTO": { + "type": "object", + "description": "WebSocket Protocol Configuration DTO", + "allOf": [ + { + "$ref": "#/components/schemas/ProtocolConfigDTO" + } + ] + }, + "IntegrationStatusDTO": { + "title": "Integration Status", + "type": "object", + "properties": { + "interfaceName": { + "title": "Interface Name", + "type": "string", + "description": "The name of the interface associated with this integration.", + "example": "myInterface" + }, + "bytesSent": { + "title": "Bytes Sent", + "minimum": 0, + "type": "integer", + "description": "The total number of bytes sent by the interface.", + "format": "int64", + "example": 123456 + }, + "bytesReceived": { + "title": "Bytes Received", + "minimum": 0, + "type": "integer", + "description": "The total number of bytes received by the interface.", + "format": "int64", + "example": 654321 + }, + "messagesSent": { + "title": "Messages Sent", + "minimum": 0, + "type": "integer", + "description": "The total number of messages sent by the interface.", + "format": "int64", + "example": 100 + }, + "messagesReceived": { + "title": "Messages Received", + "minimum": 0, + "type": "integer", + "description": "The total number of messages received by the interface.", + "format": "int64", + "example": 95 + }, + "errors": { + "title": "Connection Errors", + "minimum": 0, + "type": "integer", + "description": "The total count of connection errors encountered.", + "format": "int64", + "example": 2 + }, + "lastReadTime": { + "title": "Last Read Time", + "type": "integer", + "description": "The timestamp of the last read operation.", + "format": "int64", + "example": 1625812345678 + }, + "lastWriteTime": { + "title": "Last Write Time", + "type": "integer", + "description": "The timestamp of the last write operation.", + "format": "int64", + "example": 1625812345678 + }, + "state": { + "title": "Interface State", + "type": "string", + "description": "The current state of the interface (e.g., active, inactive).", + "example": "active" + }, + "statistics": { + "title": "Statistics", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/LinkedMovingAverageRecordDTO" + }, + "description": "A map of moving averages related to interface performance metrics.", + "nullable": true, + "example": "{\"averageRead\": {\"name\": \"averageRead\", \"unitName\": \"bytes\", \"current\": 50, ...}}" + } + }, + "description": "Represents the status of an integration, including bytes and messages processed, connection state, errors, and performance statistics." + }, + "LinkedMovingAverageRecordDTO": { + "title": "Linked Moving Average Record", + "type": "object", + "properties": { + "name": { + "title": "Metric Name", + "type": "string", + "description": "The name of the metric being recorded (e.g., 'latency', 'throughput').", + "example": "latency" + }, + "unitName": { + "title": "Unit Name", + "type": "string", + "description": "The unit of measurement for the metric (e.g., 'ms' for milliseconds).", + "example": "ms" + }, + "timeSpan": { + "title": "Timespan", + "minimum": 0, + "type": "integer", + "description": "The timespan over which the moving average is calculated, in milliseconds.", + "format": "int64", + "example": 60000 + }, + "current": { + "title": "Current Value", + "minimum": 0, + "type": "integer", + "description": "The current moving average value for the metric.", + "format": "int64", + "example": 150 + }, + "stats": { + "title": "Statistics Map", + "type": "object", + "additionalProperties": { + "title": "Statistics Map", + "type": "integer", + "description": "A map containing additional statistical values, where each key is a descriptive label and each value is a measurement.", + "format": "int64" + }, + "description": "A map containing additional statistical values, where each key is a descriptive label and each value is a measurement.", + "example": { + "min": 100, + "max": 200, + "average": 150 + } + } + }, + "description": "Represents a record of moving average statistics, tracking metrics over a defined timespan with specific units.", + "example": "{\"latency\": {\"name\": \"latency\", \"unitName\": \"ms\", \"current\": 10, ...}}" + }, + "IntegrationListStatus": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IntegrationStatusDTO" + } + } + } + }, + "IntegrationDetailResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IntegrationInfoDTO" + } + }, + "globalConfig": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "EndPointServerConfigDTO": { + "title": "EndPoint Server Configuration DTO", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the endpoint server", + "example": "MainServer" + }, + "url": { + "type": "string", + "description": "URL for the endpoint server", + "example": "tcp://localhost:1883" + }, + "endPointConfig": { + "$ref": "#/components/schemas/EndPointConfigDTO" + }, + "saslConfig": { + "$ref": "#/components/schemas/SaslConfigDTO" + }, + "protocolConfigs": { + "type": "array", + "description": "List of protocol configurations for the endpoint", + "items": { + "$ref": "#/components/schemas/ProtocolConfigDTO" + } + }, + "authenticationRealm": { + "type": "string", + "description": "Authentication realm", + "example": "defaultRealm" + }, + "backlog": { + "type": "integer", + "description": "Backlog for the endpoint server", + "format": "int32", + "example": 100 + }, + "selectorTaskWait": { + "type": "integer", + "description": "Selector task wait time", + "format": "int32", + "example": 10 + }, + "protocols": { + "type": "string" + } + }, + "description": "Represents configuration settings for an endpoint server." + }, + "InterfaceInfoDTO": { + "title": "Interface Information", + "type": "object", + "properties": { + "uniqueId": { + "title": "unique id", + "type": "string", + "description": "UUID to reference the interface" + }, + "name": { + "title": "Interface Name", + "type": "string", + "description": "Unique name of the interface", + "example": "myInterface" + }, + "port": { + "title": "Port", + "type": "integer", + "description": "Port that the interface is bound to", + "format": "int32", + "example": 8080 + }, + "host": { + "title": "Host", + "type": "string", + "description": "Host that the interface is bound to", + "example": "http://localhost" + }, + "state": { + "title": "State", + "type": "string", + "description": "Current state of the interface", + "example": "Started" + }, + "config": { + "$ref": "#/components/schemas/EndPointServerConfigDTO" + } + }, + "description": "Contains details about an interface, including its name, host, port, and current state." + }, + "InterfaceStatusDTO": { + "title": "Interface Status", + "type": "object", + "properties": { + "interfaceName": { + "title": "Interface Name", + "type": "string", + "description": "Name of the interface", + "example": "myInterface" + }, + "totalBytesSent": { + "title": "Total Bytes Sent", + "minimum": 0, + "type": "integer", + "description": "Total number of bytes sent by the interface.", + "format": "int64", + "example": 1024000 + }, + "totalBytesReceived": { + "title": "Total Bytes Received", + "minimum": 0, + "type": "integer", + "description": "Total number of bytes received by the interface.", + "format": "int64", + "example": 2048000 + }, + "totalMessagesSent": { + "title": "Total Messages Sent", + "minimum": 0, + "type": "integer", + "description": "Total number of messages sent by the interface.", + "format": "int64", + "example": 500 + }, + "totalMessagesReceived": { + "title": "Total Messages Received", + "minimum": 0, + "type": "integer", + "description": "Total number of messages received by the interface.", + "format": "int64", + "example": 480 + }, + "bytesSent": { + "title": "Bytes Sent per Second", + "minimum": 0, + "type": "number", + "description": "Number of bytes sent per second.", + "format": "float", + "example": 1000 + }, + "bytesReceived": { + "title": "Bytes Received per Second", + "minimum": 0, + "type": "number", + "description": "Number of bytes received per second.", + "format": "float", + "example": 2000 + }, + "messagesSent": { + "title": "Messages Sent per Second", + "minimum": 0, + "type": "number", + "description": "Number of messages sent per second.", + "format": "float", + "example": 5 + }, + "messagesReceived": { + "title": "Messages Received per Second", + "minimum": 0, + "type": "number", + "description": "Number of messages received per second.", + "format": "float", + "example": 4 + }, + "connections": { + "title": "Current Connections", + "minimum": 0, + "type": "integer", + "description": "Number of current connections.", + "format": "int64", + "example": 10 + }, + "errors": { + "title": "Connection Errors", + "minimum": 0, + "type": "integer", + "description": "Total number of connection errors.", + "format": "int64", + "example": 3 + }, + "statistics": { + "title": "Statistics", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/LinkedMovingAverageRecordDTO" + }, + "description": "A map of moving averages for various metrics.", + "nullable": true + } + }, + "description": "Represents detailed statistics about an interface, including bytes and messages sent/received, connection count, and error counts." + }, + "LogEntries": { + "type": "object", + "properties": { + "logEntries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LogEntry" + } + } + } + }, + "LogEntry": { + "title": "LogEntry", + "type": "object", + "properties": { + "logNumber": { + "title": "logNumber", + "type": "integer", + "description": "Represents the order for the log entry.", + "format": "int64" + }, + "level": { + "title": "level", + "type": "integer", + "description": "The level of this log entry", + "format": "int32" + }, + "message": { + "title": "message", + "type": "string", + "description": "The actual log entry" + } + }, + "description": "Represents a log entry from the server." + }, + "LoRaDeviceInfoDTO": { + "title": "LoRa Device Information", + "type": "object", + "properties": { + "name": { + "title": "Device Name", + "type": "string", + "description": "The name of the LoRa device.", + "example": "LoRaDevice_01" + }, + "radio": { + "title": "Radio Type", + "type": "string", + "description": "Type of radio module used by the LoRa device.", + "example": "SX1276" + }, + "bytesSent": { + "title": "Bytes Sent", + "minimum": 0, + "type": "integer", + "description": "Total number of bytes sent by the LoRa device.", + "format": "int64", + "example": 1048576 + }, + "bytesReceived": { + "title": "Bytes Received", + "minimum": 0, + "type": "integer", + "description": "Total number of bytes received by the LoRa device.", + "format": "int64", + "example": 2048000 + }, + "packetsSent": { + "title": "Packets Sent", + "minimum": 0, + "type": "integer", + "description": "Total number of packets sent by the LoRa device.", + "format": "int64", + "example": 500 + }, + "packetsReceived": { + "title": "Packets Received", + "minimum": 0, + "type": "integer", + "description": "Total number of packets received by the LoRa device.", + "format": "int64", + "example": 480 + }, + "endPointInfoList": { + "title": "Endpoint Information List", + "type": "array", + "description": "A list of endpoint information for the device, detailing each endpoint�s status and metrics.", + "nullable": true, + "items": { + "$ref": "#/components/schemas/LoRaEndPointInfoDTO" + } + } + }, + "description": "Provides detailed information about a LoRa device, including sent and received data statistics and endpoint details." + }, + "LoRaEndPointInfoDTO": { + "title": "LoRa Endpoint Information", + "type": "object", + "properties": { + "nodeId": { + "title": "Node ID", + "minimum": 0, + "type": "integer", + "description": "Unique identifier for the LoRa node.", + "format": "int32", + "example": 1 + }, + "lastRSSI": { + "title": "Last RSSI", + "maximum": 0, + "minimum": -200, + "type": "integer", + "description": "The most recent Received Signal Strength Indicator (RSSI) value for this endpoint.", + "format": "int32", + "example": -70 + }, + "incomingQueueSize": { + "title": "Incoming Queue Size", + "minimum": 0, + "type": "integer", + "description": "The size of the incoming message queue for this endpoint.", + "format": "int32", + "example": 10 + }, + "connectionSize": { + "title": "Connection Size", + "minimum": 0, + "type": "integer", + "description": "The number of active connections for this endpoint.", + "format": "int32", + "example": 5 + }, + "lastRead": { + "title": "Last read operation", + "type": "integer", + "description": "The last time a packet was received", + "format": "int64" + }, + "lastWrite": { + "title": "Last write operation", + "type": "integer", + "description": "The last time a packet was sent", + "format": "int64" + } + }, + "description": "Provides information about a LoRa endpoint, including node ID, RSSI, and queue size.", + "nullable": true + }, + "LoRaEndPointConnectionInfoDTO": { + "title": "LoRa Endpoint Connection Information", + "type": "object", + "properties": { + "rssi": { + "title": "RSSI", + "maximum": 0, + "minimum": -200, + "type": "integer", + "description": "Received Signal Strength Indicator (RSSI) for the connection.", + "format": "int64", + "example": -70 + }, + "missedPackets": { + "title": "Missed Packets", + "minimum": 0, + "type": "integer", + "description": "The number of packets that were missed or lost.", + "format": "int64", + "example": 3 + }, + "receivedPackets": { + "title": "Received Packets", + "minimum": 0, + "type": "integer", + "description": "The total number of packets successfully received.", + "format": "int64", + "example": 500 + }, + "remoteNodeId": { + "title": "Remote Node ID", + "minimum": 0, + "type": "integer", + "description": "The identifier of the remote node in the connection.", + "format": "int32", + "example": 2 + }, + "lastPacketId": { + "title": "Last Packet ID", + "minimum": 0, + "type": "integer", + "description": "The identifier of the last packet received.", + "format": "int64", + "example": 1000 + }, + "lastReadTime": { + "title": "Last Read Time", + "type": "integer", + "description": "The timestamp of the last read operation from this connection.", + "format": "int64", + "example": 1625812345678 + }, + "lastWriteTime": { + "title": "Last Write Time", + "type": "integer", + "description": "The timestamp of the last write operation to this connection.", + "format": "int64", + "example": 1625812345678 + } + }, + "description": "Represents connection metrics and information for a LoRa endpoint connection, including signal strength and packet details." + }, + "BaseResponse": { + "type": "object" + }, + "LoRaDeviceConfigInfoDTO": { + "title": "LoRa Device Configuration Information", + "type": "object", + "properties": { + "name": { + "title": "Device Name", + "type": "string", + "description": "The name of the LoRa device.", + "example": "LoRa_Radio_01" + }, + "radio": { + "title": "Radio Type", + "type": "string", + "description": "Type of radio module used by the LoRa device.", + "example": "rfm95" + }, + "cs": { + "title": "Chip Select Pin", + "minimum": 0, + "type": "integer", + "description": "The chip select pin number for the LoRa device.", + "format": "int32", + "example": 10 + }, + "irq": { + "title": "Interrupt Request Pin", + "minimum": 0, + "type": "integer", + "description": "The interrupt request (IRQ) pin number for the LoRa device.", + "format": "int32", + "example": 2 + }, + "rst": { + "title": "Reset Pin", + "minimum": 0, + "type": "integer", + "description": "The reset pin number for the LoRa device.", + "format": "int32", + "example": 4 + }, + "power": { + "title": "Power Level", + "maximum": 20, + "minimum": 0, + "type": "integer", + "description": "The transmission power level setting for the LoRa device.", + "format": "int32", + "example": 14 + }, + "cadTimeout": { + "title": "CAD Timeout", + "minimum": 0, + "type": "integer", + "description": "The Channel Activity Detection (CAD) timeout in milliseconds.", + "format": "int32", + "example": 100 + }, + "frequency": { + "title": "Frequency", + "minimum": 0.0, + "type": "number", + "description": "The operating frequency for the LoRa device in MHz.", + "format": "float", + "example": 915.0 + } + }, + "description": "Represents configuration information for a LoRa device, including radio details and hardware settings." + }, + "TransactionData": { + "type": "object", + "properties": { + "destinationName": { + "type": "string" + }, + "eventIds": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + } + } + }, + "ConsumedMessages": { + "type": "object", + "properties": { + "destination": { + "type": "string" + }, + "messages": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MessageDTO" + } + } + } + } + }, + "ConsumedResponse": { + "type": "object", + "properties": { + "consumedMessages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConsumedMessages" + } + } + } + }, + "MessageDTO": { + "title": "Message", + "required": [ + "payload" + ], + "type": "object", + "properties": { + "identifier": { + "title": "Message Identifier", + "type": "integer", + "description": "The event identifier", + "format": "int64" + }, + "payload": { + "title": "Payload", + "type": "string", + "description": "The main payload content of the message, represented as a byte64 string.", + "example": "VGhpcyBpcyBhIGV4YW1wbGUgZGF0YS4=" + }, + "contentType": { + "title": "Content Type", + "type": "string", + "description": "The MIME type of the message payload, indicating its format.", + "example": "application/json" + }, + "correlationData": { + "title": "Correlation Data", + "type": "string", + "description": "Additional data used for correlating messages, provided as a byte array.", + "format": "byte", + "example": "WzEsMiwzLDRd" + }, + "expiry": { + "title": "Expiry Time", + "type": "integer", + "description": "The expiry time for the message in milliseconds. Default is -1, indicating no expiry.", + "format": "int64", + "example": 60000, + "default": -1 + }, + "priority": { + "title": "Priority", + "type": "integer", + "description": "The priority level of the message, ranging from 0 (lowest) to 10 (highest). Default is 4 (normal).", + "format": "int32", + "example": 4, + "default": 4 + }, + "qualityOfService": { + "title": "Quality of Service", + "type": "integer", + "description": "The Quality of Service level for the message: 0 (at most once), 1 (at least once), or 2 (exactly once).", + "format": "int32", + "example": 1, + "default": 0 + }, + "creation": { + "title": "Creation Date/Time", + "type": "string", + "description": "The time the server received this event", + "format": "date-time" + }, + "dataMap": { + "title": "Message Parameters", + "type": "object", + "additionalProperties": { + "title": "Message Parameters", + "type": "object", + "description": "A map containing optional key-value pairs associated with the message.", + "example": { + "key1": "value1", + "key2": 42 + } + }, + "description": "A map containing optional key-value pairs associated with the message.", + "example": { + "key1": "value1", + "key2": 42 + } + }, + "metaData": { + "title": "Event Meta Data", + "type": "object", + "additionalProperties": { + "title": "Event Meta Data", + "type": "string", + "description": "A map of string, string values that the server has added to the event as it was processed", + "example": "{\"key1\":\"value1\",\"key2\":42}" + }, + "description": "A map of string, string values that the server has added to the event as it was processed", + "example": { + "key1": "value1", + "key2": 42 + } + } + }, + "description": "Represents a messaging entity with configurable quality, priority, and metadata attributes." + }, + "ConsumeRequestDTO": { + "title": "Consume Request", + "type": "object", + "properties": { + "destination": { + "title": "Destination name", + "type": "string", + "description": "Optional, if supplied gets any messages outstanding for this destination, else all messages pending delivery", + "example": "topicName" + }, + "depth": { + "title": "Depth", + "type": "integer", + "description": "The max number of events that should be returned", + "format": "int32", + "example": 60, + "default": 10 + } + }, + "description": "Requests the server to respond with any outstanding messages specified by the destination or all if no destination supplied" + }, + "SubscriptionDepth": { + "type": "object", + "properties": { + "depth": { + "type": "integer", + "format": "int32" + }, + "destination": { + "type": "string" + } + } + }, + "SubscriptionDepthResponse": { + "type": "object", + "properties": { + "subscriptionDepths": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SubscriptionDepth" + } + } + } + }, + "PublishRequestDTO": { + "title": "Publish Request", + "required": [ + "destinationName", + "message" + ], + "type": "object", + "properties": { + "destinationName": { + "title": "Destination Topic", + "type": "string", + "description": "The topic to which the message will be published. This should be a valid topic name recognized by the messaging system.", + "example": "sensor/data" + }, + "message": { + "$ref": "#/components/schemas/MessageDTO" + }, + "retain": { + "title": "Retain Message", + "type": "boolean", + "description": "Indicates if the message should be retained on the destination. If true, the message will be stored and sent to new subscribers on the topic.", + "example": false, + "default": false + } + }, + "description": "Represents a request to publish a message to a specified topic with optional retention." + }, + "AsyncMessageDTO": { + "required": [ + "payload" + ], + "type": "object", + "properties": { + "identifier": { + "title": "Message Identifier", + "type": "integer", + "description": "The event identifier", + "format": "int64" + }, + "payload": { + "title": "Payload", + "type": "string", + "description": "The main payload content of the message, represented as a byte64 string.", + "example": "VGhpcyBpcyBhIGV4YW1wbGUgZGF0YS4=" + }, + "contentType": { + "title": "Content Type", + "type": "string", + "description": "The MIME type of the message payload, indicating its format.", + "example": "application/json" + }, + "correlationData": { + "title": "Correlation Data", + "type": "string", + "description": "Additional data used for correlating messages, provided as a byte array.", + "format": "byte", + "example": "WzEsMiwzLDRd" + }, + "expiry": { + "title": "Expiry Time", + "type": "integer", + "description": "The expiry time for the message in milliseconds. Default is -1, indicating no expiry.", + "format": "int64", + "example": 60000, + "default": -1 + }, + "priority": { + "title": "Priority", + "type": "integer", + "description": "The priority level of the message, ranging from 0 (lowest) to 10 (highest). Default is 4 (normal).", + "format": "int32", + "example": 4, + "default": 4 + }, + "qualityOfService": { + "title": "Quality of Service", + "type": "integer", + "description": "The Quality of Service level for the message: 0 (at most once), 1 (at least once), or 2 (exactly once).", + "format": "int32", + "example": 1, + "default": 0 + }, + "creation": { + "title": "Creation Date/Time", + "type": "string", + "description": "The time the server received this event", + "format": "date-time" + }, + "dataMap": { + "title": "Message Parameters", + "type": "object", + "additionalProperties": { + "title": "Message Parameters", + "type": "object", + "description": "A map containing optional key-value pairs associated with the message.", + "example": { + "key1": "value1", + "key2": 42 + } + }, + "description": "A map containing optional key-value pairs associated with the message.", + "example": { + "key1": "value1", + "key2": 42 + } + }, + "metaData": { + "title": "Event Meta Data", + "type": "object", + "additionalProperties": { + "title": "Event Meta Data", + "type": "string", + "description": "A map of string, string values that the server has added to the event as it was processed", + "example": "{\"key1\":\"value1\",\"key2\":42}" + }, + "description": "A map of string, string values that the server has added to the event as it was processed", + "example": { + "key1": "value1", + "key2": 42 + } + }, + "destinationName": { + "title": "Destination Name", + "type": "string", + "description": "The complete path for the destination that the event is part of", + "example": "/folder/topic" + } + }, + "description": "AsyncMessageDTO represents messages delivered via SSE." + }, + "SubscriptionRequestDTO": { + "title": "Subscription Request", + "required": [ + "destinationName" + ], + "type": "object", + "properties": { + "destinationName": { + "title": "Destination Name", + "type": "string", + "description": "The name of the destination (e.g., topic or queue) to which the subscription is bound.Supports MQTT style wild card subscription", + "example": "sensor/data or /sensor/# " + }, + "namedSubscription": { + "title": "Named Subscription", + "type": "string", + "description": "An optional name for a named subscription, allowing clients to re-use existing subscriptions if provided.", + "nullable": true, + "example": "temperatureAlerts" + }, + "filter": { + "title": "Filter Expression", + "type": "string", + "description": "An optional filter expression written in JMS selector syntax to filter messages received by the subscription.", + "nullable": true, + "example": "temperature > 25" + }, + "maxDepth": { + "title": "Maximum Queue Depth", + "type": "integer", + "description": "The maximum number of messages that can be queued for the subscription before new messages are dropped.", + "format": "int32", + "nullable": true, + "example": 10, + "default": 1 + }, + "transactional": { + "title": "Transactional subscription", + "type": "boolean", + "description": "Flag to indicate the subscription is transactional", + "example": true, + "default": false + }, + "retainMessage": { + "title": "Retain Message", + "type": "boolean", + "description": "Indicates if messages should be retained on the destination for this subscription, meaning they will be stored and made available to future subscribers.", + "nullable": true, + "example": false, + "default": false + } + }, + "description": "Represents a request to create a subscription to a specific destination, with optional filtering and message retention." + }, + "SchemaPostDTO": { + "title": "Schema Post Data", + "type": "object", + "properties": { + "schema": { + "title": "Schema", + "type": "string", + "description": "A JSON-encoded string representing the schema object to be posted.", + "example": "{\"type\":\"record\",\"name\":\"User\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"}]}" + }, + "context": { + "title": "Context", + "type": "string", + "description": "The name or context of the schema, identifying the scope or purpose for which it is used.", + "example": "UserProfile" + } + }, + "description": "Represents the data required to post a new schema, including the JSON-encoded schema object and its context." + }, + "JsonArray": { + "type": "object", + "properties": { + "empty": { + "type": "boolean" + }, + "asInt": { + "type": "integer", + "format": "int32" + }, + "asDouble": { + "type": "number", + "format": "double" + }, + "asLong": { + "type": "integer", + "format": "int64" + }, + "asBoolean": { + "type": "boolean" + }, + "asBigInteger": { + "type": "integer" + }, + "asShort": { + "type": "integer", + "format": "int32" + }, + "asFloat": { + "type": "number", + "format": "float" + }, + "asByte": { + "type": "string", + "format": "byte" + }, + "asNumber": { + "type": "number" + }, + "asString": { + "type": "string" + }, + "asCharacter": { + "type": "string" + }, + "asBigDecimal": { + "type": "number" + }, + "jsonNull": { + "type": "boolean" + }, + "jsonArray": { + "type": "boolean" + }, + "asJsonArray": { + "$ref": "#/components/schemas/JsonArray" + }, + "asJsonObject": { + "$ref": "#/components/schemas/JsonObject" + }, + "asJsonPrimitive": { + "$ref": "#/components/schemas/JsonPrimitive" + }, + "jsonPrimitive": { + "type": "boolean" + }, + "jsonObject": { + "type": "boolean" + }, + "asJsonNull": { + "$ref": "#/components/schemas/JsonNull" + } + } + }, + "JsonNull": { + "type": "object", + "properties": { + "asInt": { + "type": "integer", + "format": "int32" + }, + "asDouble": { + "type": "number", + "format": "double" + }, + "asLong": { + "type": "integer", + "format": "int64" + }, + "asBoolean": { + "type": "boolean" + }, + "asBigInteger": { + "type": "integer" + }, + "asShort": { + "type": "integer", + "format": "int32" + }, + "asFloat": { + "type": "number", + "format": "float" + }, + "asByte": { + "type": "string", + "format": "byte" + }, + "jsonNull": { + "type": "boolean" + }, + "asNumber": { + "type": "number" + }, + "asString": { + "type": "string" + }, + "jsonArray": { + "type": "boolean" + }, + "asJsonArray": { + "$ref": "#/components/schemas/JsonArray" + }, + "asJsonObject": { + "$ref": "#/components/schemas/JsonObject" + }, + "asJsonPrimitive": { + "$ref": "#/components/schemas/JsonPrimitive" + }, + "jsonPrimitive": { + "type": "boolean" + }, + "jsonObject": { + "type": "boolean" + }, + "asCharacter": { + "type": "string" + }, + "asBigDecimal": { + "type": "number" + }, + "asJsonNull": { + "$ref": "#/components/schemas/JsonNull" + } + } + }, + "JsonObject": { + "type": "object", + "properties": { + "empty": { + "type": "boolean" + }, + "asInt": { + "type": "integer", + "format": "int32" + }, + "asDouble": { + "type": "number", + "format": "double" + }, + "asLong": { + "type": "integer", + "format": "int64" + }, + "asBoolean": { + "type": "boolean" + }, + "asBigInteger": { + "type": "integer" + }, + "asShort": { + "type": "integer", + "format": "int32" + }, + "asFloat": { + "type": "number", + "format": "float" + }, + "asByte": { + "type": "string", + "format": "byte" + }, + "jsonNull": { + "type": "boolean" + }, + "asNumber": { + "type": "number" + }, + "asString": { + "type": "string" + }, + "jsonArray": { + "type": "boolean" + }, + "asJsonArray": { + "$ref": "#/components/schemas/JsonArray" + }, + "asJsonObject": { + "$ref": "#/components/schemas/JsonObject" + }, + "asJsonPrimitive": { + "$ref": "#/components/schemas/JsonPrimitive" + }, + "jsonPrimitive": { + "type": "boolean" + }, + "jsonObject": { + "type": "boolean" + }, + "asCharacter": { + "type": "string" + }, + "asBigDecimal": { + "type": "number" + }, + "asJsonNull": { + "$ref": "#/components/schemas/JsonNull" + } + } + }, + "JsonPrimitive": { + "type": "object", + "properties": { + "number": { + "type": "boolean" + }, + "asInt": { + "type": "integer", + "format": "int32" + }, + "asDouble": { + "type": "number", + "format": "double" + }, + "asLong": { + "type": "integer", + "format": "int64" + }, + "asBoolean": { + "type": "boolean" + }, + "asBigInteger": { + "type": "integer" + }, + "asShort": { + "type": "integer", + "format": "int32" + }, + "boolean": { + "type": "boolean" + }, + "asFloat": { + "type": "number", + "format": "float" + }, + "string": { + "type": "boolean" + }, + "asByte": { + "type": "string", + "format": "byte" + }, + "asNumber": { + "type": "number" + }, + "asString": { + "type": "string" + }, + "asCharacter": { + "type": "string" + }, + "asBigDecimal": { + "type": "number" + }, + "jsonNull": { + "type": "boolean" + }, + "jsonArray": { + "type": "boolean" + }, + "asJsonArray": { + "$ref": "#/components/schemas/JsonArray" + }, + "asJsonObject": { + "$ref": "#/components/schemas/JsonObject" + }, + "asJsonPrimitive": { + "$ref": "#/components/schemas/JsonPrimitive" + }, + "jsonPrimitive": { + "type": "boolean" + }, + "jsonObject": { + "type": "boolean" + }, + "asJsonNull": { + "$ref": "#/components/schemas/JsonNull" + } + } + }, + "SchemaConfig": { + "type": "object", + "properties": { + "versionId": { + "type": "string" + }, + "epoch": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "documentation": { + "type": "string" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "ancestor": { + "type": "string" + }, + "format": { + "type": "string" + }, + "schemaUrl": { + "type": "string" + }, + "schema": { + "$ref": "#/components/schemas/JsonObject" + }, + "schemaBase64": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "modifiedAt": { + "type": "string", + "format": "date-time" + }, + "notBefore": { + "type": "string", + "format": "date-time" + }, + "expiresAfter": { + "type": "string", + "format": "date-time" + }, + "version": { + "type": "string" + }, + "source": { + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "title": { + "type": "string" + }, + "comments": { + "type": "string" + }, + "uniqueId": { + "type": "string" + }, + "matchExpression": { + "type": "string" + }, + "resourceType": { + "type": "string" + }, + "interfaceDescription": { + "type": "string" + } + } + }, + "StringListResponse": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "SchemaMapResponse": { + "type": "object", + "properties": { + "data": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "CacheInfo": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "lifeTime": { + "type": "integer", + "format": "int64" + }, + "scanTime": { + "type": "integer", + "format": "int64" + }, + "cacheSize": { + "type": "integer", + "format": "int64" + }, + "cacheHits": { + "type": "integer", + "format": "int64" + }, + "cacheMisses": { + "type": "integer", + "format": "int64" + } + } + }, + "MessageDaemonConfigDTO": { + "type": "object", + "properties": { + "delayedPublishInterval": { + "type": "integer", + "description": "Interval for delayed publish in milliseconds", + "format": "int32", + "example": 1000 + }, + "sessionPipeLines": { + "type": "integer", + "description": "Number of session pipelines", + "format": "int32", + "example": 48 + }, + "transactionExpiry": { + "type": "integer", + "description": "Transaction expiry in milliseconds", + "format": "int64", + "example": 3600000 + }, + "transactionScan": { + "type": "integer", + "description": "Transaction scan interval in milliseconds", + "format": "int64", + "example": 5000 + }, + "compressionName": { + "type": "string", + "description": "Compression algorithm name", + "example": "None", + "enum": [ + "inflator", + "none" + ] + }, + "compressMessageMinSize": { + "type": "integer", + "description": "Minimum size for message compression", + "format": "int32", + "example": 1024 + }, + "incrementPriorityMethod": { + "type": "string", + "description": "On rollback of events if we maintain the priority or bump the priority of the event", + "example": "maintain", + "enum": [ + "maintain", + "increment" + ] + }, + "enableResourceStatistics": { + "type": "boolean", + "description": "Enable resource statistics", + "example": false + }, + "enableSystemTopics": { + "type": "boolean", + "description": "Enable system topics", + "example": true + }, + "enableSystemStatusTopics": { + "type": "boolean", + "description": "Enable system status topics", + "example": true + }, + "enableSystemTopicAverages": { + "type": "boolean", + "description": "Enable system topic averages", + "example": false + }, + "enableJMX": { + "type": "boolean", + "description": "Enable JMX monitoring", + "example": false + }, + "enableJMXStatistics": { + "type": "boolean", + "description": "Enable JMX statistics", + "example": false + }, + "tagMetaData": { + "type": "boolean", + "description": "Tag metadata for messages", + "example": false + }, + "latitude": { + "type": "number", + "description": "Latitude for the daemon location", + "format": "double", + "example": 0.0 + }, + "longitude": { + "type": "number", + "description": "Longitude for the daemon location", + "format": "double", + "example": 0.0 + }, + "sendAnonymousStatusUpdates": { + "type": "boolean", + "description": "Send anonymous server usage statistics to Maps Messaging", + "example": false + } + }, + "description": "Message Daemon Configuration DTO" + }, + "ServerInfoDTO": { + "title": "Status Message", + "type": "object", + "properties": { + "serverName": { + "type": "string", + "description": "Server name", + "example": "maps-server" + }, + "version": { + "type": "string", + "description": "Build version of the server", + "example": "3.3.7" + }, + "buildDate": { + "type": "string", + "description": "Build date of the server", + "example": "2024-10-13" + }, + "totalMemory": { + "type": "integer", + "description": "Total memory in bytes", + "format": "int64", + "example": 536870912 + }, + "maxMemory": { + "type": "integer", + "description": "Maximum memory in bytes", + "format": "int64", + "example": 1073741824 + }, + "freeMemory": { + "type": "integer", + "description": "Free memory in bytes", + "format": "int64", + "example": 268435456 + }, + "numberOfThreads": { + "type": "integer", + "description": "Number of active threads", + "format": "int32", + "example": 120 + }, + "timeToCreateNano": { + "type": "integer", + "description": "Time taken to create the status message, in nanoseconds", + "format": "int64", + "example": 1000000 + }, + "uptime": { + "type": "integer", + "description": "Server uptime in milliseconds", + "format": "int64", + "example": 123456789 + }, + "connections": { + "type": "integer", + "description": "Total connections count", + "format": "int64", + "example": 150 + }, + "destinations": { + "type": "integer", + "description": "Total destinations count", + "format": "int64", + "example": 30 + }, + "cpuTime": { + "type": "integer", + "description": "CPU time in nanoseconds", + "format": "int64", + "example": 1234567890 + }, + "cpuPercent": { + "type": "number", + "description": "CPU usage percentage", + "format": "float", + "example": 12.5 + }, + "storageSize": { + "type": "integer", + "description": "Storage size in bytes", + "format": "int64", + "example": 104857600 + }, + "threadState": { + "type": "object", + "additionalProperties": { + "type": "integer", + "description": "Map of thread states and their counts", + "format": "int32" + }, + "description": "Map of thread states and their counts", + "example": { + "RUNNABLE": 50, + "WAITING": 10 + } + } + }, + "description": "Provides detailed status information about the server, including memory usage, CPU statistics, and thread states." + }, + "ServerStatisticsDTO": { + "title": "Server Statistics", + "type": "object", + "properties": { + "packetsSent": { + "type": "integer", + "description": "Total packets sent", + "format": "int64", + "example": 1024 + }, + "packetsReceived": { + "type": "integer", + "description": "Total packets received", + "format": "int64", + "example": 2048 + }, + "totalReadBytes": { + "type": "integer", + "description": "Total read bytes", + "format": "int64", + "example": 5242880 + }, + "totalWriteBytes": { + "type": "integer", + "description": "Total write bytes", + "format": "int64", + "example": 4194304 + }, + "totalConnections": { + "type": "integer", + "description": "Total connections", + "format": "int64", + "example": 150 + }, + "totalDisconnections": { + "type": "integer", + "description": "Total disconnections", + "format": "int64", + "example": 145 + }, + "totalNoInterestMessages": { + "type": "integer", + "description": "Total messages with no interest", + "format": "int64", + "example": 10 + }, + "totalSubscribedMessages": { + "type": "integer", + "description": "Total subscribed messages", + "format": "int64", + "example": 5000 + }, + "totalPublishedMessages": { + "type": "integer", + "description": "Total published messages", + "format": "int64", + "example": 6000 + }, + "totalRetrievedMessages": { + "type": "integer", + "description": "Total retrieved messages", + "format": "int64", + "example": 2500 + }, + "totalExpiredMessages": { + "type": "integer", + "description": "Total expired messages", + "format": "int64", + "example": 20 + }, + "totalDeliveredMessages": { + "type": "integer", + "description": "Total delivered messages", + "format": "int64", + "example": 4000 + }, + "publishedPerSecond": { + "type": "number", + "description": "Published messages per second", + "format": "float", + "example": 50 + }, + "subscribedPerSecond": { + "type": "number", + "description": "Subscribed messages per second", + "format": "float", + "example": 45 + }, + "noInterestPerSecond": { + "type": "number", + "description": "No interest messages per second", + "format": "float", + "example": 5 + }, + "deliveredPerSecond": { + "type": "number", + "description": "Delivered messages per second", + "format": "float", + "example": 60 + }, + "retrievedPerSecond": { + "type": "number", + "description": "Retrieved messages per second", + "format": "float", + "example": 30 + }, + "stats": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/LinkedMovingAverageRecordDTO" + }, + "description": "Statistics map", + "example": "{\"latency\": {\"name\": \"latency\", \"unitName\": \"ms\", \"current\": 10, ...}}" + } + }, + "description": "Contains various metrics and statistics for server performance, including message rates, connection counts, and data throughput." + }, + "ServerHealthStateResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "issueCount": { + "type": "integer", + "format": "int32" + } + } + }, + "SubSystemStatusDTO": { + "title": "SubSystem Status", + "required": [ + "name", + "status" + ], + "type": "object", + "properties": { + "name": { + "title": "Name", + "type": "string", + "description": "The name of the subsystem.", + "example": "Messaging Service" + }, + "comment": { + "title": "Comment", + "type": "string", + "description": "A comment or additional information about the subsystem's status.", + "example": "System is operating normally." + }, + "status": { + "title": "Status Enum", + "type": "string", + "description": "Enumeration of possible statuses for a subsystem.", + "example": "OK", + "enum": [ + "OK", + "STOPPED", + "PAUSED", + "DISABLED", + "WARN", + "ERROR" + ] + } + }, + "description": "Represents the status of a subsystem in the messaging server." + }, + "ServerAction": { + "type": "object", + "properties": { + "state": { + "type": "string" + } + } + } + }, + "securitySchemes": { + "basicAuth": { + "type": "http", + "scheme": "basic" + }, + "authScheme": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + } + } +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..ad54f1f --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,47 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { queryClient } from "@/api/query-client"; +import { routeTree } from "@/routeTree.gen"; +import { QueryClientProvider } from "@tanstack/react-query"; +import { createRouter, RouterProvider } from "@tanstack/react-router"; +import "./styles.css"; +import "./theme/tokens.css"; + +const router = createRouter({ + routeTree, + basepath: "/admin", + context: {}, + defaultPreload: "intent", + scrollRestoration: true, + defaultStructuralSharing: true, + defaultPreloadStaleTime: 0, +}); + +declare module "@tanstack/react-router" { + interface Register { + router: typeof router; + } +} + +export const App = () => { + return ( + + + + ); +}; diff --git a/src/api/api-client.ts b/src/api/api-client.ts new file mode 100644 index 0000000..94850a2 --- /dev/null +++ b/src/api/api-client.ts @@ -0,0 +1,24 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import createFetchClient from "openapi-fetch"; +import createClient from "openapi-react-query"; +import type { paths } from "./spec"; + +export const fetchClient = createFetchClient(); + +export const apiClient = createClient(fetchClient); diff --git a/src/api/query-client.ts b/src/api/query-client.ts new file mode 100644 index 0000000..b7a596c --- /dev/null +++ b/src/api/query-client.ts @@ -0,0 +1,33 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { QueryClient } from "@tanstack/react-query"; + +export const queryClient = new QueryClient({ + defaultOptions: { + queries: { + // Avoid unnecessary server load + staleTime: 30_000, // 30s + gcTime: 5 * 60_000, // 5 min + refetchOnWindowFocus: false, + retry: 1, + }, + mutations: { + retry: 0, + }, + }, +}); diff --git a/src/api/spec.d.ts b/src/api/spec.d.ts new file mode 100644 index 0000000..3d643df --- /dev/null +++ b/src/api/spec.d.ts @@ -0,0 +1,10330 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + "/api/v1/session": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Returns the current authentication session + * @description Returns information about the current user authentication session, can be used to see if the user is logged in + */ + get: operations["getUserSession"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/login": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * User login + * @description Allows a user to log in and obtain an authentication token. This endpoint does not require authentication and overrides global security settings. + */ + post: operations["login"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/logout": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * User logout + * @description Logs out the currently authenticated user by invalidating their session. + */ + post: operations["logout"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/refreshToken": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Refreshes the users JWT + * @description Refreshes the current JWT cookie used for auth. + */ + get: operations["refreshToken"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/health": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Check server health + * @description Checks the health of all subsystems and returns their overall status. Possible values are 'Ok', 'Warning', or 'Error'. + */ + get: operations["getHealth"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/updates": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Check for configuration updates + * @description Provides information about any changes in the server's configuration update counts. + */ + get: operations["checkForUpdates"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/name": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve the server's unique name + * @description Returns the unique identifier of the server instance. + */ + get: operations["getName"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/ping": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Ping the server + * @description A simple endpoint to verify that the server is operational and responsive. + */ + get: operations["getPing"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/config": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get the auth configuration + * @description Retrieves the configuration used to setup the authentication and authorisation. Requires authentication if enabled in the configuration. + */ + get: operations["getAuthConfiguration"]; + put?: never; + /** + * Update the auth configuration + * @description Updates the configuration used to setup the authentication and authorisation. Requires authentication if enabled in the configuration. + */ + post: operations["updateAuthConfiguration"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/acl/check": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Check access for an identity to a resource + * @description Checks whether the identity has the specified permission on the given resource + */ + post: operations["checkAccess"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/permissions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get the authorisation permission list + * @description Retrieves the read only permissions used by the servers Authorisation + */ + get: operations["getAuthorisationStaticInfo"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/groups/{groupUuid}/acl": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get explicit ACL entries for a group + * @description Retrieves explicit ACL entries for the specified group, grouped by resource + */ + get: operations["getGroupAcl"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/identities/{userUuid}/acl": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get explicit ACL entries for an identity + * @description Retrieves explicit ACL entries for the specified identity, grouped by resource + */ + get: operations["getIdentityAcl"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/resources/acl": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get the ACL for a specific resource + * @description Retrieves explicit ACL entries for the given resource + */ + get: operations["getResourceAcl"]; + /** + * Replace the ACL for a specific resource + * @description Replaces the explicit ACL entries for the given resource with the provided set + */ + put: operations["updateResourceAcl"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/groups": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get all groups + * @description Retrieves all currently known groups. Requires authentication if enabled in the configuration. + */ + get: operations["getAllGroups"]; + put?: never; + /** + * Add new group + * @description Adds a new group to the group list. Requires authentication if enabled in the configuration. + */ + post: operations["addGroup"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/groups/{groupUuid}/{userUuid}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add user to group + * @description Adds a user to a group using the UUID of the user and UUID of the group . Requires authentication if enabled in the configuration. + */ + post: operations["addUserToGroup"]; + /** + * Removes a user from group + * @description Removes a user from a group using the users UUID and the groups UUID . Requires authentication if enabled in the configuration. + */ + delete: operations["removeUserFromGroup"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/groups/{groupUuid}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get group by UUID + * @description Retrieve the group using the UUID of the specific group. Requires authentication if enabled in the configuration. + */ + get: operations["getGroupById"]; + put?: never; + post?: never; + /** + * Delete a group + * @description Deletes a group from the list and removes all user memberships. Requires authentication if enabled in the configuration. + */ + delete: operations["deleteGroup"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/user-lockouts": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get all currently locked users + * @description Retrieves all currently known users that are locked out due to failed log in attempts. + */ + get: operations["getAllLockedUsers"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/user-lockouts/{userUuid}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Unlocks a user that is currently locked due to invalid login attempts + * @description When a user exceeds the failed login attempts they are locked out for a period of time + */ + delete: operations["unlockUser"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/users": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get all users + * @description Retrieves all currently known users filtered by the optional filter string, SQL like syntax. Requires authentication if enabled in the configuration. + */ + get: operations["getAllUsers"]; + put?: never; + /** + * Add a new user + * @description Adds a new user to the system. Requires authentication if enabled in the configuration. + */ + post: operations["addUser"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/users/{userUuid}/password": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Change user password + * @description Change the password for a user. Admin may reset any user. A user may change their own password; currentPassword may be required depending on policy. + */ + put: operations["changeUserPassword"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/auth/users/{userUuid}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get user by username + * @description Retrieve the user by username. Requires authentication if enabled in the configuration. + */ + get: operations["getUser"]; + put?: never; + post?: never; + /** + * Delete a user + * @description Deletes a user from the system. Requires authentication if enabled in the configuration. + */ + delete: operations["deleteUser"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/connections/{connectionId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get connection details for the specified id + * @description Retrieve the details of the specified connection id. Requires authentication if enabled in the configuration. + */ + get: operations["getConnectionDetails"]; + put?: never; + post?: never; + /** + * Close a connection + * @description Requests the connection specified be closed. Requires authentication if enabled in the configuration. + */ + delete: operations["closeSpecificConnection"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/connections": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get all connections + * @description Retrieve a list of all current connections to the server, can be filtered with the optional filter string. Requires authentication if enabled in the configuration. + */ + get: operations["getAllConnections"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/destination": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve a list of all destinations with optional filtering and sorting + * @description Fetch a paginated list of all known destinations. You can filter the list using a selector string, limit the number of returned entries using the 'size' parameter, and sort the results by attributes such as Name, Published Messages, or Stored Messages. Cached results are returned if available to enhance performance. Authentication is required if the server configuration mandates it. + */ + get: operations["getAllDestinations"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/destination/detail": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve detailed information about a destination + * @description Fetch detailed information for a specific destination identified by its name. Authentication is required if the server configuration mandates it. Cached results are returned if available to enhance performance. + */ + get: operations["getDestinationDetails"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/discovery/config": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get the discovery agents configuration + * @description Retrieves the configuration used to the discovery agent. Requires authentication if enabled in the configuration. + */ + get: operations["getDiscoveryAgentConfiguration"]; + put?: never; + /** + * Update the discovery agents configuration + * @description Updates the configuration used to control the discovery agent. Requires authentication if enabled in the configuration. + */ + post: operations["updateDiscoveryAgentConfiguration"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/discovery": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get discovered servers + * @description Retrieve a list of all currently discovered servers, can be filtered with the optional filter. Requires authentication if enabled in the configuration. + */ + get: operations["getAllDiscoveredServers"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Manages the discovery manager + * @description Manages the state of the discovery manager + */ + patch: operations["handleDiscoveryActionRequest"]; + trace?: never; + }; + "/api/v1/server/hardware/config": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get hardware configuration + * @description Retrieve the configuration for the hardware sub-system. Requires authentication if enabled in the configuration. + */ + get: operations["getDeviceConfig"]; + put?: never; + /** + * Update hardware configuration + * @description Update the configuration for the hardware sub-system. Requires authentication if enabled in the configuration. + */ + post: operations["updateDeviceConfig"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/hardware": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get known devices + * @description Retreive a list of all detected devices currently online. Requires authentication if enabled in the configuration. + */ + get: operations["getAllDiscoveredDevices"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/hardware/scan": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Scan for new hardware + * @description Requests a scan to detect new hardware on I2C bus or configured devices. Requires authentication if enabled in the configuration. + */ + post: operations["scanForDevices"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/integration/{name}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get integration by name + * @description Retrieves the configuration on the inter-server integration connection. Requires authentication if enabled in the configuration. + */ + get: operations["getByNameIntegration"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Manages inter-server connection + * @description Handles state for the inter-server connection + */ + patch: operations["handleIntegrationActionRequest"]; + trace?: never; + }; + "/api/v1/server/integration/{name}/connection": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get integration status by name + * @description Retrieves the current status on the inter-server integration connection. Requires authentication if enabled in the configuration. + */ + get: operations["getIntegrationConnection"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/integration/{name}/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get inter-server status + * @description Retrieve the current status for the inter-server specified by name. Requires authentication if enabled in the configuration. + */ + get: operations["getIntegrationStatus"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/integrations/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get all inter-server status + * @description Retrieve all current statuses for the inter-server. Requires authentication if enabled in the configuration. + */ + get: operations["getAllIntegrationStatus"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/integrations": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get all inter-server connections + * @description Retrieves a list of all inter-server configurations. Requires authentication if enabled in the configuration. + */ + get: operations["getAllIntegrations"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Manages all inter-server connections + * @description Handles state for all inter-server connections + */ + patch: operations["handleIntegrationActionRequest_1"]; + trace?: never; + }; + "/api/v1/server/interfaces/{endpoint}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get end point configurations + * @description Get the end point configuration specifed by the name. Requires authentication if enabled in the configuration. + */ + get: operations["getEndPoint"]; + /** + * Update end point configuration + * @description Update the configuration supplied for the named endpoint. + */ + put: operations["updateInterfaceConfiguration"]; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Controls the specific end point + * @description Applies the requested state to all configured interface endpoints. + */ + patch: operations["manageSpecificInterface"]; + trace?: never; + }; + "/api/v1/server/interfaces/{endpoint}/connections": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get end point connections + * @description Get current connections on this endpoint. Requires authentication if enabled in the configuration. + */ + get: operations["getEndPointConnections"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/interfaces/{endpoint}/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get end point status + * @description Get the current status and metrics for the specified end point. + */ + get: operations["getInterfaceStatus"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/interfaces/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get all end point status + * @description Get all end point statuses and metrics, fitlered with the optional filter. + */ + get: operations["getAllInterfaceStatus"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/interfaces": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get all end point details + * @description get all end point configuration details, filtered with the optional filter. + */ + get: operations["getAllInterfaces"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Manages all end points + * @description Manages actions on all endpoints. + */ + patch: operations["handleInterfaceActionRequest"]; + trace?: never; + }; + "/api/v1/server/log": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get last stored log entries + * @description Retrieve the last configured number of log entries from the server + */ + get: operations["getLogEntries"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/log/sse": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Request a temporary token to access the server side logs + * @description Retrieve a temporary token that allows access to the server side log stream + */ + get: operations["requestSseToken"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/log/sse/stream/{token}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Stream live log entries + * @description Subscribe to dynamic log events using Server-Sent Events + */ + get: operations["streamLogs"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/device/lora": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve all LoRa devices + * @description Fetches a list of all LoRa devices along with their configurations and statistics. + */ + get: operations["getAllLoRaDevices"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/device/lora/{deviceName}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve a specific LoRa device + * @description Fetches the details of a specific LoRa device identified by its name. + */ + get: operations["getLoRaDevice"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/device/lora/{deviceName}/{nodeId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve endpoint connections for a LoRa device + * @description Fetches the connection information for a specific endpoint of a LoRa device, identified by the device name and node ID. + */ + get: operations["getLoRaEndPointConnections"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/device/lora/config": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve all LoRa device configurations + * @description Fetches a list of all configured LoRa devices and their settings. + */ + get: operations["getAllLoRaDeviceConfigs"]; + put?: never; + /** + * Add a new LoRa device configuration + * @description Creates a new LoRa device configuration and adds it to the system. + */ + post: operations["addLoRaDeviceConfig"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/device/lora/{deviceName}/config": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve a specific LoRa device configuration + * @description Fetches the configuration for a specific LoRa device identified by its name. + */ + get: operations["getLoRaDeviceConfig"]; + put?: never; + post?: never; + /** + * Delete a specific LoRa device configuration + * @description Removes a LoRa device configuration identified by its unique ID. + */ + delete: operations["deleteLoRaDeviceConfig"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/messaging/abort": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Abort the message + * @description Abort the message specifed by the id and the destination name + */ + post: operations["abortMessages"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/messaging/commit": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Commit the message + * @description Commit the message specifed by the id and the destination name + */ + post: operations["commitMessages"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/messaging/consume": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Get messages + * @description Retrieves messages for a specified subscription + */ + post: operations["consumeMessages"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/messaging/subscriptionDepth": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Get message depth + * @description Get the depth of the queue for a specified subscription + */ + post: operations["getSubscriptionDepth"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/messaging/publish": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Publish a message + * @description Publishes a message to a specified topic + */ + post: operations["publishMessage"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/messaging/sse": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Request a temporary token to access the listed destinations events + * @description Retrieve a temporary token that allows access to the destinations event stream + */ + get: operations["requestSseMessageToken"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/messaging/sse/stream/{token}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Expose AsyncMessageDTO in OpenAPI + * @description Delivers messages via Server Side Events, supports MQTT wild card plus JMS style filtering + */ + get: operations["subscribeSSE"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/messaging/subscribe": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Subscribe to a topic + * @description Subscribes to a specified topic + */ + post: operations["subscribeToTopic"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/messaging/unsubscribe": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Unsubscribe from a topic + * @description Unsubscribes from a specified topic + */ + post: operations["unsubscribeToTopic"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/models/{modelName}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Download model + * @description Downloads a model by name. + */ + get: operations["getModel"]; + put?: never; + /** + * ML Model upload + * @description uploads a model + */ + post: operations["uploadModel"]; + /** + * Delete model + * @description Deletes the model by name. + */ + delete: operations["deleteModel"]; + options?: never; + /** + * Check if model exists + * @description Checks if a model with the given name exists. + */ + head: operations["modelExists"]; + patch?: never; + trace?: never; + }; + "/api/v1/server/models": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List all models + * @description Returns a list of all available model names. + */ + get: operations["listModels"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/schemas": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get all schemas + * @description Retrieves all schema configurations, optionally filtered by a query string. + */ + get: operations["getAllSchemas"]; + put?: never; + /** + * Add new schema + * @description Adds a new schema configuration to the system. + */ + post: operations["addSchema"]; + /** + * Delete all schemas + * @description Deletes all schemas, optionally filtered by a query string. + */ + delete: operations["deleteAllSchemas"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/schemas/{schemaId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get specific schema + * @description Retrieves the details of a specific schema by its unique ID. + */ + get: operations["getSchemaById"]; + put?: never; + post?: never; + /** + * Delete specific schema + * @description Deletes a schema configuration by its unique ID. + */ + delete: operations["deleteSchemaById"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/schemas/formats": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get supported formats + * @description Retrieves a list of all known schema formats supported by the system. + */ + get: operations["getKnownFormats"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/schemas/link-format": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get link-format configuration + * @description Retrieves the link-format configuration list. + */ + get: operations["getLinkFormat"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/schemas/context/{context}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get schemas by context + * @description Retrieves all schemas that match the specified context. + */ + get: operations["getSchemaByContext"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/schemas/type/{type}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get schemas by type + * @description Retrieves all schemas that match the specified type. + */ + get: operations["getSchemaByType"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/schemas/impl/{schemaId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get specific schema definition + * @description Retrieves the schema artifact bytes by unique ID. + */ + get: operations["getSchemaImplById"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/schemas/map": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get schema mappings + * @description Retrieves all schemas and their associated mapping information. + */ + get: operations["getSchemaMapping"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/cache": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve cache information + * @description Fetches detailed information about the server's central cache, including size, usage statistics, and entries. + */ + get: operations["getCacheInformation"]; + put?: never; + post?: never; + /** + * Clear cache + * @description Clears all entries in the server's central cache to free up memory and ensure data consistency. + */ + delete: operations["clearCacheInformation"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/config": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve server configuration + * @description Fetches the current server configuration settings as a JSON object. Uses caching for improved performance. + */ + get: operations["getServerConfig"]; + /** + * Update server configuration + * @description Updates the server configuration with the provided settings. Saves changes to disk and clears relevant cache entries to ensure consistency. + */ + put: operations["updateServerConfig"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/details/info": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get server build information + * @description Retrieves detailed information about the server build, such as version and configuration details. Uses caching for improved performance. + */ + get: operations["getBuildInfo"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/details/stats": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get server statistics + * @description Retrieves server usage statistics, including metrics such as CPU usage, memory usage, and active connections. Uses caching for improved performance. + */ + get: operations["getStats"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/health": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get server subsystem status summary + * @description Returns a simple summary of the server status. + */ + get: operations["getServerHealthSummary"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get server subsystem status + * @description Retrieves the current status of all server subsystems, including their operational state (e.g., OK, Warning, or Error). Uses caching for improved performance. + */ + get: operations["getServerStatus"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/server": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Restart or shutdown the server + * @description Restarts or shuts down the server gracefully, preserving any necessary state before the restart operation begins. + */ + patch: operations["serverAction"]; + trace?: never; + }; + "/application.wadl/{path}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["getExternalGrammar"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/application.wadl": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["getWadl"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + UpdateCheckResponse: { + /** Format: int64 */ + schemaUpdate?: number; + /** Format: int64 */ + destinationUpdate?: number; + /** Format: int64 */ + interfaceUpdate?: number; + }; + LoginResponse: { + status?: string; + username?: string; + accessMap?: { + [key: string]: string; + }; + /** Format: uuid */ + uniqueId?: string; + }; + /** @description Login request payload containing credentials and session options */ + LoginRequest: { + /** + * @description The username for login + * @example admin + */ + username?: string; + /** + * @description The password for login + * @example P@ssw0rd! + */ + password?: string; + /** + * @description Whether the session should be persistent + * @example true + */ + persistent?: boolean; + /** + * @description Optional client-provided session ID + * @example session-12345 + */ + sessionId?: string; + /** + * @description Request a long-lived session (e.g. 7 days) + * @example true + */ + longLived?: boolean; + }; + StatusResponse: { + status?: string; + }; + /** @description Auth Manager Configuration DTO */ + AuthManagerConfigDTO: { + /** + * @description Indicates if authentication is enabled + * @example true + */ + authenticationEnabled?: boolean; + /** + * @description Indicates if authorization is enabled + * @example true + */ + authorisationEnabled?: boolean; + /** @description Configuration properties for authentication */ + authConfig?: Record; + /** + * Format: int32 + * @description Minimum password length. + * @example 12 + */ + minimumPasswordLength?: number; + /** + * Format: int32 + * @description Maximum password length. + * @example 128 + */ + maximumPasswordLength?: number; + /** + * Format: int32 + * @description Minimum number of lowercase letters required. + * @example 1 + */ + minimumLowercase?: number; + /** + * Format: int32 + * @description Minimum number of uppercase letters required. + * @example 1 + */ + minimumUppercase?: number; + /** + * Format: int32 + * @description Minimum number of digits required. + * @example 1 + */ + minimumDigits?: number; + /** + * Format: int32 + * @description Minimum number of special characters required. + * @example 1 + */ + minimumSpecial?: number; + /** + * @description Allowed special characters set. If empty/null, any non-alphanumeric character may be treated as special (implementation-defined). + * @example !@#$%^&*()-_=+[]{};:,.?/\| + */ + allowedSpecialCharacters?: string; + /** + * @description If true, whitespace characters are rejected in passwords. + * @example true + */ + rejectWhitespace?: boolean; + /** + * @description If true, passwords containing the username (case-insensitive) are rejected. + * @example true + */ + rejectContainsUsername?: boolean; + /** + * Format: int32 + * @description Maximum number of identical consecutive characters allowed (e.g., 'aaa'). Use 0 to disable. + * @example 3 + */ + maximumConsecutiveIdenticalCharacters?: number; + /** + * @description If set, overrides composition rules. Java regex pattern the password must match. Leave null to use the composition settings. + * @example ^(?=.{12,128}$)(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()\-_=+\[\]{};:,.?/\\|]).*$ + */ + passwordRegex?: string; + /** + * Format: int32 + * @description Number of previous passwords that cannot be reused. Use 0 to disable. + * @example 5 + */ + passwordHistoryCount?: number; + /** + * Format: int32 + * @description Maximum password age in days before forcing a reset. Use 0 to disable. + * @example 90 + */ + passwordMaxAgeDays?: number; + /** + * Format: int32 + * @description Number of consecutive authentication failures required before an account is locked. + * @example 5 + */ + maxFailuresBeforeLock?: number; + /** + * Format: int32 + * @description Initial lock duration in seconds once the failure threshold is exceeded. Subsequent locks may increase up to the configured maximum. + * @example 30 + */ + initialLockSeconds?: number; + /** + * Format: int32 + * @description Maximum lock duration in seconds. Lock times will not grow beyond this value regardless of repeated failures. + * @example 900 + */ + maxLockSeconds?: number; + /** + * Format: int32 + * @description Time in seconds after which recorded authentication failures decay if no new failures occur. This allows accounts to recover naturally over time. + * @example 900 + */ + failureDecaySeconds?: number; + /** + * @description Enable progressive response delays before lockout is triggered. When enabled, each failed attempt adds a short delay before authentication is processed. + * @example true + */ + enableSoftDelay?: boolean; + /** + * Format: int32 + * @description Additional delay in milliseconds applied per authentication failure when soft delay is enabled. + * @example 200 + */ + softDelayMillisPerFailure?: number; + /** + * Format: int32 + * @description Maximum cumulative soft delay in milliseconds that can be applied before authentication processing. Prevents unbounded delays. + * @example 2000 + */ + maxSoftDelayMillis?: number; + }; + /** @description Result of an ACL check */ + AclCheckResponseDTO: { + /** + * @description Decision for the requested permission + * @example ALLOW + * @enum {string} + */ + decision?: "ALLOW" | "DENY"; + /** + * @description Permission name that was checked + * @example publish + */ + permission?: string; + /** @description Human readable explanation of how this decision was reached */ + reason?: string; + /** @description Optional list of rule summaries that contributed to the decision */ + sources?: string[]; + }; + /** @description Request to check access for an identity to a resource with a permission */ + AclCheckRequestDTO: { + /** + * @description Identity identifier + * @example admin + */ + identityId: string; + /** + * @description Resource type + * @example TOPIC + */ + resourceType: string; + /** + * @description Resource key or identifier + * @example /sensors/room1/temp + */ + resourceKey: string; + /** + * @description Permission name to check + * @example publish + */ + permission: string; + /** @description If true, the server should include human readable explanation */ + explain?: boolean; + }; + /** + * Authorisation Static Configuration DTO + * @description Contains the static configuration used by authorisation. + */ + AuthorisationConfigDTO: { + /** + * @description List of known permissions that can granted to identities and groups + * @example CONNECT, PUBLISH + */ + permissions?: components["schemas"]["PermissionDetailsDTO"][]; + /** + * @description Set of known and enforced resource types + * @example server, topic, queue + */ + resourceTypes?: components["schemas"]["ResourceTypeDetailsDTO"][]; + }; + /** + * Permission details + * @description Contains details about the permission. + * @example CONNECT, PUBLISH + */ + PermissionDetailsDTO: { + name?: string; + description?: string; + server?: boolean; + }; + /** + * Resource Type details + * @description Contains details about the resource types. + * @example server, topic, queue + */ + ResourceTypeDetailsDTO: { + name?: string; + server?: boolean; + }; + /** @description Explicit ACL entry for an identity or group, grouped by resource */ + IdentityAclEntryDTO: { + /** + * @description Resource type + * @example TOPIC + */ + resourceType: string; + /** + * @description Resource key or identifier + * @example /sensors/room1/temp + */ + resourceKey: string; + /** + * @description Effect of this ACL entry + * @example ALLOW + * @enum {string} + */ + effect: "ALLOW" | "DENY"; + /** @description List of permission names granted or denied */ + permissions: string[]; + }; + /** @description View of explicit ACL entries for an identity or group */ + IdentityAclViewDTO: { + /** + * @description Principal type + * @example IDENTITY + * @enum {string} + */ + principalType?: "IDENTITY" | "GROUP"; + /** + * @description Principal identifier + * @example admin + */ + principalId?: string; + /** @description Explicit ACL entries grouped by resource */ + entries?: components["schemas"]["IdentityAclEntryDTO"][]; + }; + /** @description Represents a single ACL entry for a principal on a resource */ + AclEntryDTO: { + /** + * @description Type of principal + * @example IDENTITY + * @enum {string} + */ + principalType: "IDENTITY" | "GROUP"; + /** + * @description Principal identifier (user id or group id) + * @example admin + */ + principalId: string; + /** + * @description Effect of this ACL entry + * @example ALLOW + * @enum {string} + */ + effect: "ALLOW" | "DENY"; + /** @description List of permission names granted or denied by this entry */ + permissions?: string[]; + }; + /** @description Represents the ACL for a specific resource */ + AclResourceViewDTO: { + /** + * @description Resource type + * @example TOPIC + */ + resourceType: string; + /** + * @description Resource key or identifier + * @example /sensors/room1/temp + */ + resourceKey: string; + /** @description Explicit ACL entries defined directly on this resource */ + entries: components["schemas"]["AclEntryDTO"][]; + }; + /** @description Request to replace the ACL for a specific resource */ + AclResourceUpdateRequestDTO: { + /** + * @description Resource type + * @example TOPIC + */ + resourceType: string; + /** + * @description Resource key or identifier + * @example /sensors/room1/temp + */ + resourceKey: string; + /** @description New set of ACL entries for this resource (explicit only) */ + entries: components["schemas"]["AclEntryDTO"][]; + }; + /** + * Group + * @description Represents a group of users within the system, identified by a unique name and ID. + */ + GroupDTO: { + /** + * Group Name + * @description The name of the group, such as an administrative or user-defined role. + * @example admin + */ + name: string; + /** + * Group Unique ID + * Format: uuid + * @description The unique identifier for the group, generated as a UUID. + * @example e808afcb-1ff9-46cd-a322-3119dbf1d071 + */ + uniqueId: string; + /** + * Group Members + * @description A list of users of this group. + */ + usersList?: components["schemas"]["UserDTO"][] | null; + }; + /** + * GroupInfo + * @description Group information only, no user lists + * @example [ + * "admin", + * "everyone" + * ] + */ + GroupInfoDTO: { + /** + * Group Name + * @description The name of the group, such as an administrative or user-defined role. + * @example admin + */ + name: string; + /** + * Group Unique ID + * Format: uuid + * @description The unique identifier for the group, generated as a UUID. + * @example e808afcb-1ff9-46cd-a322-3119dbf1d071 + */ + uniqueId: string; + } | null; + /** + * User + * @description Represents a user within the system, including username, unique ID, group memberships, and user-specific attributes. + */ + UserDTO: { + /** + * Username + * @description The unique name assigned to the user. + * @example myUserName + */ + username: string; + /** + * User Unique ID + * Format: uuid + * @description The UUID representing this specific user, ensuring unique identification across the system. + * @example 83db8741-57ca-4147-a973-49789d9150bb + */ + uniqueId: string; + /** + * User Group Memberships + * @description A list of group names to which the user belongs, providing role-based access and permissions. + * @example [ + * "admin", + * "everyone" + * ] + */ + groupList?: components["schemas"]["GroupInfoDTO"][] | null; + /** + * User Attributes + * @description A map of user-specific attributes, such as home directory or other key-value pairs for configuration. + * @example { + * "homeDir": "/home/user1", + * "shell": "/bin/bash" + * } + */ + attributes?: { + [key: string]: string | null; + } | null; + }; + LockStatus: { + /** Format: uuid */ + uuid?: string; + username?: string; + locked?: boolean; + /** Format: int64 */ + remainingLockSeconds?: number; + lockedUntilIso?: string; + }; + /** + * New User + * @description Represents a new user account with a username and password. + */ + NewUserDTO: { + /** + * Username + * @description The unique username for the new user account. + * @example myNewUserName + */ + username: string; + /** + * Password + * @description The password or passphrase for the new user, intended to provide secure access. + * @example My Very Unique Password + */ + password: string; + }; + ChangePasswordDTO: { + /** + * New Password + * @description The new password to set. + * @example NewStrongerPassword123! + */ + newPassword: string; + }; + /** + * End Point Information + * @description Provides overview information about the end point + */ + EndPointSummaryDTO: { + /** + * Format: int64 + * @description Unique identifier for the endpoint + */ + id?: number; + /** @description Adapter name or type associated with this endpoint */ + adapter?: string; + /** @description Name assigned to the endpoint */ + name?: string; + /** @description Username associated with the endpoint */ + user?: string; + /** @description Name of the protocol used by the endpoint */ + protocolName?: string; + /** @description Version of the protocol used by the endpoint */ + protocolVersion?: string; + /** @description Proxy address used to connect the endpoint, if any */ + proxyAddress?: string; + /** + * Format: int64 + * @description Connection start time in milliseconds since epoch + */ + connectedTimeMs?: number; + /** + * Format: int64 + * @description Timestamp of the last read operation in milliseconds since epoch + */ + lastRead?: number; + /** + * Format: int64 + * @description Timestamp of the last write operation in milliseconds since epoch + */ + lastWrite?: number; + /** + * Format: int64 + * @description Total bytes read by the endpoint + */ + totalBytesRead?: number; + /** + * Format: int64 + * @description Total bytes written by the endpoint + */ + totalBytesWritten?: number; + /** + * Format: int64 + * @description Total number of buffer overflows + */ + totalOverflow?: number; + /** + * Format: int64 + * @description Total number of buffer underflows + */ + totalUnderflow?: number; + /** + * Format: int64 + * @description Bytes read in the current interval + */ + bytesRead?: number; + /** + * Format: int64 + * @description Bytes written in the current interval + */ + bytesWritten?: number; + /** + * Format: int64 + * @description Buffer overflow count in the current interval + */ + overFlow?: number; + /** + * Format: int64 + * @description Buffer underflow count in the current interval + */ + underFlow?: number; + }; + AmqpProtocolInformation: Omit< + components["schemas"]["ProtocolInformationDTO"], + "type" + > & { + sessionInfoList?: components["schemas"]["SessionInformationDTO"][]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "amqp"; + }; + CoapProtocolInformation: Omit< + components["schemas"]["ProtocolInformationDTO"], + "type" + > & { + sessionInfo?: components["schemas"]["SessionInformationDTO"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "coap"; + }; + /** + * End Point Information + * @description Provides detailed information about the end point + */ + EndPointDetailsDTO: { + endPointSummary?: components["schemas"]["EndPointSummaryDTO"]; + protocolInformation?: components["schemas"]["ProtocolInformationDTO"]; + }; + ExtensionProtocolInformation: Omit< + components["schemas"]["ProtocolInformationDTO"], + "type" + > & { + sessionInfo?: components["schemas"]["SessionInformationDTO"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "extension"; + }; + LoraProtocolInformation: Omit< + components["schemas"]["ProtocolInformationDTO"], + "type" + > & { + sessionInfo?: components["schemas"]["SessionInformationDTO"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "lora"; + }; + MqttProtocolInformation: Omit< + components["schemas"]["ProtocolInformationDTO"], + "type" + > & { + sessionInfo?: components["schemas"]["SessionInformationDTO"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "mqtt"; + }; + MqttSnProtocolInformation: Omit< + components["schemas"]["ProtocolInformationDTO"], + "type" + > & { + sessionInfo?: components["schemas"]["SessionInformationDTO"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "mqtt-sn"; + }; + MqttV5ProtocolInformation: Omit< + components["schemas"]["ProtocolInformationDTO"], + "type" + > & { + sessionInfo?: components["schemas"]["SessionInformationDTO"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "mqttV5"; + }; + NmeaProtocolInformation: Omit< + components["schemas"]["ProtocolInformationDTO"], + "type" + > & { + sessionInfo?: components["schemas"]["SessionInformationDTO"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "NMEA-0183"; + }; + /** + * Protocol Information + * @description Provides detailed information about the protocol and session + */ + ProtocolInformationDTO: { + /** + * @description Type of the protocol + * @enum {string} + */ + type: + | "amqp" + | "coap" + | "lora" + | "mqtt" + | "mqtt-sn" + | "mqttV5" + | "NMEA-0183" + | "semtech" + | "stomp" + | "rest" + | "extension" + | "orbcomm" + | "satellite"; + /** + * @description Unique identifier of the session + * @example session-12345 + */ + sessionId?: string; + /** + * Format: int64 + * @description Timeout in milliseconds before the protocol session is considered inactive + * @example 30000 + */ + timeout?: number; + /** + * Format: int64 + * @description Keep-alive interval in milliseconds for protocol connections + * @example 15000 + */ + keepAlive?: number; + /** + * @description Name of the message transformation applied to this protocol + * @example default-transformation + */ + messageTransformationName?: string; + /** + * @description Mapping of selectors to protocol-specific expressions + * @example { + * "temperature": "> 20", + * "status": "active" + * } + */ + selectorMapping?: { + [key: string]: string; + }; + /** + * @description Mapping of destinations to transformation names + * @example { + * "alerts": "alert-transform", + * "telemetry": "telemetry-transform" + * } + */ + destinationTransformationMapping?: { + [key: string]: string; + }; + }; + /** @description Information about the remote satellite device */ + RemoteDeviceInfo: { + lastRegistrationUtc?: string; + lastUpdatedUtc?: string; + /** Format: int32 */ + wakeUpInterval?: number; + /** Format: int32 */ + operationModeCode?: number; + /** Format: int32 */ + networkCode?: number; + /** Format: int32 */ + isRegistered?: number; + uniqueId?: string; + }; + RestProtocolInformation: Omit< + components["schemas"]["ProtocolInformationDTO"], + "type" + > & { + sessionInfo?: components["schemas"]["SessionInformationDTO"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "rest"; + }; + SatelliteDeviceProtocolInformation: Omit< + components["schemas"]["ProtocolInformationDTO"], + "type" + > & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "satellite"; + }; + SatelliteProtocolInformation: Omit< + components["schemas"]["ProtocolInformationDTO"], + "type" + > & { + sessionInfo?: components["schemas"]["SessionInformationDTO"]; + remoteDeviceInfo?: components["schemas"]["RemoteDeviceInfo"]; + /** + * Format: int64 + * @description Total number of bytes transmitted through the satellite link + * @example 1048576 + */ + bytesTransmitted?: number; + /** + * Format: int64 + * @description Total number of bytes received through the satellite link + * @example 524288 + */ + bytesReceived?: number; + /** + * Format: int64 + * @description Total number of packets sent through the satellite link + * @example 250 + */ + packetsSent?: number; + /** + * Format: int64 + * @description Total number of packets received through the satellite link + * @example 245 + */ + packetsReceived?: number; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "orbcomm"; + }; + SemtechProtocolInformation: Omit< + components["schemas"]["ProtocolInformationDTO"], + "type" + > & { + sessionInfo?: components["schemas"]["SessionInformationDTO"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "semtech"; + }; + SessionContextDTO: { + id?: string; + uniqueId?: string; + hasWill?: boolean; + /** Format: int64 */ + expiry?: number; + authorized?: boolean; + /** Format: int32 */ + receiveMaximum?: number; + resetState?: boolean; + persistentSession?: boolean; + restored?: boolean; + }; + /** + * End Point Information + * @description Provides detailed information about the session + */ + SessionInformationDTO: { + sessionInfo?: components["schemas"]["SessionContextDTO"]; + subscriptionInfo?: components["schemas"]["SubscriptionInformationDTO"]; + }; + StompProtocolInformation: Omit< + components["schemas"]["ProtocolInformationDTO"], + "type" + > & { + sessionInfo?: components["schemas"]["SessionInformationDTO"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "stomp"; + }; + SubscriptionContextDTO: { + /** Format: int32 */ + maxAtRest?: number; + /** Format: int32 */ + receiveMaximum?: number; + /** Format: int64 */ + subscriptionId?: number; + destinationName?: string; + sharedName?: string; + selector?: string; + alias?: string; + acknowledgementController?: string; + retainHandler?: string; + qualityOfService?: string; + creditHandler?: string; + destinationMode?: string; + noLocalMessages?: boolean; + retainAsPublish?: boolean; + allowOverlap?: boolean; + browser?: boolean; + sync?: boolean; + }; + /** + * End Point Information + * @description Provides detailed information about the individual subscription + */ + SubscriptionInformationDTO: { + hibernated?: boolean; + persistent?: boolean; + sessionId?: string; + uniqueId?: string; + subscriptionContextList?: components["schemas"]["SubscriptionContextDTO"][]; + subscriptionStateList?: components["schemas"]["SubscriptionStateDTO"][]; + }; + SubscriptionStateDTO: { + destinationName?: string; + sessionId?: string; + hibernating?: boolean; + /** Format: int32 */ + size?: number; + /** Format: int32 */ + pending?: number; + sync?: boolean; + hasMessagesInFlight?: boolean; + hasAtRestMessages?: boolean; + /** Format: int64 */ + messagesIgnored?: number; + /** Format: int64 */ + messagesRegistered?: number; + /** Format: int64 */ + messagesSent?: number; + /** Format: int64 */ + messagesAcked?: number; + /** Format: int64 */ + messagesRolledBack?: number; + /** Format: int64 */ + messagesExpired?: number; + paused?: boolean; + }; + /** + * Destination + * @description Represents a messaging destination, such as a queue or topic, within the system. + */ + DestinationDTO: { + /** + * Destination Name + * @description The unique name of the destination, which acts as an identifier within the messaging system. + * @example myDestination + */ + name: string; + /** + * Destination Type + * @description The type of the destination, indicating whether it is a queue or a topic, for example. + * @example queue + * @enum {string} + */ + type: "queue" | "topic"; + /** + * Stored Messages + * Format: int64 + * @description The total count of messages currently stored in the destination. + * @example 123 + */ + storedMessages: number; + /** + * Delayed Messages + * Format: int64 + * @description The number of messages delayed for delivery, which might occur due to timing or prioritization settings. + * @example 123 + */ + delayedMessages: number; + /** + * Pending Messages + * Format: int64 + * @description The count of messages pending processing in the destination. + * @example 123 + */ + pendingMessages: number; + /** + * Schema ID + * @description The identifier for the schema associated with this destination, which may define the structure or rules for messages. + * @example schema-123 + */ + schemaId: string; + /** + * No Interest Messages + * Format: int64 + * @description The count of messages dropped due to lack of interest by consumers. + * @example 5 + */ + noInterestMessages?: number; + /** + * Published Messages + * Format: int64 + * @description Total count of messages published to this destination. + * @example 1000 + */ + publishedMessages?: number; + /** + * Retrieved Messages + * Format: int64 + * @description The total number of messages retrieved from the destination by consumers. + * @example 980 + */ + retrievedMessages?: number; + /** + * Expired Messages + * Format: int64 + * @description The count of messages that expired before being delivered. + * @example 10 + */ + expiredMessages?: number; + /** + * Delivered Messages + * Format: int64 + * @description The number of messages successfully delivered to consumers. + * @example 970 + */ + deliveredMessages?: number; + /** + * Average Read Time + * Format: int64 + * @description The average time, in nanoseconds, to read messages from the store. + * @example 1500 + */ + readTimeAveNs?: number; + /** + * Average Write Time + * Format: int64 + * @description The average time, in nanoseconds, to write messages to the store. + * @example 2000 + */ + writeTimeAveNs?: number; + /** + * Average Delete Time + * Format: int64 + * @description The average time, in nanoseconds, to delete messages from the store. + * @example 1200 + */ + deleteTimeAveNs?: number; + }; + DestinationDetailsResponse: { + destination?: components["schemas"]["DestinationDTO"]; + subscriptionList?: components["schemas"]["SubscriptionStateDTO"][]; + }; + /** @description Discovery Manager Configuration DTO */ + DiscoveryManagerConfigDTO: { + /** + * @description Indicates if the discovery manager is enabled + * @example false + */ + enabled?: boolean; + /** + * @description Hostnames for discovery + * @example :: + */ + hostnames?: string; + /** + * @description Whether to add TXT records + * @example true + */ + addTxtRecords?: boolean; + /** + * @description Domain name for discovery + * @example .local + */ + domainName?: string; + }; + /** + * Discovered Servers + * @description Represents information about discovered servers, including configuration details, schema support, and available services. + */ + DiscoveredServersDTO: { + /** + * Server Name + * @description The unique name of the discovered server. + * @example myServer + */ + serverName?: string; + /** + * System Topic Prefix + * @description The name space prefix used for system topics + * @example $SYS + */ + systemTopicPrefix?: string | null; + /** + * Schema Support + * @description Indicates whether the server supports schema validation for messages. + * @example true + */ + schemaSupport?: boolean; + /** + * Schema Prefix + * @description The name space prefix used for schemas + * @example $SCHEMA + */ + schemaPrefix?: string | null; + /** + * Server Version + * @description The version of the server software, typically following semantic versioning. + * @example 1.2.3 + */ + version?: string; + /** + * Build Date + * @description The date the server software was built, formatted as YYYY-MM-DD. + * @example 2024-01-15 + */ + buildDate?: string | null; + /** + * Services + * @description A map of services provided by the server, where each key is the service name and the value provides service-specific information. + * @example { + * "mqtt": {}, + * "amqp": {} + * } + */ + services?: { + [key: string]: components["schemas"]["Services"]; + } | null; + }; + /** + * Services + * @description A map of services provided by the server, where each key is the service name and the value provides service-specific information. + * @example { + * "mqtt": {}, + * "amqp": {} + * } + */ + Services: { + protocol?: string; + /** Format: int32 */ + port?: number; + transport?: string; + addresses?: string[]; + properties?: { + [key: string]: string; + }; + } | null; + RequestedAction: { + state?: string; + }; + /** @description Abstract base class for all schema configurations */ + BaseTriggerConfigDTO: { + /** + * @description Type of the trigger + * @example cron + * @enum {string} + */ + type?: "cron" | "interrupt" | "periodic"; + /** + * @description Name of the trigger + * @example dailyTrigger + */ + name?: string; + }; + /** @description Cron Trigger Configuration DTO */ + CronTriggerConfigDTO: Omit< + components["schemas"]["BaseTriggerConfigDTO"], + "type" + > & { + /** + * @description Cron expression for the trigger + * @example 0 0 * * * + */ + cron?: string; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "cron"; + }; + /** @description Device Manager Configuration DTO */ + DeviceManagerConfigDTO: { + /** + * @description Indicates if the device manager is enabled + * @example true + */ + enabled?: boolean; + /** + * @description Indicates if the device manager will load the demo devices + * @example false + */ + demoEnabled?: boolean; + /** @description List of trigger configurations */ + triggers?: components["schemas"]["BaseTriggerConfigDTO"][]; + /** @description List of I2C bus configurations */ + i2cBuses?: components["schemas"]["I2CBusConfigDTO"][]; + spiBus?: components["schemas"]["SpiDeviceBusConfigDTO"]; + oneWireBus?: components["schemas"]["OneWireBusConfigDTO"]; + serialDeviceBusConfig?: components["schemas"]["SerialDeviceBusConfig"]; + }; + /** @description DTO for I2C Bus configuration properties */ + I2CBusConfigDTO: { + /** @description Indicates if the device bus is enabled */ + enabled?: boolean; + /** @description Template for the topic name */ + topicNameTemplate?: string; + /** @description Specifies if auto-scan is enabled */ + autoScan?: boolean; + /** + * Format: int32 + * @description Scan time interval in milliseconds + */ + scanTime?: number; + /** @description Filter configuration for the device bus */ + filter?: string; + /** @description Selector configuration for the device bus */ + selector?: string; + /** + * Format: int32 + * @description Bus number for the I2C device + */ + bus?: number; + /** @description Trigger configuration for the I2C bus */ + trigger?: string; + /** @description List of I2C devices on this bus */ + devices?: components["schemas"]["I2CDeviceConfigDTO"][]; + }; + /** @description DTO for I2C Device configuration properties */ + I2CDeviceConfigDTO: { + /** + * Format: int32 + * @description Address of the I2C device + */ + address?: number; + /** @description Name of the I2C device */ + name?: string; + /** @description Selector configuration for the I2C device */ + selector?: string; + }; + /** @description Interrupt Trigger Configuration DTO */ + InterruptTriggerConfigDTO: Omit< + components["schemas"]["BaseTriggerConfigDTO"], + "type" + > & { + /** + * Format: int32 + * @description Address of the interrupt trigger + * @example 1 + */ + address?: number; + /** + * @description Pull direction of the interrupt trigger (e.g., UP or DOWN) + * @example UP + */ + pullDirection?: string; + /** + * @description Unique identifier for the trigger + * @example trigger1 + */ + id?: string; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "interrupt"; + }; + /** @description OneWire Bus Configuration DTO */ + OneWireBusConfigDTO: { + /** @description Indicates if the device bus is enabled */ + enabled?: boolean; + /** @description Template for the topic name */ + topicNameTemplate?: string; + /** @description Specifies if auto-scan is enabled */ + autoScan?: boolean; + /** + * Format: int32 + * @description Scan time interval in milliseconds + */ + scanTime?: number; + /** @description Filter configuration for the device bus */ + filter?: string; + /** @description Selector configuration for the device bus */ + selector?: string; + /** + * @description Name of the OneWire bus + * @example oneWireBus1 + */ + name?: string; + /** + * @description Trigger mechanism for OneWire bus + * @example temperatureTrigger + */ + trigger?: string; + }; + /** @description Periodic Trigger Configuration DTO */ + PeriodicTriggerConfigDTO: Omit< + components["schemas"]["BaseTriggerConfigDTO"], + "type" + > & { + /** + * Format: int32 + * @description Interval for the periodic trigger in milliseconds + * @example 5000 + */ + interval?: number; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "periodic"; + }; + /** @description Serial Configuration DTO */ + SerialConfigDTO: { + /** + * @description Type of the endpoint + * @example tcp, ssl, udp, dtls, loraSerial, loraDevice, serial + * @enum {string} + */ + type?: + | "tcp" + | "ssl" + | "udp" + | "dtls" + | "loraDevice" + | "loraSerial" + | "serial"; + /** + * @description Whether the endpoint is discoverable + * @example false + */ + discoverable?: boolean; + /** + * Format: int32 + * @description Number of selector threads + * @example 2 + */ + selectorThreadCount?: number; + /** + * Format: int64 + * @description Server read buffer size in bytes + * @example 10240 + */ + serverReadBufferSize?: number; + /** + * Format: int64 + * @description Server write buffer size in bytes + * @example 10240 + */ + serverWriteBufferSize?: number; + /** + * @description Proxy Protocol support mode. 'ENABLED' allows but doesn't require it, 'REQUIRED' enforces it, 'DISABLED' will NOT check for incoming PROXY requests. + * @example REQUIRED + * @enum {string} + */ + proxyProtocolMode?: "ENABLED" | "DISABLED" | "REQUIRED"; + /** + * @description Comma-separated list of allowed proxy source addresses. Supports hostnames, IPv4/IPv6 addresses, and CIDR blocks (e.g., 192.168.0.0/24, ::1, example.com). + * @example 192.168.1.0/24,10.0.0.1,example.com,::1 + */ + allowedProxyHosts?: string; + /** + * Format: int64 + * @description Time to wait for a client to establish the connection, in milliseconds + * @example 5000 + */ + connectionTimeout?: number; + /** + * @description Serial port name + * @example /dev/ttyS0 + */ + port?: string; + /** + * Format: int32 + * @description Baud rate for the serial connection + * @example 9600 + * @enum {integer} + */ + baudRate?: + | 110 + | 300 + | 600 + | 1200 + | 2400 + | 4800 + | 9600 + | 14400 + | 19200 + | 28800 + | 38400 + | 57600 + | 115200 + | 230400 + | 460800 + | 921600; + /** + * Format: int32 + * @description Number of data bits in the serial connection + * @example 8 + * @enum {integer} + */ + dataBits?: 5 | 6 | 7 | 8; + /** + * @description Number of stop bits in the serial connection + * @example 1 + * @enum {string} + */ + stopBits?: "1" | "1.5" | "2"; + /** + * @description Parity setting for the serial connection + * @example n + * @enum {string} + */ + parity?: "n" | "o" | "e" | "m" | "s"; + /** + * Format: int32 + * @description Flow control setting for the serial connection + * @example 1 + * @enum {integer} + */ + flowControl?: 0 | 1 | 2 | 3; + /** + * Format: int32 + * @description Read timeout in milliseconds + * @example 60000 + */ + readTimeOut?: number; + /** + * Format: int32 + * @description Write timeout in milliseconds + * @example 60000 + */ + writeTimeOut?: number; + /** + * Format: int32 + * @description Buffer size in bytes + * @example 262144 + */ + bufferSize?: number; + /** + * @description Serial number for the device, optional + * @example 262144 + */ + serialNo?: string; + }; + /** @description Serial device configuration */ + SerialDeviceBusConfig: { + /** @description Indicates if the device bus is enabled */ + enabled?: boolean; + /** @description Template for the topic name */ + topicNameTemplate?: string; + /** @description Specifies if auto-scan is enabled */ + autoScan?: boolean; + /** + * Format: int32 + * @description Scan time interval in milliseconds + */ + scanTime?: number; + /** @description Filter configuration for the device bus */ + filter?: string; + /** @description Selector configuration for the device bus */ + selector?: string; + /** + * @description Name of the serial bus managemnt + * @example serial + */ + name?: string; + /** @description List of Serial devices devices on this bus */ + devices?: components["schemas"]["SerialDeviceDTO"][]; + /** + * @description Trigger mechanism for OneWire bus + * @example temperatureTrigger + */ + trigger?: string; + }; + /** @description Serial Bus Configuration DTO */ + SerialDeviceDTO: { + /** @description Indicates if the device bus is enabled */ + enabled?: boolean; + /** @description Template for the topic name */ + topicNameTemplate?: string; + /** @description Specifies if auto-scan is enabled */ + autoScan?: boolean; + /** + * Format: int32 + * @description Scan time interval in milliseconds + */ + scanTime?: number; + /** @description Filter configuration for the device bus */ + filter?: string; + /** @description Selector configuration for the device bus */ + selector?: string; + /** + * @description Name of the Serial Device + * @example SEN0640 + */ + name?: string; + serialConfig?: components["schemas"]["SerialConfigDTO"]; + }; + /** @description SPI Device Bus Configuration DTO */ + SpiDeviceBusConfigDTO: { + /** @description Indicates if the device bus is enabled */ + enabled?: boolean; + /** @description Template for the topic name */ + topicNameTemplate?: string; + /** @description Specifies if auto-scan is enabled */ + autoScan?: boolean; + /** + * Format: int32 + * @description Scan time interval in milliseconds + */ + scanTime?: number; + /** @description Filter configuration for the device bus */ + filter?: string; + /** @description Selector configuration for the device bus */ + selector?: string; + /** + * @description Name of the SPI bus + * @example spiBus1 + */ + name?: string; + /** @description List of SPI devices on this bus */ + devices?: components["schemas"]["SpiDeviceConfigDTO"][]; + /** + * @description Trigger mechanism for OneWire bus + * @example temperatureTrigger + */ + trigger?: string; + }; + /** @description SPI Device Configuration DTO */ + SpiDeviceConfigDTO: { + /** + * Format: int32 + * @description Device address on the SPI bus + * @example 1 + */ + address?: number; + /** + * @description Name of the SPI device + * @example TemperatureSensor + */ + name?: string; + /** + * @description Selector used for the device + * @example tempSelector + */ + selector?: string; + /** + * Format: int32 + * @description SPI bus number + * @example 0 + */ + spiBus?: number; + /** + * Format: int32 + * @description SPI mode for the device + * @example 1 + */ + spiMode?: number; + /** + * Format: int32 + * @description Chip select line for the SPI device + * @example 0 + */ + spiChipSelect?: number; + /** @description Configuration map */ + config?: { + [key: string]: string; + }; + }; + /** + * Device Information + * @description Represents detailed information about a device, including its name, type, state, and description. + */ + DeviceInfoDTO: { + /** + * Device Name + * @description The unique name or identifier for the device. + * @example temperatureSensor01 + */ + name?: string; + /** + * Device Description + * @description A brief description of the device�s purpose or functionality. + * @example Temperature sensor for monitoring room temperature + */ + description?: string | null; + /** + * Device Type + * @description The type or category of the device, indicating its general function or use. + * @example sensor + */ + type?: string; + /** + * Device State + * @description Retrieves any state registers, could be sensor data or device state, is dependent on the device. + * @example 25.0C + */ + state?: string; + }; + /** @description AMQP Protocol Configuration DTO */ + AmqpConfigDTO: Omit & { + /** + * Format: int32 + * @description Idle timeout in milliseconds + * @example 30000 + */ + idleTimeout?: number; + /** + * Format: int32 + * @description Maximum frame size in bytes + * @example 65536 + */ + maxFrameSize?: number; + /** + * Format: int32 + * @description Link credit for the AMQP connection + * @example 50 + */ + linkCredit?: number; + /** + * @description Specifies if the AMQP link is durable + * @example false + */ + durable?: boolean; + /** + * Format: int32 + * @description Incoming capacity of the AMQP session + * @example 65536 + */ + incomingCapacity?: number; + /** + * Format: int32 + * @description Outgoing window size for the AMQP session + * @example 100 + */ + outgoingWindow?: number; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "amqp"; + }; + /** @description Authentication configuration for endpoint connection */ + AuthConfig: { + /** + * @description Username for authentication + * @example user123 + */ + username?: string; + /** + * @description Password for authentication + * @example password + */ + password?: string; + /** + * @description Session ID for the authentication session + * @example session-xyz + */ + sessionId?: string; + /** + * @description Token generator type + * @example JWT + */ + tokenGenerator?: string; + /** + * @description Configuration settings for the token generator + * @example { + * "expiry": 3600 + * } + */ + tokenConfig?: { + [key: string]: Record; + }; + }; + /** @description CoAP Protocol Configuration DTO */ + CoapConfigDTO: Omit & { + /** + * Format: int32 + * @description Maximum block size for CoAP + * @example 128 + */ + maxBlockSize?: number; + /** + * Format: int32 + * @description Idle time period for CoAP connections in seconds + * @example 120 + */ + idleTime?: number; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "coap"; + }; + /** @description Connection Authentication Configuration DTO */ + ConnectionAuthConfigDTO: { + /** + * @description Username for authentication + * @example user123 + */ + username?: string; + /** + * @description Password for authentication + * @example pass123 + */ + password?: string; + /** + * @description Client ID for the connection + * @example client123 + */ + clientId?: string; + /** + * @description Token generator type + * @example JWT + */ + tokenGenerator?: string; + }; + /** @description TLS Configuration DTO */ + DtlsConfigDTO: Omit & { + /** + * Format: int64 + * @description Timeout for reusing packets, in milliseconds + * @example 1000 + */ + packetReuseTimeout?: number; + /** + * Format: int64 + * @description Idle session timeout duration, in seconds + * @example 600 + */ + idleSessionTimeout?: number; + /** + * Format: int64 + * @description Expiry time for HMAC host lookup cache, in seconds + * @example 600 + */ + hmacHostLookupCacheExpiry?: number; + /** @description List of HMAC configurations for nodes */ + hmacConfigList?: components["schemas"]["HmacConfigDTO"][]; + sslConfig?: components["schemas"]["SslConfigDTO"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "dtls"; + }; + /** @description Abstract base class for all schema configurations */ + EndPointConfigDTO: { + /** + * @description Type of the endpoint + * @example tcp, ssl, udp, dtls, loraSerial, loraDevice, serial + * @enum {string} + */ + type?: + | "tcp" + | "ssl" + | "udp" + | "dtls" + | "loraDevice" + | "loraSerial" + | "serial"; + /** + * @description Whether the endpoint is discoverable + * @example false + */ + discoverable?: boolean; + /** + * Format: int32 + * @description Number of selector threads + * @example 2 + */ + selectorThreadCount?: number; + /** + * Format: int64 + * @description Server read buffer size in bytes + * @example 10240 + */ + serverReadBufferSize?: number; + /** + * Format: int64 + * @description Server write buffer size in bytes + * @example 10240 + */ + serverWriteBufferSize?: number; + /** + * @description Proxy Protocol support mode. 'ENABLED' allows but doesn't require it, 'REQUIRED' enforces it, 'DISABLED' will NOT check for incoming PROXY requests. + * @example REQUIRED + * @enum {string} + */ + proxyProtocolMode?: "ENABLED" | "DISABLED" | "REQUIRED"; + /** + * @description Comma-separated list of allowed proxy source addresses. Supports hostnames, IPv4/IPv6 addresses, and CIDR blocks (e.g., 192.168.0.0/24, ::1, example.com). + * @example 192.168.1.0/24,10.0.0.1,example.com,::1 + */ + allowedProxyHosts?: string; + /** + * Format: int64 + * @description Time to wait for a client to establish the connection, in milliseconds + * @example 5000 + */ + connectionTimeout?: number; + }; + /** + * Connection Configuration + * @description Endpoint Connection Server Configuration DTO + */ + EndPointConnectionServerConfigDTO: { + /** + * @description Name of the endpoint server + * @example MainServer + */ + name?: string; + /** + * @description URL for the endpoint server + * @example tcp://localhost:1883 + */ + url?: string; + endPointConfig?: components["schemas"]["EndPointConfigDTO"]; + saslConfig?: components["schemas"]["SaslConfigDTO"]; + /** @description List of protocol configurations for the endpoint */ + protocolConfigs?: components["schemas"]["ProtocolConfigDTO"][]; + /** + * @description Authentication realm + * @example defaultRealm + */ + authenticationRealm?: string; + /** + * Format: int32 + * @description Backlog for the endpoint server + * @example 100 + */ + backlog?: number; + /** + * Format: int32 + * @description Selector task wait time + * @example 10 + */ + selectorTaskWait?: number; + authConfig?: components["schemas"]["AuthConfig"]; + /** + * @description Link transformation for the endpoint connection + * @example transformationType + */ + linkTransformation?: string; + /** @description List of link configurations */ + linkConfigs?: components["schemas"]["LinkConfigDTO"][]; + /** @description Is this a 3rd party plugin connection */ + pluginConnection?: boolean; + /** + * Format: int32 + * @description An arbitrary cost associated with using this connection + * @default 10 + * @example 0 + */ + cost: number; + /** + * @description Optional name of the group that the connection belongs to + * @example Main data uplink + */ + groupName?: string; + protocols?: string; + }; + ExtensionConfigDTO: Omit< + components["schemas"]["ProtocolConfigDTO"], + "type" + > & { + /** @description Map of config entries */ + config?: { + [key: string]: Record; + }; + /** @description name of the extension protocl */ + protocol?: string; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "extension"; + }; + /** @description HMAC Configuration DTO */ + HmacConfigDTO: { + /** + * @description The host for the HMAC configuration + * @example example.com + */ + host?: string; + /** + * Format: int32 + * @description The port used for HMAC communication + * @example 8080 + */ + port?: number; + /** + * @description The secret key for HMAC operations + * @example mySecretKey + */ + secret?: string; + /** + * @description The HMAC algorithm to use + * @example HmacSHA256 + */ + hmacAlgorithm?: string; + /** + * @description The manager handling HMAC operations + * @example Appender + */ + hmacManager?: string; + /** + * @description The shared key used for HMAC + * @example sharedKey + */ + hmacSharedKey?: string; + }; + /** + * Integration Information + * @description Provides configuration and details about a specific integration connection. + */ + IntegrationInfoDTO: { + config?: components["schemas"]["EndPointConnectionServerConfigDTO"]; + state?: string; + }; + /** @description Key Store Configuration DTO */ + KeyStoreConfigDTO: { + /** + * @description Alias used in the key store + * @example myKeyAlias + */ + alias?: string; + /** + * @description Type of the key store + * @example JKS + */ + type?: string; + /** + * @description Name of the security provider + * @example SunJSSE + */ + providerName?: string; + /** + * @description Key manager factory algorithm + * @example SunX509 + */ + managerFactory?: string; + /** + * @description Path to the key store file + * @example /path/to/keystore.jks + */ + path?: string; + /** + * @description Passphrase for the key store + * @example changeit + */ + passphrase?: string; + /** + * @description Provider name for the key store + * @example SunJSSE + */ + provider?: string; + }; + /** @description Link Configuration DTO */ + LinkConfigDTO: { + /** + * @description Direction of the link + * @example inbound + */ + direction?: string; + /** + * @description Remote namespace + * @example remote_ns + */ + remoteNamespace?: string; + /** + * @description Local namespace + * @example local_ns + */ + localNamespace?: string; + /** + * @description Message selector + * @example selector_criteria + */ + selector?: string; + /** + * @description Include schema flag + * @example true + */ + includeSchema?: boolean; + /** @description Transformer configuration map */ + transformer?: { + [key: string]: Record; + }; + statistics?: components["schemas"]["StatisticsConfigDTO"]; + namespaceFilters?: components["schemas"]["NamespaceFilters"]; + /** + * @description Quality of server QoS:0, 1 or 2, for non MQTT 1 or 2 imply transactional + * @example 1 + * @enum {string|null} + */ + qualityOfService?: + | "QualityOfService.AT_MOST_ONCE(level=0, description=Best Effort, no guarantee of delivery, storeOffLine=false, sendPacketId=false, clientAcknowledgement=AUTO)" + | "QualityOfService.AT_LEAST_ONCE(level=1, description=Guarantees at least once but may be duplicated delivery if connection fails between sending and Ack, storeOffLine=true, sendPacketId=true, clientAcknowledgement=INDIVIDUAL)" + | "QualityOfService.EXACTLY_ONCE(level=2, description=Only once delivery, in that the event is delivered to the client once and once only, storeOffLine=true, sendPacketId=true, clientAcknowledgement=INDIVIDUAL)" + | "QualityOfService.MQTT_SN_REGISTERED(level=3, description=Used by MQTT-SN to send publish events to a known topic without the need to have a connection established, this is reserved for MQTT-SN, storeOffLine=true, sendPacketId=false, clientAcknowledgement=AUTO)" + | null; + }; + LoRaChipConfigDTO: Omit< + components["schemas"]["EndPointConfigDTO"], + "type" + > & { + /** + * @description Name of the LoRa device + * @example LoRaNode1 + */ + name?: string; + /** + * Format: int32 + * @description Power setting for the device + * @example 14 + */ + power?: number; + /** + * Format: float + * @description Operating frequency of the device in MHz + * @example 868 + */ + frequency?: number; + /** + * Format: int32 + * @description Base address to register for, 1-254 + * @example 2 + */ + address?: number; + /** + * Format: int32 + * @description Transmission rate to limit the number of packets/second, 0 - unlimited, else per second + * @example 5 + */ + transmissionRate?: number; + /** + * @description Optional hex based 16 byte key + * @example 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 + */ + hexKey?: string; + /** + * @description Radio type of the LoRa device + * @example SX1276 + */ + radio?: string; + /** + * Format: int32 + * @description Chip Select (CS) pin number + * @example 10 + */ + cs?: number; + /** + * Format: int32 + * @description IRQ pin number + * @example 7 + */ + irq?: number; + /** + * Format: int32 + * @description Reset (RST) pin number + * @example 3 + */ + rst?: number; + /** + * Format: int32 + * @description CAD timeout setting + * @example 500 + */ + cadTimeout?: number; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "loraDevice"; + }; + /** @description LoRa Protocol Configuration DTO */ + LoRaProtocolConfigDTO: Omit< + components["schemas"]["ProtocolConfigDTO"], + "type" + > & { + /** + * Format: int32 + * @description Maximum retransmission rate for LoRa + * @example 10 + */ + retransmit?: number; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "lora"; + }; + LoRaSerialConfigDTO: Omit< + components["schemas"]["EndPointConfigDTO"], + "type" + > & { + /** + * @description Name of the LoRa device + * @example LoRaNode1 + */ + name?: string; + /** + * Format: int32 + * @description Power setting for the device + * @example 14 + */ + power?: number; + /** + * Format: float + * @description Operating frequency of the device in MHz + * @example 868 + */ + frequency?: number; + /** + * Format: int32 + * @description Base address to register for, 1-254 + * @example 2 + */ + address?: number; + /** + * Format: int32 + * @description Transmission rate to limit the number of packets/second, 0 - unlimited, else per second + * @example 5 + */ + transmissionRate?: number; + /** + * @description Optional hex based 16 byte key + * @example 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 + */ + hexKey?: string; + serialConfig?: components["schemas"]["SerialConfigDTO"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "loraSerial"; + }; + /** @description Message override configuration DTO */ + MessageOverrideDTO: { + /** + * Format: int64 + * @description Override message expiry in milliseconds + * @example 60000 + */ + expiry?: number; + /** + * @description Override message priority + * @example NORMAL + * @enum {string} + */ + priority?: + | "Priority.LOWEST(value=0, description=Lowest priority)" + | "Priority.ONE_ABOVE_LOWEST(value=1, description=Lowest priority +1)" + | "Priority.TWO_ABOVE_LOWEST(value=2, description=Lowest priority +2)" + | "Priority.ONE_BELOW_NORMAL(value=3, description=Normal priority -1)" + | "Priority.NORMAL(value=4, description=Normal priority)" + | "Priority.ONE_ABOVE_NORMAL(value=5, description=Normal priority +1)" + | "Priority.TWO_ABOVE_NORMAL(value=6, description=Normal priority +2)" + | "Priority.THREE_ABOVE_NORMAL(value=7, description=Normal priority +3)" + | "Priority.TWO_BELOW_HIGHEST(value=8, description=Highest priority -2)" + | "Priority.ONE_BELOW_HIGHEST(value=9, description=Highest priority -1)" + | "Priority.HIGHEST(value=10, description=Highest priority)"; + /** + * @description Override message quality of service + * @example AT_LEAST_ONCE + * @enum {string} + */ + qualityOfService?: + | "QualityOfService.AT_MOST_ONCE(level=0, description=Best Effort, no guarantee of delivery, storeOffLine=false, sendPacketId=false, clientAcknowledgement=AUTO)" + | "QualityOfService.AT_LEAST_ONCE(level=1, description=Guarantees at least once but may be duplicated delivery if connection fails between sending and Ack, storeOffLine=true, sendPacketId=true, clientAcknowledgement=INDIVIDUAL)" + | "QualityOfService.EXACTLY_ONCE(level=2, description=Only once delivery, in that the event is delivered to the client once and once only, storeOffLine=true, sendPacketId=true, clientAcknowledgement=INDIVIDUAL)" + | "QualityOfService.MQTT_SN_REGISTERED(level=3, description=Used by MQTT-SN to send publish events to a known topic without the need to have a connection established, this is reserved for MQTT-SN, storeOffLine=true, sendPacketId=false, clientAcknowledgement=AUTO)"; + /** + * @description Override response topic + * @example /default/response + */ + responseTopic?: string; + /** + * @description Override content type + * @example application/json + */ + contentType?: string; + /** + * @description Override schema ID + * @example default-schema-id + */ + schemaId?: string; + /** + * @description Override retain message flag + * @example true + */ + retain?: boolean; + /** @description Metadata to inject if not present in the message */ + meta?: { + [key: string]: string; + }; + /** @description Data map to inject if keys are not present in the message */ + dataMap?: { + [key: string]: Record; + }; + }; + /** @description MQTT Protocol Configuration DTO */ + MqttConfigDTO: Omit & { + /** + * Format: int64 + * @description Maximum session expiry for MQTT + * @example 86400 + */ + maximumSessionExpiry?: number; + /** + * Format: int64 + * @description Maximum buffer size for MQTT + * @example 10485760 + */ + maximumBufferSize?: number; + /** + * Format: int32 + * @description Server receive maximum + * @example 10 + */ + serverReceiveMaximum?: number; + /** + * Format: int32 + * @description Client receive maximum + * @example 65535 + */ + clientReceiveMaximum?: number; + /** + * Format: int32 + * @description Client maximum topic alias + * @example 32767 + */ + clientMaximumTopicAlias?: number; + /** + * Format: int32 + * @description Server maximum topic alias + * @example 0 + */ + serverMaximumTopicAlias?: number; + /** + * @description Indicates if strict client ID enforcement is enabled + * @example false + */ + strictClientId?: boolean; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "mqtt"; + }; + /** @description MQTT-SN Protocol Configuration DTO */ + MqttSnConfigDTO: Omit< + components["schemas"]["ProtocolConfigDTO"], + "type" + > & { + /** + * @description Gateway ID for MQTT-SN + * @example 1 + */ + gatewayId?: string; + /** + * Format: int32 + * @description Receive maximum + * @example 10 + */ + receiveMaximum?: number; + /** + * Format: int64 + * @description Idle session timeout in seconds + * @example 600 + */ + idleSessionTimeout?: number; + /** + * Format: int32 + * @description Maximum session expiry time in seconds + * @example 86400 + */ + maximumSessionExpiry?: number; + /** + * @description Enable port changes + * @example true + */ + enablePortChanges?: boolean; + /** + * @description Enable address changes + * @example false + */ + enableAddressChanges?: boolean; + /** + * @description Advertise the gateway + * @example false + */ + advertiseGateway?: boolean; + /** @description Registered topics */ + registeredTopics?: string; + /** + * Format: int32 + * @description Advertise interval in seconds + * @example 30 + */ + advertiseInterval?: number; + /** + * Format: int32 + * @description Maximum registered size + * @example 32767 + */ + maxRegisteredSize?: number; + /** + * Format: int32 + * @description Maximum in-flight events + * @example 1 + */ + maxInFlightEvents?: number; + /** + * @description Drop QoS 0 events + * @example false + */ + dropQoS0?: boolean; + /** + * Format: int32 + * @description Event queue timeout in seconds + * @example 0 + */ + eventQueueTimeout?: number; + /** @description List of predefined topics */ + predefinedTopicsList?: components["schemas"]["PredefinedTopics"][]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "mqtt-sn"; + }; + /** @description MQTT V5 Protocol Configuration DTO */ + MqttV5ConfigDTO: Omit< + components["schemas"]["ProtocolConfigDTO"], + "type" + > & { + /** + * Format: int64 + * @description Maximum session expiry for MQTT + * @example 86400 + */ + maximumSessionExpiry?: number; + /** + * Format: int64 + * @description Maximum buffer size for MQTT + * @example 10485760 + */ + maximumBufferSize?: number; + /** + * Format: int32 + * @description Server receive maximum + * @example 10 + */ + serverReceiveMaximum?: number; + /** + * Format: int32 + * @description Client receive maximum + * @example 65535 + */ + clientReceiveMaximum?: number; + /** + * Format: int32 + * @description Client maximum topic alias + * @example 32767 + */ + clientMaximumTopicAlias?: number; + /** + * Format: int32 + * @description Server maximum topic alias + * @example 0 + */ + serverMaximumTopicAlias?: number; + /** + * @description Indicates if strict client ID enforcement is enabled + * @example false + */ + strictClientId?: boolean; + /** + * Format: int32 + * @description Minimum server keep-alive interval in seconds + * @example 0 + */ + minServerKeepAlive?: number; + /** + * Format: int32 + * @description Maximum server keep-alive interval in seconds + * @example 60 + */ + maxServerKeepAlive?: number; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "mqttV5"; + }; + NamespaceFilter: { + namespace?: string; + /** Format: int32 */ + depth?: number; + selector?: string; + forcePriority?: boolean; + executor?: components["schemas"]["ParserExecutor"]; + }; + /** @description Specific filtering on namespace */ + NamespaceFilters: { + allFilters?: components["schemas"]["NamespaceFilter"][]; + } | null; + /** @description NMEA Protocol Configuration DTO */ + NmeaConfigDTO: Omit & { + serial?: components["schemas"]["SerialConfigDTO"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "NMEA-0183"; + }; + ParserExecutor: Record; + /** @description List of predefined topics */ + PredefinedTopics: { + /** + * Format: int32 + * @description Unique identifier for the topic + * @example 1 + */ + id?: number; + /** + * @description Topic name + * @example my/topic + */ + topic?: string; + /** + * @description Address associated with the topic + * @example * + */ + address?: string; + }; + /** @description Abstract base class for all protocol configurations */ + ProtocolConfigDTO: { + /** + * @description Type of the protocol configuration + * @enum {string} + */ + type: + | "amqp" + | "coap" + | "lora" + | "loop" + | "mqtt" + | "mqtt-sn" + | "mqttV5" + | "NMEA-0183" + | "orbcomm" + | "satellite" + | "semtech" + | "stomp" + | "websocket" + | "extension"; + /** @description Support Proxy Protocol on the connection */ + proxyProtocol?: boolean; + remoteAuthConfig?: components["schemas"]["ConnectionAuthConfigDTO"]; + messageDefaults?: components["schemas"]["MessageOverrideDTO"]; + protocol?: string; + }; + /** + * SASL Configuration DTO + * @description Represents the configuration for SASL authentication used for REST communication. + */ + SaslConfigDTO: { + /** + * @description The realm name used for SASL authentication + * @example example-realm + */ + realmName?: string; + /** + * @description The SASL mechanism, such as PLAIN or SCRAM-SHA-256 + * @example PLAIN + */ + mechanism?: string; + /** + * @description The identity provider for SASL + * @example authProvider123 + */ + identityProvider?: string; + /** + * @description Additional SASL entries as key-value pairs + * @example { + * "entry1": "value1" + * } + */ + saslEntries?: { + [key: string]: Record; + }; + }; + /** @description Base Satellite Configuration DTO */ + SatelliteConfigDTO: Omit< + components["schemas"]["ProtocolConfigDTO"], + "type" + > & { + /** + * Format: int64 + * @description Time in seconds to poll the modem for incoming messages + * @default 10 + * @example 15 + */ + incomingMessagePollInterval: number; + /** + * Format: int64 + * @description Time in seconds to poll for outgoing messages + * @default 60 + * @example 60 + */ + outgoingMessagePollInterval: number; + /** + * Format: int32 + * @description maximum buffer size allowed by the satellite communications + * @default 4000 + * @example 4000 + */ + maxBufferSize: number; + /** + * Format: int32 + * @description minimum sized buffer that will be compressed + * @default 256 + * @example 512 + */ + compressionCutoffSize: number; + /** + * Format: int32 + * @description life time of message in minutes + * @default 10 + * @example 5 + */ + messageLifeTimeInMinutes: number; + /** + * @description Shared secret for encryption + * @example this is a shared secret + */ + sharedSecret?: string; + /** + * @description If set, then high priority messages will NOT be queued, will incur additional charges + * @default false + * @example false + */ + sendHighPriorityMessages: boolean; + /** + * Format: int32 + * @description The SIN number that maps should use, must be greater then 128 + * @default 147 + * @example 147 + */ + sinNumber: number; + /** @description URL of the server */ + baseUrl?: string; + /** + * Format: int32 + * @description HTTP Request time out in seconds + */ + httpRequestTimeout?: number; + /** + * Format: int32 + * @description Max number of events to be in flight per each modems + */ + maxInflightEventsPerDevice?: number; + /** + * @description Topic template for publishing decoded common (SIN < 127) inbound messages (after parsing SIN/MIN). + * @default /{deviceId}/common/in/{sin}/{min} + * @example /{deviceId}/common/in/{sin}/{min} + */ + commonInboundPublishRoot: string; + /** + * @description Topic root for accepting outbound common (SIN < 127) messages to be encoded and sent to the modem. Wildcards are allowed. + * @default /{deviceId}/common/out/# + * @example /{deviceId}/common/out/# + */ + commonOutboundPublishRoot: string; + /** + * @description Topic template for publishing decoded MAPS (SIN 147) inbound messages into a namespace tree (after parsing). + * @default /{deviceId}/maps/in/{namespace}/# + * @example /{deviceId}/maps/in/{namespace}/# + */ + mapsInboundPublishRoot: string; + /** + * @description Topic template for accepting outbound MAPS (SIN 147) messages from a namespace tree to be encoded and sent to the modem. + * @default /{deviceId}/maps/out/{namespace}/# + * @example /{deviceId}/maps/out/{namespace}/# + */ + mapsOutboundPublishRoot: string; + /** + * @description Topic used to broadcast a message to all modems/clients (encoded and sent to each). + * @default /inmarsat/broadcast + * @example /inmarsat/broadcast + */ + outboundBroadcast: string; + /** @description Mailbox ID */ + mailboxId?: string; + /** @description Mailbox password */ + mailboxPassword?: string; + /** + * Format: int32 + * @description Device Info update time in minutes + */ + deviceInfoUpdateMinutes?: number; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "satellite"; + }; + /** @description Semtech Protocol Configuration DTO */ + SemtechConfigDTO: Omit< + components["schemas"]["ProtocolConfigDTO"], + "type" + > & { + /** + * Format: int32 + * @description Maximum queue size for Semtech + * @example 10 + */ + maxQueued?: number; + /** + * @description Inbound topic name for Semtech messages + * @example /semtech/inbound + */ + inboundTopicName?: string; + /** + * @description Outbound topic name for Semtech messages + * @example /semtech/outbound + */ + outboundTopicName?: string; + /** + * @description Status topic name for Semtech + * @example /semtech/status + */ + statusTopicName?: string; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "semtech"; + }; + /** @description SSL Configuration DTO */ + SslConfigDTO: { + /** + * @description Whether client certificate is required + * @example true + */ + clientCertificateRequired?: boolean; + /** + * @description Whether client certificate is wanted + * @example true + */ + clientCertificateWanted?: boolean; + /** + * @description URL for Certificate Revocation List + * @example http://example.com/crl + */ + crlUrl?: string; + /** + * Format: int64 + * @description Interval in milliseconds for CRL refresh + * @example 3600000 + */ + crlInterval?: number; + /** + * @description SSL context identifier + * @example TLSv3 + */ + context?: string; + keyStore?: components["schemas"]["KeyStoreConfigDTO"]; + trustStore?: components["schemas"]["KeyStoreConfigDTO"]; + }; + /** + * Analytics + * @description Configures the event stream statistics analytics + */ + StatisticsConfigDTO: { + /** + * name of the statistic engine to run + * @description The number of events to process before emitting an event containing the data + * @example Advanced + */ + statisticName?: string; + /** + * Number of events + * Format: int32 + * @description The number of events to process before emitting an event containing the data + * @example 100 + */ + eventCount?: number; + /** + * Ignore List + * @description Lists the keys that should be ignored from the event and not part of the resultant statistics, Comma seperated + * @example modelName,serialNumber + */ + ignoreList?: (string | null)[] | null; + /** + * Key List + * @description Specific set of keys to use rather than auto discovery this is used to refine the keys used + * @example temperature, humidity + */ + keyList?: (string | null)[] | null; + }; + /** @description OrbComm ST and OGi Modem Protocol Configuration DTO */ + StoGiConfigDTO: Omit & { + /** + * Format: int64 + * @description Time in seconds to poll the modem for incoming messages + * @default 10 + * @example 15 + */ + incomingMessagePollInterval: number; + /** + * Format: int64 + * @description Time in seconds to poll for outgoing messages + * @default 60 + * @example 60 + */ + outgoingMessagePollInterval: number; + /** + * Format: int32 + * @description maximum buffer size allowed by the satellite communications + * @default 4000 + * @example 4000 + */ + maxBufferSize: number; + /** + * Format: int32 + * @description minimum sized buffer that will be compressed + * @default 256 + * @example 512 + */ + compressionCutoffSize: number; + /** + * Format: int32 + * @description life time of message in minutes + * @default 10 + * @example 5 + */ + messageLifeTimeInMinutes: number; + /** + * @description Shared secret for encryption + * @example this is a shared secret + */ + sharedSecret?: string; + /** + * @description If set, then high priority messages will NOT be queued, will incur additional charges + * @default false + * @example false + */ + sendHighPriorityMessages: boolean; + /** + * Format: int32 + * @description The SIN number that maps should use, must be greater then 128 + * @default 147 + * @example 147 + */ + sinNumber: number; + serial?: components["schemas"]["SerialConfigDTO"]; + /** + * Format: int64 + * @description Time in milliseconds to wait for a modem response + */ + modemResponseTimeout?: number; + /** @description Initial modem setup string */ + initialSetup?: string; + /** + * Format: int64 + * @description Time in seconds between polling modem location and statistics, 0 disables it + * @default 0 + * @example 60 + */ + locationPollInterval: number; + /** + * @description If present, then the name of the topic to send modem statistics to + * @default /modem/stats + * @example /modem/stats + */ + modemStatsTopic: string; + /** + * @description If present, then the name of the topic that will be used to send raw messages to + * @default /incoming/{sin}/{min} + * @example /incoming/{sin}/{min} + */ + modemRawRequest: string; + /** + * @description If present, then the name of the topic that will be used monitor for response and send directly to the modem + * @default /outbound + * @example /outbound + */ + modemRawResponse: string; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "orbcomm"; + }; + /** @description STOMP Protocol Configuration DTO */ + StompConfigDTO: Omit & { + /** + * Format: int32 + * @description Maximum buffer size for STOMP + * @example 65535 + */ + maxBufferSize?: number; + /** + * Format: int32 + * @description Maximum receive limit for STOMP + * @example 1000 + */ + maxReceive?: number; + /** + * @description Encode the outgoing buffer as bas64 if binary + * @example true + */ + base64EncodeBinary?: boolean; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "stomp"; + }; + /** @description TCP Configuration DTO */ + TcpConfigDTO: Omit & { + /** + * Format: int32 + * @description Size of the receive buffer + * @example 128000 + */ + receiveBufferSize?: number; + /** + * Format: int32 + * @description Size of the send buffer + * @example 128000 + */ + sendBufferSize?: number; + /** + * Format: int32 + * @description Connection timeout in milliseconds + * @example 60000 + */ + timeout?: number; + /** + * Format: int32 + * @description Backlog for TCP connections + * @example 100 + */ + backlog?: number; + /** + * Format: int32 + * @description SO linger delay in seconds + * @example 10 + */ + soLingerDelaySec?: number; + /** + * Format: int32 + * @description Read delay on fragmentation + * @example 100 + */ + readDelayOnFragmentation?: number; + /** + * Format: int32 + * @description Fragmentation limit for the connection + * @example 5 + */ + fragmentationLimit?: number; + /** + * @description Enable read delay on fragmentation + * @example true + */ + enableReadDelayOnFragmentation?: boolean; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "tcp"; + }; + /** @description TLS Configuration DTO */ + TlsConfigDTO: Omit & { + /** + * Format: int32 + * @description Size of the receive buffer + * @example 128000 + */ + receiveBufferSize?: number; + /** + * Format: int32 + * @description Size of the send buffer + * @example 128000 + */ + sendBufferSize?: number; + /** + * Format: int32 + * @description Connection timeout in milliseconds + * @example 60000 + */ + timeout?: number; + /** + * Format: int32 + * @description Backlog for TCP connections + * @example 100 + */ + backlog?: number; + /** + * Format: int32 + * @description SO linger delay in seconds + * @example 10 + */ + soLingerDelaySec?: number; + /** + * Format: int32 + * @description Read delay on fragmentation + * @example 100 + */ + readDelayOnFragmentation?: number; + /** + * Format: int32 + * @description Fragmentation limit for the connection + * @example 5 + */ + fragmentationLimit?: number; + /** + * @description Enable read delay on fragmentation + * @example true + */ + enableReadDelayOnFragmentation?: boolean; + sslConfig?: components["schemas"]["SslConfigDTO"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "ssl"; + }; + /** @description UDP Configuration DTO */ + UdpConfigDTO: Omit & { + /** + * Format: int64 + * @description Timeout for reusing packets, in milliseconds + * @example 1000 + */ + packetReuseTimeout?: number; + /** + * Format: int64 + * @description Idle session timeout duration, in seconds + * @example 600 + */ + idleSessionTimeout?: number; + /** + * Format: int64 + * @description Expiry time for HMAC host lookup cache, in seconds + * @example 600 + */ + hmacHostLookupCacheExpiry?: number; + /** @description List of HMAC configurations for nodes */ + hmacConfigList?: components["schemas"]["HmacConfigDTO"][]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "udp"; + }; + /** @description WebSocket Protocol Configuration DTO */ + WebSocketConfigDTO: Omit< + components["schemas"]["ProtocolConfigDTO"], + "type" + > & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "websocket"; + }; + /** + * Integration Status + * @description Represents the status of an integration, including bytes and messages processed, connection state, errors, and performance statistics. + */ + IntegrationStatusDTO: { + /** + * Interface Name + * @description The name of the interface associated with this integration. + * @example myInterface + */ + interfaceName?: string; + /** + * Bytes Sent + * Format: int64 + * @description The total number of bytes sent by the interface. + * @example 123456 + */ + bytesSent?: number; + /** + * Bytes Received + * Format: int64 + * @description The total number of bytes received by the interface. + * @example 654321 + */ + bytesReceived?: number; + /** + * Messages Sent + * Format: int64 + * @description The total number of messages sent by the interface. + * @example 100 + */ + messagesSent?: number; + /** + * Messages Received + * Format: int64 + * @description The total number of messages received by the interface. + * @example 95 + */ + messagesReceived?: number; + /** + * Connection Errors + * Format: int64 + * @description The total count of connection errors encountered. + * @example 2 + */ + errors?: number; + /** + * Last Read Time + * Format: int64 + * @description The timestamp of the last read operation. + * @example 1625812345678 + */ + lastReadTime?: number; + /** + * Last Write Time + * Format: int64 + * @description The timestamp of the last write operation. + * @example 1625812345678 + */ + lastWriteTime?: number; + /** + * Interface State + * @description The current state of the interface (e.g., active, inactive). + * @example active + */ + state?: string; + /** + * Statistics + * @description A map of moving averages related to interface performance metrics. + * @example {"averageRead": {"name": "averageRead", "unitName": "bytes", "current": 50, ...}} + */ + statistics?: { + [key: string]: components["schemas"]["LinkedMovingAverageRecordDTO"]; + } | null; + }; + /** + * Linked Moving Average Record + * @description Represents a record of moving average statistics, tracking metrics over a defined timespan with specific units. + * @example {"latency": {"name": "latency", "unitName": "ms", "current": 10, ...}} + */ + LinkedMovingAverageRecordDTO: { + /** + * Metric Name + * @description The name of the metric being recorded (e.g., 'latency', 'throughput'). + * @example latency + */ + name?: string; + /** + * Unit Name + * @description The unit of measurement for the metric (e.g., 'ms' for milliseconds). + * @example ms + */ + unitName?: string; + /** + * Timespan + * Format: int64 + * @description The timespan over which the moving average is calculated, in milliseconds. + * @example 60000 + */ + timeSpan?: number; + /** + * Current Value + * Format: int64 + * @description The current moving average value for the metric. + * @example 150 + */ + current?: number; + /** + * Statistics Map + * @description A map containing additional statistical values, where each key is a descriptive label and each value is a measurement. + * @example { + * "min": 100, + * "max": 200, + * "average": 150 + * } + */ + stats?: { + [key: string]: number; + }; + }; + IntegrationListStatus: { + list?: components["schemas"]["IntegrationStatusDTO"][]; + }; + IntegrationDetailResponse: { + data?: components["schemas"]["IntegrationInfoDTO"][]; + globalConfig?: { + [key: string]: Record; + }; + }; + /** + * EndPoint Server Configuration DTO + * @description Represents configuration settings for an endpoint server. + */ + EndPointServerConfigDTO: { + /** + * @description Name of the endpoint server + * @example MainServer + */ + name?: string; + /** + * @description URL for the endpoint server + * @example tcp://localhost:1883 + */ + url?: string; + endPointConfig?: components["schemas"]["EndPointConfigDTO"]; + saslConfig?: components["schemas"]["SaslConfigDTO"]; + /** @description List of protocol configurations for the endpoint */ + protocolConfigs?: components["schemas"]["ProtocolConfigDTO"][]; + /** + * @description Authentication realm + * @example defaultRealm + */ + authenticationRealm?: string; + /** + * Format: int32 + * @description Backlog for the endpoint server + * @example 100 + */ + backlog?: number; + /** + * Format: int32 + * @description Selector task wait time + * @example 10 + */ + selectorTaskWait?: number; + protocols?: string; + }; + /** + * Interface Information + * @description Contains details about an interface, including its name, host, port, and current state. + */ + InterfaceInfoDTO: { + /** + * unique id + * @description UUID to reference the interface + */ + uniqueId?: string; + /** + * Interface Name + * @description Unique name of the interface + * @example myInterface + */ + name?: string; + /** + * Port + * Format: int32 + * @description Port that the interface is bound to + * @example 8080 + */ + port?: number; + /** + * Host + * @description Host that the interface is bound to + * @example http://localhost + */ + host?: string; + /** + * State + * @description Current state of the interface + * @example Started + */ + state?: string; + config?: components["schemas"]["EndPointServerConfigDTO"]; + }; + /** + * Interface Status + * @description Represents detailed statistics about an interface, including bytes and messages sent/received, connection count, and error counts. + */ + InterfaceStatusDTO: { + /** + * Interface Name + * @description Name of the interface + * @example myInterface + */ + interfaceName?: string; + /** + * Total Bytes Sent + * Format: int64 + * @description Total number of bytes sent by the interface. + * @example 1024000 + */ + totalBytesSent?: number; + /** + * Total Bytes Received + * Format: int64 + * @description Total number of bytes received by the interface. + * @example 2048000 + */ + totalBytesReceived?: number; + /** + * Total Messages Sent + * Format: int64 + * @description Total number of messages sent by the interface. + * @example 500 + */ + totalMessagesSent?: number; + /** + * Total Messages Received + * Format: int64 + * @description Total number of messages received by the interface. + * @example 480 + */ + totalMessagesReceived?: number; + /** + * Bytes Sent per Second + * Format: float + * @description Number of bytes sent per second. + * @example 1000 + */ + bytesSent?: number; + /** + * Bytes Received per Second + * Format: float + * @description Number of bytes received per second. + * @example 2000 + */ + bytesReceived?: number; + /** + * Messages Sent per Second + * Format: float + * @description Number of messages sent per second. + * @example 5 + */ + messagesSent?: number; + /** + * Messages Received per Second + * Format: float + * @description Number of messages received per second. + * @example 4 + */ + messagesReceived?: number; + /** + * Current Connections + * Format: int64 + * @description Number of current connections. + * @example 10 + */ + connections?: number; + /** + * Connection Errors + * Format: int64 + * @description Total number of connection errors. + * @example 3 + */ + errors?: number; + /** + * Statistics + * @description A map of moving averages for various metrics. + */ + statistics?: { + [key: string]: components["schemas"]["LinkedMovingAverageRecordDTO"]; + } | null; + }; + LogEntries: { + logEntries?: components["schemas"]["LogEntry"][]; + }; + /** + * LogEntry + * @description Represents a log entry from the server. + */ + LogEntry: { + /** + * logNumber + * Format: int64 + * @description Represents the order for the log entry. + */ + logNumber?: number; + /** + * level + * Format: int32 + * @description The level of this log entry + */ + level?: number; + /** + * message + * @description The actual log entry + */ + message?: string; + }; + /** + * LoRa Device Information + * @description Provides detailed information about a LoRa device, including sent and received data statistics and endpoint details. + */ + LoRaDeviceInfoDTO: { + /** + * Device Name + * @description The name of the LoRa device. + * @example LoRaDevice_01 + */ + name?: string; + /** + * Radio Type + * @description Type of radio module used by the LoRa device. + * @example SX1276 + */ + radio?: string; + /** + * Bytes Sent + * Format: int64 + * @description Total number of bytes sent by the LoRa device. + * @example 1048576 + */ + bytesSent?: number; + /** + * Bytes Received + * Format: int64 + * @description Total number of bytes received by the LoRa device. + * @example 2048000 + */ + bytesReceived?: number; + /** + * Packets Sent + * Format: int64 + * @description Total number of packets sent by the LoRa device. + * @example 500 + */ + packetsSent?: number; + /** + * Packets Received + * Format: int64 + * @description Total number of packets received by the LoRa device. + * @example 480 + */ + packetsReceived?: number; + /** + * Endpoint Information List + * @description A list of endpoint information for the device, detailing each endpoint�s status and metrics. + */ + endPointInfoList?: components["schemas"]["LoRaEndPointInfoDTO"][] | null; + }; + /** + * LoRa Endpoint Information + * @description Provides information about a LoRa endpoint, including node ID, RSSI, and queue size. + */ + LoRaEndPointInfoDTO: { + /** + * Node ID + * Format: int32 + * @description Unique identifier for the LoRa node. + * @example 1 + */ + nodeId?: number; + /** + * Last RSSI + * Format: int32 + * @description The most recent Received Signal Strength Indicator (RSSI) value for this endpoint. + * @example -70 + */ + lastRSSI?: number; + /** + * Incoming Queue Size + * Format: int32 + * @description The size of the incoming message queue for this endpoint. + * @example 10 + */ + incomingQueueSize?: number; + /** + * Connection Size + * Format: int32 + * @description The number of active connections for this endpoint. + * @example 5 + */ + connectionSize?: number; + /** + * Last read operation + * Format: int64 + * @description The last time a packet was received + */ + lastRead?: number; + /** + * Last write operation + * Format: int64 + * @description The last time a packet was sent + */ + lastWrite?: number; + } | null; + /** + * LoRa Endpoint Connection Information + * @description Represents connection metrics and information for a LoRa endpoint connection, including signal strength and packet details. + */ + LoRaEndPointConnectionInfoDTO: { + /** + * RSSI + * Format: int64 + * @description Received Signal Strength Indicator (RSSI) for the connection. + * @example -70 + */ + rssi?: number; + /** + * Missed Packets + * Format: int64 + * @description The number of packets that were missed or lost. + * @example 3 + */ + missedPackets?: number; + /** + * Received Packets + * Format: int64 + * @description The total number of packets successfully received. + * @example 500 + */ + receivedPackets?: number; + /** + * Remote Node ID + * Format: int32 + * @description The identifier of the remote node in the connection. + * @example 2 + */ + remoteNodeId?: number; + /** + * Last Packet ID + * Format: int64 + * @description The identifier of the last packet received. + * @example 1000 + */ + lastPacketId?: number; + /** + * Last Read Time + * Format: int64 + * @description The timestamp of the last read operation from this connection. + * @example 1625812345678 + */ + lastReadTime?: number; + /** + * Last Write Time + * Format: int64 + * @description The timestamp of the last write operation to this connection. + * @example 1625812345678 + */ + lastWriteTime?: number; + }; + BaseResponse: Record; + /** + * LoRa Device Configuration Information + * @description Represents configuration information for a LoRa device, including radio details and hardware settings. + */ + LoRaDeviceConfigInfoDTO: { + /** + * Device Name + * @description The name of the LoRa device. + * @example LoRa_Radio_01 + */ + name?: string; + /** + * Radio Type + * @description Type of radio module used by the LoRa device. + * @example rfm95 + */ + radio?: string; + /** + * Chip Select Pin + * Format: int32 + * @description The chip select pin number for the LoRa device. + * @example 10 + */ + cs?: number; + /** + * Interrupt Request Pin + * Format: int32 + * @description The interrupt request (IRQ) pin number for the LoRa device. + * @example 2 + */ + irq?: number; + /** + * Reset Pin + * Format: int32 + * @description The reset pin number for the LoRa device. + * @example 4 + */ + rst?: number; + /** + * Power Level + * Format: int32 + * @description The transmission power level setting for the LoRa device. + * @example 14 + */ + power?: number; + /** + * CAD Timeout + * Format: int32 + * @description The Channel Activity Detection (CAD) timeout in milliseconds. + * @example 100 + */ + cadTimeout?: number; + /** + * Frequency + * Format: float + * @description The operating frequency for the LoRa device in MHz. + * @example 915 + */ + frequency?: number; + }; + TransactionData: { + destinationName?: string; + eventIds?: number[]; + }; + ConsumedMessages: { + destination?: string; + messages?: { + [key: string]: components["schemas"]["MessageDTO"][]; + }; + }; + ConsumedResponse: { + consumedMessages?: components["schemas"]["ConsumedMessages"][]; + }; + /** + * Message + * @description Represents a messaging entity with configurable quality, priority, and metadata attributes. + */ + MessageDTO: { + /** + * Message Identifier + * Format: int64 + * @description The event identifier + */ + identifier?: number; + /** + * Payload + * @description The main payload content of the message, represented as a byte64 string. + * @example VGhpcyBpcyBhIGV4YW1wbGUgZGF0YS4= + */ + payload: string; + /** + * Content Type + * @description The MIME type of the message payload, indicating its format. + * @example application/json + */ + contentType?: string; + /** + * Correlation Data + * Format: byte + * @description Additional data used for correlating messages, provided as a byte array. + * @example WzEsMiwzLDRd + */ + correlationData?: string; + /** + * Expiry Time + * Format: int64 + * @description The expiry time for the message in milliseconds. Default is -1, indicating no expiry. + * @default -1 + * @example 60000 + */ + expiry: number; + /** + * Priority + * Format: int32 + * @description The priority level of the message, ranging from 0 (lowest) to 10 (highest). Default is 4 (normal). + * @default 4 + * @example 4 + */ + priority: number; + /** + * Quality of Service + * Format: int32 + * @description The Quality of Service level for the message: 0 (at most once), 1 (at least once), or 2 (exactly once). + * @default 0 + * @example 1 + */ + qualityOfService: number; + /** + * Creation Date/Time + * Format: date-time + * @description The time the server received this event + */ + creation?: string; + /** + * Message Parameters + * @description A map containing optional key-value pairs associated with the message. + * @example { + * "key1": "value1", + * "key2": 42 + * } + */ + dataMap?: { + [key: string]: Record; + }; + /** + * Event Meta Data + * @description A map of string, string values that the server has added to the event as it was processed + * @example { + * "key1": "value1", + * "key2": 42 + * } + */ + metaData?: { + [key: string]: string; + }; + }; + /** + * Consume Request + * @description Requests the server to respond with any outstanding messages specified by the destination or all if no destination supplied + */ + ConsumeRequestDTO: { + /** + * Destination name + * @description Optional, if supplied gets any messages outstanding for this destination, else all messages pending delivery + * @example topicName + */ + destination?: string; + /** + * Depth + * Format: int32 + * @description The max number of events that should be returned + * @default 10 + * @example 60 + */ + depth: number; + }; + SubscriptionDepth: { + /** Format: int32 */ + depth?: number; + destination?: string; + }; + SubscriptionDepthResponse: { + subscriptionDepths?: components["schemas"]["SubscriptionDepth"][]; + }; + /** + * Publish Request + * @description Represents a request to publish a message to a specified topic with optional retention. + */ + PublishRequestDTO: { + /** + * Destination Topic + * @description The topic to which the message will be published. This should be a valid topic name recognized by the messaging system. + * @example sensor/data + */ + destinationName: string; + message: components["schemas"]["MessageDTO"]; + /** + * Retain Message + * @description Indicates if the message should be retained on the destination. If true, the message will be stored and sent to new subscribers on the topic. + * @default false + * @example false + */ + retain: boolean; + }; + /** @description AsyncMessageDTO represents messages delivered via SSE. */ + AsyncMessageDTO: { + /** + * Message Identifier + * Format: int64 + * @description The event identifier + */ + identifier?: number; + /** + * Payload + * @description The main payload content of the message, represented as a byte64 string. + * @example VGhpcyBpcyBhIGV4YW1wbGUgZGF0YS4= + */ + payload: string; + /** + * Content Type + * @description The MIME type of the message payload, indicating its format. + * @example application/json + */ + contentType?: string; + /** + * Correlation Data + * Format: byte + * @description Additional data used for correlating messages, provided as a byte array. + * @example WzEsMiwzLDRd + */ + correlationData?: string; + /** + * Expiry Time + * Format: int64 + * @description The expiry time for the message in milliseconds. Default is -1, indicating no expiry. + * @default -1 + * @example 60000 + */ + expiry: number; + /** + * Priority + * Format: int32 + * @description The priority level of the message, ranging from 0 (lowest) to 10 (highest). Default is 4 (normal). + * @default 4 + * @example 4 + */ + priority: number; + /** + * Quality of Service + * Format: int32 + * @description The Quality of Service level for the message: 0 (at most once), 1 (at least once), or 2 (exactly once). + * @default 0 + * @example 1 + */ + qualityOfService: number; + /** + * Creation Date/Time + * Format: date-time + * @description The time the server received this event + */ + creation?: string; + /** + * Message Parameters + * @description A map containing optional key-value pairs associated with the message. + * @example { + * "key1": "value1", + * "key2": 42 + * } + */ + dataMap?: { + [key: string]: Record; + }; + /** + * Event Meta Data + * @description A map of string, string values that the server has added to the event as it was processed + * @example { + * "key1": "value1", + * "key2": 42 + * } + */ + metaData?: { + [key: string]: string; + }; + /** + * Destination Name + * @description The complete path for the destination that the event is part of + * @example /folder/topic + */ + destinationName?: string; + }; + /** + * Subscription Request + * @description Represents a request to create a subscription to a specific destination, with optional filtering and message retention. + */ + SubscriptionRequestDTO: { + /** + * Destination Name + * @description The name of the destination (e.g., topic or queue) to which the subscription is bound.Supports MQTT style wild card subscription + * @example sensor/data or /sensor/# + */ + destinationName: string; + /** + * Named Subscription + * @description An optional name for a named subscription, allowing clients to re-use existing subscriptions if provided. + * @example temperatureAlerts + */ + namedSubscription?: string | null; + /** + * Filter Expression + * @description An optional filter expression written in JMS selector syntax to filter messages received by the subscription. + * @example temperature > 25 + */ + filter?: string | null; + /** + * Maximum Queue Depth + * Format: int32 + * @description The maximum number of messages that can be queued for the subscription before new messages are dropped. + * @default 1 + * @example 10 + */ + maxDepth: number | null; + /** + * Transactional subscription + * @description Flag to indicate the subscription is transactional + * @default false + * @example true + */ + transactional: boolean; + /** + * Retain Message + * @description Indicates if messages should be retained on the destination for this subscription, meaning they will be stored and made available to future subscribers. + * @default false + * @example false + */ + retainMessage: boolean | null; + }; + /** + * Schema Post Data + * @description Represents the data required to post a new schema, including the JSON-encoded schema object and its context. + */ + SchemaPostDTO: { + /** + * Schema + * @description A JSON-encoded string representing the schema object to be posted. + * @example {"type":"record","name":"User","fields":[{"name":"id","type":"string"}]} + */ + schema?: string; + /** + * Context + * @description The name or context of the schema, identifying the scope or purpose for which it is used. + * @example UserProfile + */ + context?: string; + }; + JsonArray: { + empty?: boolean; + /** Format: int32 */ + asInt?: number; + /** Format: double */ + asDouble?: number; + /** Format: int64 */ + asLong?: number; + asBoolean?: boolean; + asBigInteger?: number; + /** Format: int32 */ + asShort?: number; + /** Format: float */ + asFloat?: number; + /** Format: byte */ + asByte?: string; + asNumber?: number; + asString?: string; + asCharacter?: string; + asBigDecimal?: number; + jsonNull?: boolean; + jsonArray?: boolean; + asJsonArray?: components["schemas"]["JsonArray"]; + asJsonObject?: components["schemas"]["JsonObject"]; + asJsonPrimitive?: components["schemas"]["JsonPrimitive"]; + jsonPrimitive?: boolean; + jsonObject?: boolean; + asJsonNull?: components["schemas"]["JsonNull"]; + }; + JsonNull: { + /** Format: int32 */ + asInt?: number; + /** Format: double */ + asDouble?: number; + /** Format: int64 */ + asLong?: number; + asBoolean?: boolean; + asBigInteger?: number; + /** Format: int32 */ + asShort?: number; + /** Format: float */ + asFloat?: number; + /** Format: byte */ + asByte?: string; + jsonNull?: boolean; + asNumber?: number; + asString?: string; + jsonArray?: boolean; + asJsonArray?: components["schemas"]["JsonArray"]; + asJsonObject?: components["schemas"]["JsonObject"]; + asJsonPrimitive?: components["schemas"]["JsonPrimitive"]; + jsonPrimitive?: boolean; + jsonObject?: boolean; + asCharacter?: string; + asBigDecimal?: number; + asJsonNull?: components["schemas"]["JsonNull"]; + }; + JsonObject: { + empty?: boolean; + /** Format: int32 */ + asInt?: number; + /** Format: double */ + asDouble?: number; + /** Format: int64 */ + asLong?: number; + asBoolean?: boolean; + asBigInteger?: number; + /** Format: int32 */ + asShort?: number; + /** Format: float */ + asFloat?: number; + /** Format: byte */ + asByte?: string; + jsonNull?: boolean; + asNumber?: number; + asString?: string; + jsonArray?: boolean; + asJsonArray?: components["schemas"]["JsonArray"]; + asJsonObject?: components["schemas"]["JsonObject"]; + asJsonPrimitive?: components["schemas"]["JsonPrimitive"]; + jsonPrimitive?: boolean; + jsonObject?: boolean; + asCharacter?: string; + asBigDecimal?: number; + asJsonNull?: components["schemas"]["JsonNull"]; + }; + JsonPrimitive: { + number?: boolean; + /** Format: int32 */ + asInt?: number; + /** Format: double */ + asDouble?: number; + /** Format: int64 */ + asLong?: number; + asBoolean?: boolean; + asBigInteger?: number; + /** Format: int32 */ + asShort?: number; + boolean?: boolean; + /** Format: float */ + asFloat?: number; + string?: boolean; + /** Format: byte */ + asByte?: string; + asNumber?: number; + asString?: string; + asCharacter?: string; + asBigDecimal?: number; + jsonNull?: boolean; + jsonArray?: boolean; + asJsonArray?: components["schemas"]["JsonArray"]; + asJsonObject?: components["schemas"]["JsonObject"]; + asJsonPrimitive?: components["schemas"]["JsonPrimitive"]; + jsonPrimitive?: boolean; + jsonObject?: boolean; + asJsonNull?: components["schemas"]["JsonNull"]; + }; + SchemaConfig: { + versionId?: string; + /** Format: int64 */ + epoch?: number; + name?: string; + description?: string; + documentation?: string; + labels?: { + [key: string]: string; + }; + ancestor?: string; + format?: string; + schemaUrl?: string; + schema?: components["schemas"]["JsonObject"]; + schemaBase64?: string; + /** Format: date-time */ + createdAt?: string; + /** Format: date-time */ + modifiedAt?: string; + /** Format: date-time */ + notBefore?: string; + /** Format: date-time */ + expiresAfter?: string; + version?: string; + source?: string; + mimeType?: string; + title?: string; + comments?: string; + uniqueId?: string; + matchExpression?: string; + resourceType?: string; + interfaceDescription?: string; + }; + StringListResponse: { + data?: string[]; + }; + SchemaMapResponse: { + data?: { + [key: string]: string[]; + }; + }; + CacheInfo: { + enabled?: boolean; + /** Format: int64 */ + lifeTime?: number; + /** Format: int64 */ + scanTime?: number; + /** Format: int64 */ + cacheSize?: number; + /** Format: int64 */ + cacheHits?: number; + /** Format: int64 */ + cacheMisses?: number; + }; + /** @description Message Daemon Configuration DTO */ + MessageDaemonConfigDTO: { + /** + * Format: int32 + * @description Interval for delayed publish in milliseconds + * @example 1000 + */ + delayedPublishInterval?: number; + /** + * Format: int32 + * @description Number of session pipelines + * @example 48 + */ + sessionPipeLines?: number; + /** + * Format: int64 + * @description Transaction expiry in milliseconds + * @example 3600000 + */ + transactionExpiry?: number; + /** + * Format: int64 + * @description Transaction scan interval in milliseconds + * @example 5000 + */ + transactionScan?: number; + /** + * @description Compression algorithm name + * @example None + * @enum {string} + */ + compressionName?: "inflator" | "none"; + /** + * Format: int32 + * @description Minimum size for message compression + * @example 1024 + */ + compressMessageMinSize?: number; + /** + * @description On rollback of events if we maintain the priority or bump the priority of the event + * @example maintain + * @enum {string} + */ + incrementPriorityMethod?: "maintain" | "increment"; + /** + * @description Enable resource statistics + * @example false + */ + enableResourceStatistics?: boolean; + /** + * @description Enable system topics + * @example true + */ + enableSystemTopics?: boolean; + /** + * @description Enable system status topics + * @example true + */ + enableSystemStatusTopics?: boolean; + /** + * @description Enable system topic averages + * @example false + */ + enableSystemTopicAverages?: boolean; + /** + * @description Enable JMX monitoring + * @example false + */ + enableJMX?: boolean; + /** + * @description Enable JMX statistics + * @example false + */ + enableJMXStatistics?: boolean; + /** + * @description Tag metadata for messages + * @example false + */ + tagMetaData?: boolean; + /** + * Format: double + * @description Latitude for the daemon location + * @example 0 + */ + latitude?: number; + /** + * Format: double + * @description Longitude for the daemon location + * @example 0 + */ + longitude?: number; + /** + * @description Send anonymous server usage statistics to Maps Messaging + * @example false + */ + sendAnonymousStatusUpdates?: boolean; + }; + /** + * Status Message + * @description Provides detailed status information about the server, including memory usage, CPU statistics, and thread states. + */ + ServerInfoDTO: { + /** + * @description Server name + * @example maps-server + */ + serverName?: string; + /** + * @description Build version of the server + * @example 3.3.7 + */ + version?: string; + /** + * @description Build date of the server + * @example 2024-10-13 + */ + buildDate?: string; + /** + * Format: int64 + * @description Total memory in bytes + * @example 536870912 + */ + totalMemory?: number; + /** + * Format: int64 + * @description Maximum memory in bytes + * @example 1073741824 + */ + maxMemory?: number; + /** + * Format: int64 + * @description Free memory in bytes + * @example 268435456 + */ + freeMemory?: number; + /** + * Format: int32 + * @description Number of active threads + * @example 120 + */ + numberOfThreads?: number; + /** + * Format: int64 + * @description Time taken to create the status message, in nanoseconds + * @example 1000000 + */ + timeToCreateNano?: number; + /** + * Format: int64 + * @description Server uptime in milliseconds + * @example 123456789 + */ + uptime?: number; + /** + * Format: int64 + * @description Total connections count + * @example 150 + */ + connections?: number; + /** + * Format: int64 + * @description Total destinations count + * @example 30 + */ + destinations?: number; + /** + * Format: int64 + * @description CPU time in nanoseconds + * @example 1234567890 + */ + cpuTime?: number; + /** + * Format: float + * @description CPU usage percentage + * @example 12.5 + */ + cpuPercent?: number; + /** + * Format: int64 + * @description Storage size in bytes + * @example 104857600 + */ + storageSize?: number; + /** + * @description Map of thread states and their counts + * @example { + * "RUNNABLE": 50, + * "WAITING": 10 + * } + */ + threadState?: { + [key: string]: number; + }; + }; + /** + * Server Statistics + * @description Contains various metrics and statistics for server performance, including message rates, connection counts, and data throughput. + */ + ServerStatisticsDTO: { + /** + * Format: int64 + * @description Total packets sent + * @example 1024 + */ + packetsSent?: number; + /** + * Format: int64 + * @description Total packets received + * @example 2048 + */ + packetsReceived?: number; + /** + * Format: int64 + * @description Total read bytes + * @example 5242880 + */ + totalReadBytes?: number; + /** + * Format: int64 + * @description Total write bytes + * @example 4194304 + */ + totalWriteBytes?: number; + /** + * Format: int64 + * @description Total connections + * @example 150 + */ + totalConnections?: number; + /** + * Format: int64 + * @description Total disconnections + * @example 145 + */ + totalDisconnections?: number; + /** + * Format: int64 + * @description Total messages with no interest + * @example 10 + */ + totalNoInterestMessages?: number; + /** + * Format: int64 + * @description Total subscribed messages + * @example 5000 + */ + totalSubscribedMessages?: number; + /** + * Format: int64 + * @description Total published messages + * @example 6000 + */ + totalPublishedMessages?: number; + /** + * Format: int64 + * @description Total retrieved messages + * @example 2500 + */ + totalRetrievedMessages?: number; + /** + * Format: int64 + * @description Total expired messages + * @example 20 + */ + totalExpiredMessages?: number; + /** + * Format: int64 + * @description Total delivered messages + * @example 4000 + */ + totalDeliveredMessages?: number; + /** + * Format: float + * @description Published messages per second + * @example 50 + */ + publishedPerSecond?: number; + /** + * Format: float + * @description Subscribed messages per second + * @example 45 + */ + subscribedPerSecond?: number; + /** + * Format: float + * @description No interest messages per second + * @example 5 + */ + noInterestPerSecond?: number; + /** + * Format: float + * @description Delivered messages per second + * @example 60 + */ + deliveredPerSecond?: number; + /** + * Format: float + * @description Retrieved messages per second + * @example 30 + */ + retrievedPerSecond?: number; + /** + * @description Statistics map + * @example {"latency": {"name": "latency", "unitName": "ms", "current": 10, ...}} + */ + stats?: { + [key: string]: components["schemas"]["LinkedMovingAverageRecordDTO"]; + }; + }; + ServerHealthStateResponse: { + status?: string; + /** Format: int32 */ + issueCount?: number; + }; + /** + * SubSystem Status + * @description Represents the status of a subsystem in the messaging server. + */ + SubSystemStatusDTO: { + /** + * Name + * @description The name of the subsystem. + * @example Messaging Service + */ + name: string; + /** + * Comment + * @description A comment or additional information about the subsystem's status. + * @example System is operating normally. + */ + comment?: string; + /** + * Status Enum + * @description Enumeration of possible statuses for a subsystem. + * @example OK + * @enum {string} + */ + status: "OK" | "STOPPED" | "PAUSED" | "DISABLED" | "WARN" | "ERROR"; + }; + ServerAction: { + state?: string; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + getUserSession: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Returns if there have been updates */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UpdateCheckResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + login: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["LoginRequest"]; + }; + }; + responses: { + /** @description Login successful or not required */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LoginResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + logout: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Logout successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request or invalid session state */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + refreshToken: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Refresh was successful or not required */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LoginResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getHealth: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Health status returned */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + checkForUpdates: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Returns if there have been updates */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UpdateCheckResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getName: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get server name was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getPing: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Server is operational */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAuthConfiguration: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get auth configuration was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["AuthManagerConfigDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + updateAuthConfiguration: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["AuthManagerConfigDTO"]; + }; + }; + responses: { + /** @description Update authetication was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description No change detected */ + 304: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + checkAccess: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["AclCheckRequestDTO"]; + }; + }; + responses: { + /** @description ACL check was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["AclCheckResponseDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAuthorisationStaticInfo: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get permissions was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["AuthorisationConfigDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getGroupAcl: { + parameters: { + query?: never; + header?: never; + path: { + groupUuid: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Group ACL retrieval was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["IdentityAclViewDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getIdentityAcl: { + parameters: { + query?: never; + header?: never; + path: { + userUuid: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Identity ACL retrieval was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["IdentityAclViewDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getResourceAcl: { + parameters: { + query: { + /** + * @description Resource type + * @example TOPIC + */ + resourceType: string; + /** + * @description Resource key or identifier + * @example /sensors/room1/temp + */ + resourceKey: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description ACL retrieval was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["AclResourceViewDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + updateResourceAcl: { + parameters: { + query?: { + batchTimeoutMillis?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["AclResourceUpdateRequestDTO"]; + }; + }; + responses: { + /** @description ACL update was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["AclResourceViewDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAllGroups: { + parameters: { + query?: { + /** @description Optional filter string */ + filter?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get all groups was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["GroupDTO"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + addGroup: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "*/*": string; + }; + }; + responses: { + /** @description Add group was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + addUserToGroup: { + parameters: { + query?: never; + header?: never; + path: { + groupUuid: string; + userUuid: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Add group to user was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + removeUserFromGroup: { + parameters: { + query?: never; + header?: never; + path: { + groupUuid: string; + userUuid: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Remove user from group was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getGroupById: { + parameters: { + query?: never; + header?: never; + path: { + groupUuid: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get groupby id was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["GroupDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteGroup: { + parameters: { + query?: never; + header?: never; + path: { + groupUuid: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Delete group was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAllLockedUsers: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get all users was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LockStatus"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + unlockUser: { + parameters: { + query?: never; + header?: never; + path: { + userUuid: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Unlock was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAllUsers: { + parameters: { + query?: { + /** @description Optional filter string */ + filter?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get all users was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserDTO"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + addUser: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "*/*": components["schemas"]["NewUserDTO"]; + }; + }; + responses: { + /** @description Add user was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + changeUserPassword: { + parameters: { + query?: never; + header?: never; + path: { + userUuid: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["ChangePasswordDTO"]; + }; + }; + responses: { + /** @description Password changed */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getUser: { + parameters: { + query?: never; + header?: never; + path: { + userUuid: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get user was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteUser: { + parameters: { + query?: never; + header?: never; + path: { + userUuid: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Delete user was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getConnectionDetails: { + parameters: { + query?: never; + header?: never; + path: { + connectionId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get specific connection details was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["EndPointDetailsDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Connection not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + closeSpecificConnection: { + parameters: { + query?: never; + header?: never; + path: { + connectionId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Close connection was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Connection not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAllConnections: { + parameters: { + query?: { + /** @description Optional filter string */ + filter?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get all connections was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["EndPointSummaryDTO"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAllDestinations: { + parameters: { + query?: { + /** @description An optional filter string for selecting specific destinations. The filter should be a valid expression that complies with the selector syntax. */ + filter?: string; + /** @description The maximum number of destinations to return in the response. A default value is used if this parameter is not provided. */ + size?: number; + /** @description The attribute by which the list of destinations should be sorted before returning. Possible values include Name, Published, Delivered, Stored, Pending, Delayed, and Expired. */ + sortBy?: + | "Name" + | "Published" + | "Delivered" + | "Stored" + | "Pending" + | "Delayed" + | "Expired"; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get all destinations was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DestinationDTO"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getDestinationDetails: { + parameters: { + query: { + /** @description The name of the destination for which details are requested */ + destinationName: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get destination details was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DestinationDetailsResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Destination not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getDiscoveryAgentConfiguration: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get discobvery config was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DiscoveryManagerConfigDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + updateDiscoveryAgentConfiguration: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["DiscoveryManagerConfigDTO"]; + }; + }; + responses: { + /** @description Update discovery configuration was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description No changes made */ + 304: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAllDiscoveredServers: { + parameters: { + query?: { + /** @description Optional filter string */ + filter?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Update discovery configuration was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DiscoveredServersDTO"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + handleDiscoveryActionRequest: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** @description Requested action to apply to all inter-server connections */ + requestBody: { + content: { + "application/json": components["schemas"]["RequestedAction"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getDeviceConfig: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get hardware config was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeviceManagerConfigDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + updateDeviceConfig: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "*/*": components["schemas"]["DeviceManagerConfigDTO"]; + }; + }; + responses: { + /** @description Update device config was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description No changes made */ + 304: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAllDiscoveredDevices: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get all discovered devices was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeviceInfoDTO"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + scanForDevices: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Scan for devices was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getByNameIntegration: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["IntegrationInfoDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Integration name was not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + handleIntegrationActionRequest: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + /** @description Requested action to apply to inter-server connection */ + requestBody: { + content: { + "application/json": components["schemas"]["RequestedAction"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getIntegrationConnection: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["EndPointSummaryDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Integration name was not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getIntegrationStatus: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["IntegrationStatusDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAllIntegrationStatus: { + parameters: { + query?: { + /** @description Optional filter string */ + filter?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["IntegrationListStatus"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAllIntegrations: { + parameters: { + query?: { + /** @description Optional filter string */ + filter?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["IntegrationDetailResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + handleIntegrationActionRequest_1: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** @description Requested action to apply to all inter-server connections */ + requestBody: { + content: { + "application/json": components["schemas"]["RequestedAction"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getEndPoint: { + parameters: { + query?: never; + header?: never; + path: { + endpoint: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["InterfaceInfoDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Endpoint not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + updateInterfaceConfiguration: { + parameters: { + query?: never; + header?: never; + path: { + endpoint: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "*/*": components["schemas"]["EndPointServerConfigDTO"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Endpoint not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + manageSpecificInterface: { + parameters: { + query?: never; + header?: never; + path: { + endpoint: string; + }; + cookie?: never; + }; + /** @description Requested action to apply to all inter-server connections */ + requestBody: { + content: { + "application/json": components["schemas"]["RequestedAction"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getEndPointConnections: { + parameters: { + query?: never; + header?: never; + path: { + endpoint: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["EndPointSummaryDTO"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getInterfaceStatus: { + parameters: { + query?: never; + header?: never; + path: { + endpoint: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["InterfaceStatusDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAllInterfaceStatus: { + parameters: { + query?: { + /** @description Optional filter string */ + filter?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["InterfaceStatusDTO"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAllInterfaces: { + parameters: { + query?: { + /** @description Optional filter string */ + filter?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["InterfaceInfoDTO"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + handleInterfaceActionRequest: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** @description Requested action to apply to all inter-server connections */ + requestBody: { + content: { + "application/json": components["schemas"]["RequestedAction"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getLogEntries: { + parameters: { + query?: { + filter?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LogEntries"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + requestSseToken: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description String token to use to access the log SSE */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + text: unknown; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + streamLogs: { + parameters: { + query?: { + filter?: string; + }; + header?: never; + path: { + token: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description SSE stream of LogEntry events */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/event-stream": components["schemas"]["LogEntry"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAllLoRaDevices: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LoRaDeviceInfoDTO"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getLoRaDevice: { + parameters: { + query?: never; + header?: never; + path: { + deviceName: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LoRaDeviceInfoDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description LoRa device not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getLoRaEndPointConnections: { + parameters: { + query?: never; + header?: never; + path: { + deviceName: string; + nodeId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LoRaEndPointConnectionInfoDTO"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAllLoRaDeviceConfigs: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LoRaDeviceConfigInfoDTO"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + addLoRaDeviceConfig: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["LoRaDeviceConfigInfoDTO"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["BaseResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Device not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getLoRaDeviceConfig: { + parameters: { + query?: never; + header?: never; + path: { + deviceName: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LoRaDeviceConfigInfoDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Device not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteLoRaDeviceConfig: { + parameters: { + query?: never; + header?: never; + path: { + deviceName: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Device not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + abortMessages: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["TransactionData"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + commitMessages: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["TransactionData"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + consumeMessages: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["ConsumeRequestDTO"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ConsumedResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getSubscriptionDepth: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["ConsumeRequestDTO"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SubscriptionDepthResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + publishMessage: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["PublishRequestDTO"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + requestSseMessageToken: { + parameters: { + query?: { + destination?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description String token to use to access the log SSE */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + text: unknown; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + subscribeSSE: { + parameters: { + query: { + destinationName: string; + namedSubscription?: string | null; + filter?: string | null; + maxDepth?: number | null; + retainMessage?: boolean | null; + }; + header?: never; + path: { + token: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["AsyncMessageDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + subscribeToTopic: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["SubscriptionRequestDTO"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + unsubscribeToTopic: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["SubscriptionRequestDTO"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getModel: { + parameters: { + query?: never; + header?: never; + path: { + modelName: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Model content */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Model not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + uploadModel: { + parameters: { + query?: never; + header?: never; + path: { + modelName: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + file?: Record; + }; + }; + }; + responses: { + /** @description Model content */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Model not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteModel: { + parameters: { + query?: never; + header?: never; + path: { + modelName: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Model deleted successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StatusResponse"]; + }; + }; + }; + }; + modelExists: { + parameters: { + query?: never; + header?: never; + path: { + modelName: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Model exists */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Model not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + listModels: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description List of model names */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description ML not supported */ + 406: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAllSchemas: { + parameters: { + query?: { + filter?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SchemaConfig"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + addSchema: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["SchemaPostDTO"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteAllSchemas: { + parameters: { + query?: { + filter?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getSchemaById: { + parameters: { + query?: never; + header?: never; + path: { + schemaId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + deleteSchemaById: { + parameters: { + query?: never; + header?: never; + path: { + schemaId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Schema not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getKnownFormats: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StringListResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getLinkFormat: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getSchemaByContext: { + parameters: { + query?: never; + header?: never; + path: { + context: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getSchemaByType: { + parameters: { + query?: never; + header?: never; + path: { + type: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getSchemaImplById: { + parameters: { + query?: never; + header?: never; + path: { + schemaId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": unknown; + }; + }; + /** @description Not Modified */ + 304: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getSchemaMapping: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SchemaMapResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getCacheInformation: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CacheInfo"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + clearCacheInformation: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Cache cleared successfully (no content) */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getServerConfig: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageDaemonConfigDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + updateServerConfig: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "*/*": components["schemas"]["MessageDaemonConfigDTO"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getBuildInfo: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServerInfoDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getStats: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServerStatisticsDTO"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getServerHealthSummary: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServerHealthStateResponse"]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getServerStatus: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SubSystemStatusDTO"][]; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + serverAction: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** @description Requested action to apply to all inter-server connections */ + requestBody: { + content: { + "application/json": components["schemas"]["RequestedAction"]; + }; + }; + responses: { + /** @description Operation was successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Invalid credentials or unauthorized access */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description User is not authorised to access the resource */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getExternalGrammar: { + parameters: { + query?: never; + header?: never; + path: { + path: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description default response */ + default: { + headers: { + [name: string]: unknown; + }; + content: { + "application/xml": unknown; + }; + }; + }; + }; + getWadl: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description default response */ + default: { + headers: { + [name: string]: unknown; + }; + content: { + "application/vnd.sun.wadl+xml": unknown; + "application/xml": unknown; + }; + }; + }; + }; +} diff --git a/src/components/groups/add-user-dialog/add-user-dialog.tsx b/src/components/groups/add-user-dialog/add-user-dialog.tsx new file mode 100644 index 0000000..04be7fd --- /dev/null +++ b/src/components/groups/add-user-dialog/add-user-dialog.tsx @@ -0,0 +1,145 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { useAddUserToGroup, useGroup } from "@/components/groups/hooks"; +import type { GroupId } from "@/components/groups/models"; +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { Field, FieldError, FieldGroup } from "@/components/ui/field"; +import { useForm } from "@tanstack/react-form"; +import { type FunctionComponent, useState } from "react"; +import * as z from "zod"; +import { SelectedUsers } from "./selected-users"; +import { UserSearch } from "./user-search"; + +const formSchema = z.object({ + users: z + .array( + z.object({ + uniqueId: z.string(), + username: z.string(), + }), + ) + .min(1, "Select at least one user"), +}); + +type AddUsersFormValues = z.infer; + +interface AddUserDialogProps { + groupId: GroupId; +} + +export const AddUserDialog: FunctionComponent = ({ + groupId, +}) => { + const [open, setOpen] = useState(false); + + const { data: group } = useGroup(groupId); + + const { mutate } = useAddUserToGroup(); + + const form = useForm({ + defaultValues: { + users: [] as AddUsersFormValues["users"], + }, + validators: { + onSubmit: formSchema, + }, + onSubmit: async ({ value }) => { + const results = await Promise.allSettled( + value.users.map(({ uniqueId }) => + mutate({ + params: { path: { groupUuid: groupId, userUuid: uniqueId } }, + }), + ), + ); + if (results.every((r) => r.status === "fulfilled")) { + setOpen(false); + form.reset(); + } + }, + }); + + return ( + +
{ + e.preventDefault(); + form.handleSubmit(); + }} + > + + + + + + Add Users to {group?.name} + + Search and add users to the group. Click save when you're + done. + + + + { + const isInvalid = + field.state.meta.isTouched && !field.state.meta.isValid; + return ( + + + + {isInvalid && ( + + )} + + ); + }} + /> + + + + + + + + +
+
+ ); +}; diff --git a/src/components/groups/add-user-dialog/selected-users.tsx b/src/components/groups/add-user-dialog/selected-users.tsx new file mode 100644 index 0000000..7758c33 --- /dev/null +++ b/src/components/groups/add-user-dialog/selected-users.tsx @@ -0,0 +1,107 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { apiClient } from "@/api/api-client"; +import type { GroupId } from "@/components/groups/models"; +import { Badge } from "@/components/ui/badge"; +import { ScrollArea } from "@/components/ui/scroll-area"; +import type { MinimalUser } from "@/components/users/models"; +import { cn } from "@/lib/utils"; +import { useMutationState } from "@tanstack/react-query"; +import { X } from "lucide-react"; +import type { FunctionComponent } from "react"; + +interface SelectedUsersProps { + value: MinimalUser[]; + handleChange: (updater: (prev: MinimalUser[]) => MinimalUser[]) => void; + groupId: GroupId; +} + +const UserBadge = ({ + user, + removeUser, + groupId, +}: { + user: MinimalUser; + removeUser: (uuid: string) => void; + groupId: GroupId; +}) => { + const status = useMutationState({ + filters: { + mutationKey: apiClient.queryOptions( + "post", + "/api/v1/auth/groups/{groupUuid}/{userUuid}", + { + params: { + path: { + groupUuid: groupId, + userUuid: user.uniqueId, + }, + }, + }, + ).queryKey, + }, + select: (mutation) => mutation.state.status, + })[0]; + + return ( + + {user.username} + {!status && ( + + )} + + ); +}; + +export const SelectedUsers: FunctionComponent = ({ + value, + handleChange, + groupId, +}) => { + const removeUser = (uuid: string) => { + handleChange((prev) => prev.filter((u) => u.uniqueId !== uuid)); + }; + + return ( + +
+ {value.map((user) => ( + + ))} +
+
+ ); +}; diff --git a/src/components/groups/add-user-dialog/user-search.tsx b/src/components/groups/add-user-dialog/user-search.tsx new file mode 100644 index 0000000..d6523c1 --- /dev/null +++ b/src/components/groups/add-user-dialog/user-search.tsx @@ -0,0 +1,113 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { apiClient } from "@/api/api-client"; +import { + Command, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, +} from "@/components/ui/command"; +import { ScrollArea } from "@/components/ui/scroll-area"; +import type { MinimalUser } from "@/components/users/models"; +import { useDebouncedValue } from "@/hooks/use-debounced-value"; +import { cn } from "@/lib/utils"; +import { useQuery } from "@tanstack/react-query"; +import { Check } from "lucide-react"; +import { type FunctionComponent, useState } from "react"; + +interface UserSearchProps { + value: MinimalUser[]; + handleChange: (updater: (prev: MinimalUser[]) => MinimalUser[]) => void; +} + +export const UserSearch: FunctionComponent = ({ + value, + handleChange, +}) => { + const [search, setSearch] = useState(""); + + const debouncedSearch = useDebouncedValue(search, 300); + const { data: users = [], isFetching } = useQuery({ + ...apiClient.queryOptions("get", "/api/v1/auth/users", { + params: { query: { filter: debouncedSearch } }, + }), + enabled: debouncedSearch.length > 0, + }); + + const toggleUser = (user: MinimalUser) => { + handleChange((prev) => + prev.some((u) => u.uniqueId === user.uniqueId) + ? prev.filter((u) => u.uniqueId !== user.uniqueId) + : [...prev, user], + ); + }; + + return ( + + + + {isFetching && ( +
Searching…
+ )} + + {!isFetching && users.length === 0 && debouncedSearch.length > 0 && ( + No users found. + )} + {users.length > 0 && ( + + + {users.map((user) => { + const isSelected = value.some( + (u) => u.uniqueId === user.uniqueId, + ); + + return ( + + toggleUser({ + uniqueId: user.uniqueId, + username: user.username, + }) + } + className="flex items-center justify-between" + > +
+ {user.username} +
+ + +
+ ); + })} +
+
+ )} +
+ ); +}; diff --git a/src/components/groups/create-group-dialog.tsx b/src/components/groups/create-group-dialog.tsx new file mode 100644 index 0000000..1615499 --- /dev/null +++ b/src/components/groups/create-group-dialog.tsx @@ -0,0 +1,137 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { useCreateGroup } from "@/components/groups/hooks"; +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { + Field, + FieldError, + FieldGroup, + FieldLabel, +} from "@/components/ui/field"; +import { Input } from "@/components/ui/input"; +import { useForm } from "@tanstack/react-form"; +import { useState } from "react"; +import { toast } from "sonner"; +import * as z from "zod"; + +const formSchema = z.object({ + name: z + .string() + .min(3, "Group name must be at least 3 characters.") + .max(64, "Group name must be at most 64 characters."), +}); + +export const CreateGroupDialog = () => { + const [open, setOpen] = useState(false); + const { mutate } = useCreateGroup(); + + const form = useForm({ + defaultValues: { + name: "", + }, + validators: { + onSubmit: formSchema, + }, + onSubmit: async ({ value }) => { + mutate( + { + body: value.name, + }, + { + onSuccess: () => { + toast.success(`Group ${value.name} created successfully`); + setOpen(false); + form.reset(); + }, + onError: (error) => + toast.error(`Error creating group: ${error}`), + }, + ); + }, + }); + + return ( + +
{ + e.preventDefault(); + form.handleSubmit(); + }} + > + + + + + + Create Group + + Create a new group here. Click save when you're done. + + + + { + const isInvalid = + field.state.meta.isTouched && !field.state.meta.isValid; + return ( + + Name + field.handleChange(e.target.value)} + aria-invalid={isInvalid} + autoComplete="off" + /> + {isInvalid && ( + + )} + + ); + }} + /> + + + + + + + + +
+
+ ); +}; diff --git a/src/components/groups/group-details-card.tsx b/src/components/groups/group-details-card.tsx new file mode 100644 index 0000000..8ecd63a --- /dev/null +++ b/src/components/groups/group-details-card.tsx @@ -0,0 +1,61 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { GroupUsersTable } from "@/components/groups/group-users-table"; +import { useDeleteGroup, useGroup } from "@/components/groups/hooks"; +import type { Group } from "@/components/groups/models"; +import { Button } from "@/components/ui/button"; +import { + Card, + CardAction, + CardContent, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { type FunctionComponent } from "react"; + +interface GroupDetailsCardProps { + groupId: Group["uniqueId"]; +} + +export const GroupDetailsCard: FunctionComponent = ({ + groupId, +}) => { + const { data: group } = useGroup(groupId); + const { mutate: deleteGroup } = useDeleteGroup(); + + return ( + + + {group?.name} + + + + + + + + + ); +}; diff --git a/src/components/groups/group-table-row-actions.tsx b/src/components/groups/group-table-row-actions.tsx new file mode 100644 index 0000000..1d4bb67 --- /dev/null +++ b/src/components/groups/group-table-row-actions.tsx @@ -0,0 +1,77 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { useDeleteGroup } from "@/components/groups/hooks"; +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { Link } from "@tanstack/react-router"; +import { MoreHorizontal } from "lucide-react"; +import { type FunctionComponent } from "react"; +import type { Group } from "./models"; + +interface GroupTableRowActionsProps { + groupId: Group["uniqueId"]; +} + +export const GroupTableRowActions: FunctionComponent< + GroupTableRowActionsProps +> = ({ groupId }) => { + const { mutate: deleteGroup } = useDeleteGroup(); + + return ( + <> + + + + + + + + View Details + + + + + + deleteGroup({ params: { path: { groupUuid: groupId } } }) + } + className="text-destructive hover:bg-destructive hover:text-destructive-foreground" + > + Delete Group + + + + + + ); +}; diff --git a/src/components/groups/group-table.tsx b/src/components/groups/group-table.tsx new file mode 100644 index 0000000..1fe1d62 --- /dev/null +++ b/src/components/groups/group-table.tsx @@ -0,0 +1,214 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CreateGroupDialog } from "@/components/groups/create-group-dialog"; +import { GroupTableRowActions } from "@/components/groups/group-table-row-actions"; +import type { Group } from "@/components/groups/models"; +import { Button } from "@/components/ui/button"; +import { + Empty, + EmptyContent, + EmptyDescription, + EmptyHeader, + EmptyMedia, + EmptyTitle, +} from "@/components/ui/empty"; +import { Input } from "@/components/ui/input"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { Link } from "@tanstack/react-router"; +import { + type ColumnDef, + type ColumnFiltersState, + flexRender, + getCoreRowModel, + getFilteredRowModel, + useReactTable, +} from "@tanstack/react-table"; +import { UserX } from "lucide-react"; +import { type FunctionComponent, useState } from "react"; + +interface GroupTableProps { + groups?: Group[]; +} + +const columns: ColumnDef[] = [ + // { + // id: "select", + // header: ({ table }) => ( + // table.toggleAllPageRowsSelected(!!value) } + // aria-label="Select all" + // /> + // ), + // cell: ({ row }) => ( + // row.toggleSelected(!!value) } + // aria-label="Select row" + // /> + // ), + // }, + { + id: "name", + header: "Name", + cell: ({ row }) => ( + + ), + }, + { + header: "Users", + cell: ({ row }) => (row.original.usersList ?? []).length, + }, + { + id: "actions", + cell: ({ row }) => , + size: 30, + }, +]; + +export const GroupTable: FunctionComponent = ({ groups }) => { + const [columnFilters, setColumnFilters] = useState([]); + // const [ rowSelection, setRowSelection ] = useState({}); + + const table = useReactTable({ + data: groups ?? [], + columns, + getCoreRowModel: getCoreRowModel(), + onColumnFiltersChange: setColumnFilters, + getFilteredRowModel: getFilteredRowModel(), + // onRowSelectionChange: setRowSelection, + state: { + columnFilters, + // rowSelection + }, + }); + + if ((groups ?? []).length === 0) { + return ( + + + + + + No Groups Yet + + You haven't created any groups yet. Get started by creating + your first group. + + + + + + + ); + } + return ( +
+
+ + table.getColumn("name")?.setFilterValue(event.target.value) + } + className="max-w-sm" + /> + +
+
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext(), + )} + + ); + })} + + ))} + + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender( + cell.column.columnDef.cell, + cell.getContext(), + )} + + ))} + + )) + ) : ( + + + No results. + + + )} + +
+
+
+ ); +}; diff --git a/src/components/groups/group-users-table.tsx b/src/components/groups/group-users-table.tsx new file mode 100644 index 0000000..12635bb --- /dev/null +++ b/src/components/groups/group-users-table.tsx @@ -0,0 +1,204 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { AddUserDialog } from "@/components/groups/add-user-dialog/add-user-dialog"; +import { useRemoveUserFromGroup } from "@/components/groups/hooks"; +import { Button } from "@/components/ui/button"; +import { Checkbox } from "@/components/ui/checkbox"; +import { Input } from "@/components/ui/input"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { Link } from "@tanstack/react-router"; +import { + type ColumnDef, + type ColumnFiltersState, + flexRender, + getCoreRowModel, + getFilteredRowModel, + useReactTable, +} from "@tanstack/react-table"; +import { type FunctionComponent, useState } from "react"; +import type { Group, GroupId } from "./models"; + +interface GroupUserTableProps { + users: NonNullable; + groupId: GroupId; +} + +const columns: ColumnDef[] = [ + { + id: "select", + header: ({ table }) => ( + table.toggleAllPageRowsSelected(!!value)} + aria-label="Select all" + /> + ), + cell: ({ row }) => ( + row.toggleSelected(!!value)} + aria-label="Select row" + /> + ), + }, + { + id: "username", + header: "Username", + cell: ({ row }) => ( + + ), + }, +]; + +export const GroupUsersTable: FunctionComponent = ({ + groupId, + users, +}) => { + const [columnFilters, setColumnFilters] = useState([]); + const [rowSelection, setRowSelection] = useState({}); + + const table = useReactTable({ + data: users, + columns, + getCoreRowModel: getCoreRowModel(), + onColumnFiltersChange: setColumnFilters, + getFilteredRowModel: getFilteredRowModel(), + onRowSelectionChange: setRowSelection, + state: { + columnFilters, + rowSelection, + }, + }); + + const { mutate: removeUserFromGroup } = useRemoveUserFromGroup(); + + const removeUsers = () => { + table.getFilteredSelectedRowModel().rows.forEach((row) => + removeUserFromGroup({ + params: { + path: { + userUuid: row.original.uniqueId, + groupUuid: groupId, + }, + }, + }), + ); + table.setRowSelection({}); + }; + + return ( +
+
+ + table.getColumn("username")?.setFilterValue(event.target.value) + } + className="max-w-sm" + /> + + {table.getFilteredSelectedRowModel().rows.length > 0 ? ( +
+
+ {table.getFilteredSelectedRowModel().rows.length > 1 + ? `${table.getFilteredSelectedRowModel().rows.length} users selected.` + : "1 user selected."} +
+ +
+ ) : ( + + )} +
+
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext(), + )} + + ); + })} + + ))} + + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender( + cell.column.columnDef.cell, + cell.getContext(), + )} + + ))} + + )) + ) : ( + + + {columnFilters.length > 0 + ? "No results." + : "No users in group"} + + + )} + +
+
+
+ ); +}; diff --git a/src/components/groups/hooks.ts b/src/components/groups/hooks.ts new file mode 100644 index 0000000..eff8301 --- /dev/null +++ b/src/components/groups/hooks.ts @@ -0,0 +1,98 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { apiClient } from "@/api/api-client"; +import { queryClient } from "@/api/query-client"; +import type { operations } from "@/api/spec"; + +export function useGroups({ nameFilter }: { nameFilter?: string } = {}) { + return apiClient.useQuery("get", "/api/v1/auth/groups", { + query: { + filter: nameFilter, + }, + }); +} + +export const useGroup = ( + groupUuid: operations["getGroupById"]["parameters"]["path"]["groupUuid"], +) => { + return apiClient.useQuery("get", "/api/v1/auth/groups/{groupUuid}", { + params: { path: { groupUuid } }, + }); +}; + +export const useCreateGroup = () => { + return apiClient.useMutation("post", "/api/v1/auth/groups", { + onSettled: () => + queryClient.invalidateQueries( + apiClient.queryOptions("get", "/api/v1/auth/groups"), + ), + }); +}; + +export const useDeleteGroup = () => { + return apiClient.useMutation("delete", "/api/v1/auth/groups/{groupUuid}", { + onSettled: () => + queryClient.invalidateQueries( + apiClient.queryOptions("get", "/api/v1/auth/groups"), + ), + }); +}; + +export const useAddUserToGroup = () => { + return apiClient.useMutation( + "post", + "/api/v1/auth/groups/{groupUuid}/{userUuid}", + { + onSettled: (_data, _error, variables) => { + const { groupUuid, userUuid } = variables.params.path; + queryClient.invalidateQueries( + apiClient.queryOptions("get", "/api/v1/auth/groups/{groupUuid}", { + params: { path: { groupUuid } }, + }), + ); + queryClient.invalidateQueries( + apiClient.queryOptions("get", "/api/v1/auth/users/{userUuid}", { + params: { path: { userUuid } }, + }), + ); + }, + }, + ); +}; + +export const useRemoveUserFromGroup = () => { + return apiClient.useMutation( + "delete", + "/api/v1/auth/groups/{groupUuid}/{userUuid}", + { + onSettled: (_data, _error, variables) => { + const { groupUuid, userUuid } = variables.params.path; + queryClient.invalidateQueries( + apiClient.queryOptions("get", "/api/v1/auth/groups/{groupUuid}", { + params: { path: { groupUuid } }, + }), + ); + queryClient.invalidateQueries( + apiClient.queryOptions("get", "/api/v1/auth/users/{userUuid}", { + params: { path: { userUuid } }, + }), + ); + }, + }, + ); +}; diff --git a/src/components/groups/models.ts b/src/components/groups/models.ts new file mode 100644 index 0000000..60a0a2a --- /dev/null +++ b/src/components/groups/models.ts @@ -0,0 +1,24 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { components } from "@/api/spec"; + +export type Group = components["schemas"]["GroupDTO"]; + +export type MinimalGroup = Pick; + +export type GroupId = Group["uniqueId"]; diff --git a/src/components/login-form.tsx b/src/components/login-form.tsx new file mode 100644 index 0000000..25de7f0 --- /dev/null +++ b/src/components/login-form.tsx @@ -0,0 +1,130 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; +import { Field, FieldError, FieldGroup, FieldLabel } from "@/components/ui/field"; +import { Input } from "@/components/ui/input"; +import { useAuth } from "@/hooks/useAuth"; +import { useForm } from "@tanstack/react-form"; +import { toast } from "sonner"; +import * as z from "zod"; + +const formSchema = z.object({ + username: z.string().min(1, "Username is required"), + password: z.string().min(1, "Password is required"), +}); + +export const LoginForm = () => { + const { login } = useAuth(); + const form = useForm({ + defaultValues: { + username: "", + password: "", + }, + validators: { + onSubmit: formSchema, + }, + onSubmit: async ({ value }) => { + try { + await login(value); + } catch { + toast("Login failed. Please check your credentials."); + } + }, + }); + + return ( +
{ + e.preventDefault(); + form.handleSubmit(); + }} + > + + + Login + + Enter your username below to login to your account + + + + + { + const isInvalid = + field.state.meta.isTouched && !field.state.meta.isValid; + return ( + + Username + field.handleChange(e.target.value)} + aria-invalid={isInvalid} + autoComplete="off" + required + /> + {isInvalid && ( + + )} + + ); + }} + /> + { + const isInvalid = + field.state.meta.isTouched && !field.state.meta.isValid; + return ( + + Password + field.handleChange(e.target.value)} + aria-invalid={isInvalid} + autoComplete="off" + type="password" + placeholder="••••••••" + required + /> + {isInvalid && ( + + )} + + ); + }} + /> + + + + + + +
+ ); +}; diff --git a/src/components/logo.tsx b/src/components/logo.tsx new file mode 100644 index 0000000..204e83a --- /dev/null +++ b/src/components/logo.tsx @@ -0,0 +1,35 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import iconSVG from "/icon.svg"; +import logoSVG from "/logo.svg"; +import { type ComponentProps, type FunctionComponent } from "react"; + +export interface LogoProps extends ComponentProps<"img"> { + icon?: boolean; +} + +export const Logo: FunctionComponent = ({ + icon = false, + className, +}) => ( + MAPS messaging logo +); diff --git a/src/components/navigation/breadcrumbs.tsx b/src/components/navigation/breadcrumbs.tsx new file mode 100644 index 0000000..12945e4 --- /dev/null +++ b/src/components/navigation/breadcrumbs.tsx @@ -0,0 +1,59 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Link } from "@tanstack/react-router"; +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbPage, + BreadcrumbSeparator, +} from "@/components/ui/breadcrumb"; +import { useBreadcrumbs } from "@/hooks/use-breadcrumbs"; +import { useState } from "react"; + +export function Breadcrumbs() { + const breadcrumbs = useBreadcrumbs(); + useState(breadcrumbs); + const lastIndex = breadcrumbs.length - 1; + + return ( + + + {breadcrumbs + .map((crumb, index) => { + const isLast = index === lastIndex; + + return [ + + {isLast ? ( + {crumb.label} + ) : ( + + {crumb.label} + + )} + , + !isLast && , + ]; + }) + .flat()} + + + ); +} diff --git a/src/components/navigation/nav-main.tsx b/src/components/navigation/nav-main.tsx new file mode 100644 index 0000000..9db9d9c --- /dev/null +++ b/src/components/navigation/nav-main.tsx @@ -0,0 +1,100 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ChevronRight, type LucideIcon } from "lucide-react"; + +import { + SidebarGroup, + SidebarMenu, + SidebarMenuAction, + SidebarMenuButton, + SidebarMenuItem, + SidebarMenuSub, + SidebarMenuSubButton, + SidebarMenuSubItem, +} from "@/components/ui/sidebar"; +import { useIsRouteActive } from "@/hooks/use-is-route-active"; +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from "../ui/collapsible"; +import { Link } from "@tanstack/react-router"; + +export function NavMain({ + items, +}: { + items: { + title: string; + url: string; + icon?: LucideIcon; + isActive?: boolean; + items?: { title: string; url: string }[]; + }[]; +}) { + return ( + + + {items.map((item) => { + const isActive = useIsRouteActive(item.url, false); + return ( + + + + + {item.icon && } + {item.title} + + + {item.items?.length ? ( + <> + + + + Toggle + + + + + {item.items?.map((subItem) => { + const isActive = useIsRouteActive(subItem.url, false); + return ( + + + + {subItem.title} + + + + ); + })} + + + + ) : null} + + + ); + })} + + + ); +} diff --git a/src/components/navigation/nav-sidebar.tsx b/src/components/navigation/nav-sidebar.tsx new file mode 100644 index 0000000..30eb5b6 --- /dev/null +++ b/src/components/navigation/nav-sidebar.tsx @@ -0,0 +1,125 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as React from "react"; +import { + Box, + Boxes, + BrainCircuit, + Cable, + EthernetPort, + Form, + Logs, + Settings2, + Users, +} from "lucide-react"; + +import { NavMain } from "@/components/navigation/nav-main"; +import { NavUser } from "@/components/navigation/nav-user"; +import { ServerSwitcher } from "@/components/navigation/server-switcher"; +import { + Sidebar, + SidebarContent, + SidebarFooter, + SidebarHeader, + SidebarRail, +} from "@/components/ui/sidebar"; +import { NavTree } from "./nav-tree"; + +// This is sample data. +const data = { + user: { + name: "shadcn", + email: "m@example.com", + avatar: "/avatars/shadcn.jpg", + }, + servers: [ + { + name: "Cluster", + logo: Boxes, + }, + { + name: "Server A", + logo: Box, + }, + { + name: "Server B", + logo: Box, + }, + { + name: "Server C", + logo: Box, + }, + ], + navMain: [ + { + title: "Connections", + url: "/connections", + icon: Cable, + }, + { + title: "Schemas", + url: "/schemas", + icon: Form, + }, + { + title: "Interfaces", + url: "/interfaces", + icon: EthernetPort, + items: [ + { title: "Hardware", url: "/interfaces/hardware" }, + { title: "LORA", url: "/interfaces/lora" }, + ], + }, + { title: "Logging", url: "/logging", icon: Logs }, + { title: "Models", url: "/models", icon: BrainCircuit }, + { + title: "Admin", + url: "/admin", + icon: Users, + items: [ + { title: "Users", url: "/admin/users" }, + { title: "Groups", url: "/admin/groups" }, + ], + }, + { title: "Settings", url: "/settings", icon: Settings2 }, + ], + navTree: [ + "Namespaces", + "Region-1", + ["Region-2", ["Zone-1", "Node 1", ["Node 2", "Service 1"]], "Zone-2"], + "Region-3", + ], +}; + +export function NavSidebar({ ...props }: React.ComponentProps) { + return ( + + + + + + + + + + + + + + ); +} diff --git a/src/components/navigation/nav-tree.tsx b/src/components/navigation/nav-tree.tsx new file mode 100644 index 0000000..40d6b52 --- /dev/null +++ b/src/components/navigation/nav-tree.tsx @@ -0,0 +1,103 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Braces, ChevronRight, Folder } from "lucide-react"; +import { + SidebarGroup, + SidebarGroupLabel, + SidebarMenu, + SidebarMenuButton, + SidebarMenuItem, + SidebarMenuSub, +} from "../ui/sidebar"; +import { useIsRouteActive } from "@/hooks/use-is-route-active"; +import { Link } from "@tanstack/react-router"; +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from "../ui/collapsible"; + +type TreeItem = string | TreeItem[]; + +function NavTreeItem({ item, basePath }: { item: TreeItem; basePath: string }) { + const [name, ...items] = Array.isArray(item) ? item : [item]; + const path = `${basePath}/${name}`; + const isActive = useIsRouteActive(path, !items.length); + // Leaf + if (!items.length) { + return ( + + + {name} + + ); + } + + // Branch + return ( + + + + + + + {name} + + + + + + {items + .sort((a, b) => + Array.isArray(a) && !Array.isArray(b) + ? -1 + : Array.isArray(b) && !Array.isArray(a) + ? 1 + : 0, + ) + .map((subItem, index) => ( + + ))} + + + + + ); +} + +export function NavTree({ + item, + label, + basePath, +}: { + item: TreeItem; + label: string; + basePath: string; +}) { + return ( + + {label} + + + + + ); +} diff --git a/src/components/navigation/nav-user.tsx b/src/components/navigation/nav-user.tsx new file mode 100644 index 0000000..d59f344 --- /dev/null +++ b/src/components/navigation/nav-user.tsx @@ -0,0 +1,125 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + BadgeCheck, + Bell, + CreditCard, + LogOut, + Menu, + Sparkles, +} from "lucide-react"; + +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { + SidebarMenu, + SidebarMenuButton, + SidebarMenuItem, + useSidebar, +} from "@/components/ui/sidebar"; + +export function NavUser({ + user, +}: { + user: { + name: string; + email: string; + avatar: string; + }; +}) { + const { isMobile } = useSidebar(); + + return ( + + + + + + + + CN + +
+ {user.name} + {user.email} +
+ + + + + +
+ + + CN + +
+ {user.name} + {user.email} +
+
+
+ + + + + Upgrade to Pro + + + + + + + Account + + + + Billing + + + + Notifications + + + + + + Log out + +
+ + + + ); +} diff --git a/src/components/navigation/server-switcher.tsx b/src/components/navigation/server-switcher.tsx new file mode 100644 index 0000000..591496e --- /dev/null +++ b/src/components/navigation/server-switcher.tsx @@ -0,0 +1,108 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as React from "react"; +import { LayoutGrid, Plus } from "lucide-react"; + +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { + SidebarMenu, + SidebarMenuButton, + SidebarMenuItem, + useSidebar, +} from "@/components/ui/sidebar"; + +export function ServerSwitcher({ + servers, +}: { + servers: { + name: string; + logo: React.ElementType; + }[]; +}) { + const { isMobile } = useSidebar(); + const [activeServer, setActiveServer] = React.useState(servers[0]); + + if (!activeServer) { + return null; + } + + return ( + + + + + +
+ +
+
+ + {activeServer.name} + +
+ +
+
+ + + Servers + + {servers.map((server, index) => ( + setActiveServer(server)} + className="gap-2 p-2" + > +
+ +
+ {server.name} + ⌘{index + 1} +
+ ))} + + +
+ +
+
+ Add server +
+
+
+
+
+
+ ); +} diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx new file mode 100644 index 0000000..9c1f854 --- /dev/null +++ b/src/components/ui/avatar.tsx @@ -0,0 +1,70 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +"use client"; + +import * as React from "react"; +import * as AvatarPrimitive from "@radix-ui/react-avatar"; + +import { cn } from "@/lib/utils"; + +function Avatar({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AvatarImage({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AvatarFallback({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { Avatar, AvatarImage, AvatarFallback }; diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx new file mode 100644 index 0000000..587b3a3 --- /dev/null +++ b/src/components/ui/badge.tsx @@ -0,0 +1,63 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "@/lib/utils"; + +const badgeVariants = cva( + "inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90", + secondary: + "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90", + destructive: + "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +function Badge({ + className, + variant, + asChild = false, + ...props +}: React.ComponentProps<"span"> & + VariantProps & { asChild?: boolean }) { + const Comp = asChild ? Slot : "span"; + + return ( + + ); +} + +export { Badge, badgeVariants }; diff --git a/src/components/ui/breadcrumb.tsx b/src/components/ui/breadcrumb.tsx new file mode 100644 index 0000000..b6d668c --- /dev/null +++ b/src/components/ui/breadcrumb.tsx @@ -0,0 +1,126 @@ +/* + * Copyright [ 2020 - 2024 ] [Matthew Buckton] + * Copyright [ 2024 - 2026 ] [Maps Messaging B.V.] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { ChevronRight, MoreHorizontal } from "lucide-react"; + +import { cn } from "@/lib/utils"; + +function Breadcrumb({ ...props }: React.ComponentProps<"nav">) { + return