From fdcc5e244907680a9038098996bed9bfebdd1a24 Mon Sep 17 00:00:00 2001 From: Andreas Thomas Date: Wed, 27 Nov 2024 10:13:31 +0100 Subject: [PATCH] docs: explain chproxy arguments (#2689) --- apps/chproxy/README.md | 1 + apps/chproxy/src/main.ts | 150 ------ .../docs/architecture/clickhouse-proxy.mdx | 56 ++- .../content/docs/architecture/vault.mdx | 2 +- apps/engineering/package.json | 7 +- apps/www/package.json | 2 +- pnpm-lock.yaml | 475 +++++++++++------- 7 files changed, 353 insertions(+), 340 deletions(-) create mode 100644 apps/chproxy/README.md delete mode 100644 apps/chproxy/src/main.ts diff --git a/apps/chproxy/README.md b/apps/chproxy/README.md new file mode 100644 index 0000000000..08c3beff88 --- /dev/null +++ b/apps/chproxy/README.md @@ -0,0 +1 @@ +Read more: [https://engineering.unkey.com/docs/architecture/clickhouse-proxy](https://engineering.unkey.com/docs/architecture/clickhouse-proxy) diff --git a/apps/chproxy/src/main.ts b/apps/chproxy/src/main.ts deleted file mode 100644 index 204d414b05..0000000000 --- a/apps/chproxy/src/main.ts +++ /dev/null @@ -1,150 +0,0 @@ -import { heapStats } from "bun:jsc"; -import { generateHeapSnapshot } from "bun"; -import { z } from "zod"; - -const MAX_BATCH_SIZE = 10000; -const MAX_BATCH_TIME = 3000; // milliseconds - -type Batch = { - createdAt: number; - rows: string[]; - params: URLSearchParams; -}; - -const env = z - .object({ - // url including basic auth - // ie: https://user:password@xxx.clickhouse.cloud - CLICKHOUSE_URL: z.string(), - PORT: z - .string() - .optional() - .default("7123") - .transform((s) => Number.parseInt(s)), - // user:pass - // We receive a base64 of this in the authorization header ie: `Basic ZGVmYXVsdDo=` - BASIC_AUTH: z.string(), - }) - .parse(process.env); - -const requiredAuthorization = `Basic ${btoa(env.BASIC_AUTH)}`; - -const buffer = new Map(); - -let inflight = 0; - -async function flush(force?: boolean): Promise { - const now = Date.now(); - - for (const [key, batch] of buffer.entries()) { - if (force || now >= batch.createdAt + MAX_BATCH_TIME) { - await persist(key); - } - } -} - -// persist inserts the data into clickhouse and removes it from the buffer -async function persist(key: string): Promise { - const batch = buffer.get(key); - if (!batch) { - return; - } - - buffer.delete(key); - - const url = new URL(env.CLICKHOUSE_URL); - batch.params.forEach((v, k) => { - url.searchParams.set(k, v); - }); - - inflight += 1; - - const res = await fetch(url, { - method: "POST", - headers: { - "Content-Type": "text/plain", - Authorization: `Basic ${btoa([url.username, url.password].join(":"))}`, - }, - body: batch.rows.join("\n"), - }); - inflight -= 1; - - const body = await res.text(); - if (res.ok) { - console.info(`BUN github persisted ${batch.rows.length} rows`, { inflight }); - } else { - console.error("unable to persist", body); - } -} - -setInterval(flush, 10000); -let snapshotId = 0; -setInterval(async () => { - const snapshot = generateHeapSnapshot(); - await Bun.write(`heap_${snapshotId++}.json`, JSON.stringify(snapshot, null, 2)); -}, 60_000); - -setInterval(() => { - console.info("running gc", { - v: Bun.version, - }); - Bun.gc(true); - console.info("memory:", heapStats()); -}, 10_000); - -const server = Bun.serve({ - port: env.PORT, - fetch: async (req: Request): Promise => { - const url = new URL(req.url); - - if (url.pathname === "/v1/liveness") { - return new Response("I'm alive"); - } - - if (req.headers.get("Authorization") !== requiredAuthorization) { - return new Response("unauthorized", { status: 401 }); - } - - const query = url.searchParams.get("query"); - if (!query || !query.toLowerCase().startsWith("insert into")) { - return new Response("wrong query", { status: 400 }); - } - - const params = url.searchParams; - params.delete("query_id"); - params.sort(); - - const key = params.toString(); - - const rows = (await req.text()).split("\n"); - - const existing = buffer.get(key); - if (existing) { - const size = existing.rows.push(...rows); - if (size >= MAX_BATCH_SIZE) { - await persist(key); - } - } else { - buffer.set(key, { - createdAt: Date.now(), - params, - rows, - }); - } - - return new Response("ok"); - }, - error: (err) => { - console.error(err); - return new Response("internal server error", { status: 500 }); - }, -}); - -console.info("listening on", server.hostname, server.port); -process.on("SIGTERM", async (s) => { - console.warn("Received signal", s); - - server.stop(); - await flush(true); - process.exit(0); -}); diff --git a/apps/engineering/content/docs/architecture/clickhouse-proxy.mdx b/apps/engineering/content/docs/architecture/clickhouse-proxy.mdx index 9a2486041a..17b9073056 100644 --- a/apps/engineering/content/docs/architecture/clickhouse-proxy.mdx +++ b/apps/engineering/content/docs/architecture/clickhouse-proxy.mdx @@ -2,8 +2,9 @@ title: ClickHouse Proxy --- import {GithubIcon} from "lucide-react" +import {Property} from "fumadocs-openapi/ui" -Our ClickHouse Proxy is a Bun app runnng on AWS Apprunner. It's only purpose is to receive small batches - or even just single rows - to batch them before sending them in bulk to ClickHouse. +Our ClickHouse Proxy is a go app runnng on AWS Apprunner. It's only purpose is to receive small batches - or even just single rows - to batch them before sending them in bulk to ClickHouse. It does this by implementing the same HTTP interface as ClickHouse and buffering rows in memory, flushing periodically either every few seconds or when the buffer is full. It's available at `clickhouse.unkey.cloud`. @@ -16,6 +17,59 @@ Using the proxy is optional in development, but it can be enabled by providing t Our ClickHouse proxy is fully managed in [unkeyed/infra](https://github.com/unkeyed/infra). +## Quickstart + +The service is entirely configured via environment variables. + +### Environment Variables + + + The port to listen on. + + Default: `7123` + + + + + Username and password in the form `:` (username and password separated by a colon), which will be used to authorize incoming requests. + + Basic auth was chosen because that's what ClickHouse uses and allows to reuse their SDKs. + In your sdk, you can specify the url as `https://proxyUser:proxyPassword@host:port` and it will just work. + + + + + + The HTTP URL of your clickhouse cluster. Ensure this includes the username and password + + Example: `https://username:password@abc.us-east-1.aws.clickhouse.cloud:8123` + + +### Running the service + +You can run the service either by compiling the go binary via: +```bash +cd /apps/chproxy +go build -o chproxy . +./chproxy +``` + +Or using the included [Dockerfile](https://github.com/unkeyed/unkey/blob/main/apps/chproxy/Dockerfile) + +See the [docker compose](https://github.com/unkeyed/unkey/blob/main/deployment/docker-compose.yaml) reference for more. + ## References }> diff --git a/apps/engineering/content/docs/architecture/vault.mdx b/apps/engineering/content/docs/architecture/vault.mdx index 258350b26d..a5fe88edf6 100644 --- a/apps/engineering/content/docs/architecture/vault.mdx +++ b/apps/engineering/content/docs/architecture/vault.mdx @@ -1,6 +1,6 @@ --- title: Vault -description: Secure encryption of secrets without +description: Secure encryption of secrets --- import { Accordion, Accordions } from "fumadocs-ui/components/accordion" diff --git a/apps/engineering/package.json b/apps/engineering/package.json index 18fc2a6f96..177f553a55 100644 --- a/apps/engineering/package.json +++ b/apps/engineering/package.json @@ -9,10 +9,11 @@ "postinstall": "fumadocs-mdx" }, "dependencies": { - "fumadocs-core": "14.4.0", - "fumadocs-mdx": "11.1.1", + "fumadocs-core": "14.5.4", + "fumadocs-mdx": "11.1.2", + "fumadocs-openapi": "^5.7.5", "fumadocs-typescript": "^3.0.2", - "fumadocs-ui": "14.4.0", + "fumadocs-ui": "14.5.4", "lucide-react": "^0.378.0", "next": "^14.2.8", "react": "^18.3.1", diff --git a/apps/www/package.json b/apps/www/package.json index 9915f21972..43751694df 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -35,7 +35,7 @@ "drizzle-orm": "generated", "framer-motion": "11.0.23", "fslightbox-react": "^1.7.6", - "fumadocs-core": "^14.5.2", + "fumadocs-core": "^14.5.4", "geist": "^1.3.0", "github-slugger": "^2.0.0", "lucide-react": "^0.378.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b23a8d4cf7..5356102480 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -202,7 +202,7 @@ importers: version: link:../../internal/schema ai: specifier: ^3.4.7 - version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.8)(vue@3.5.13)(zod@3.23.8) + version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.9)(vue@3.5.13)(zod@3.23.8) drizzle-orm: specifier: ^0.33.0 version: 0.33.0(@opentelemetry/api@1.4.1)(@planetscale/database@1.19.0)(@types/react@18.3.11)(react@18.3.1) @@ -600,17 +600,20 @@ importers: apps/engineering: dependencies: fumadocs-core: - specifier: 14.4.0 - version: 14.4.0(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) + specifier: 14.5.4 + version: 14.5.4(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) fumadocs-mdx: - specifier: 11.1.1 - version: 11.1.1(acorn@8.14.0)(fumadocs-core@14.4.0)(next@14.2.10) + specifier: 11.1.2 + version: 11.1.2(acorn@8.14.0)(fumadocs-core@14.5.4)(next@14.2.10) + fumadocs-openapi: + specifier: ^5.7.5 + version: 5.7.5(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.10) fumadocs-typescript: specifier: ^3.0.2 version: 3.0.2(typescript@5.5.4) fumadocs-ui: - specifier: 14.4.0 - version: 14.4.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.10) + specifier: 14.5.4 + version: 14.5.4(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.10) lucide-react: specifier: ^0.378.0 version: 0.378.0(react@18.3.1) @@ -869,7 +872,7 @@ importers: version: link:../../internal/worker-logging ai: specifier: ^3.0.23 - version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.8)(vue@3.5.13)(zod@3.23.8) + version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.9)(vue@3.5.13)(zod@3.23.8) drizzle-orm: specifier: generated version: 0.32.0-aaf764c(@cloudflare/workers-types@4.20240603.0)(@planetscale/database@1.19.0)(react@18.3.1) @@ -1008,8 +1011,8 @@ importers: specifier: ^1.7.6 version: 1.7.6(prop-types@15.8.1)(react-dom@18.3.1)(react@18.3.1) fumadocs-core: - specifier: ^14.5.2 - version: 14.5.2(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) + specifier: ^14.5.4 + version: 14.5.4(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) geist: specifier: ^1.3.0 version: 1.3.0(next@14.2.10) @@ -1133,7 +1136,7 @@ importers: version: link:../../packages/error ai: specifier: ^3.0.23 - version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.8)(vue@3.5.13)(zod@3.23.8) + version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.9)(vue@3.5.13)(zod@3.23.8) zod: specifier: ^3.23.5 version: 3.23.8 @@ -1155,7 +1158,7 @@ importers: devDependencies: checkly: specifier: latest - version: 4.9.0(@types/node@20.14.9)(typescript@5.5.3) + version: 4.11.0(@types/node@20.14.9)(typescript@5.5.3) ts-node: specifier: 10.9.1 version: 10.9.1(@types/node@20.14.9)(typescript@5.5.3) @@ -1851,7 +1854,7 @@ packages: - zod dev: false - /@ai-sdk/svelte@0.0.51(svelte@5.2.8)(zod@3.23.8): + /@ai-sdk/svelte@0.0.51(svelte@5.2.9)(zod@3.23.8): resolution: {integrity: sha512-aIZJaIds+KpCt19yUDCRDWebzF/17GCY7gN9KkcA2QM6IKRO5UmMcqEYja0ZmwFQPm1kBZkF2njhr8VXis2mAw==} engines: {node: '>=18'} peerDependencies: @@ -1862,8 +1865,8 @@ packages: dependencies: '@ai-sdk/provider-utils': 1.0.20(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.46(zod@3.23.8) - sswr: 2.1.0(svelte@5.2.8) - svelte: 5.2.8 + sswr: 2.1.0(svelte@5.2.9) + svelte: 5.2.9 transitivePeerDependencies: - zod dev: false @@ -2332,6 +2335,15 @@ packages: tslib: 2.8.1 dev: false + /@apidevtools/json-schema-ref-parser@11.7.2: + resolution: {integrity: sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA==} + engines: {node: '>= 16'} + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + js-yaml: 4.1.0 + dev: false + /@apidevtools/json-schema-ref-parser@9.0.6: resolution: {integrity: sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==} dependencies: @@ -5125,6 +5137,15 @@ packages: tslib: 2.8.1 dev: false + /@fumari/json-schema-to-typescript@1.1.1: + resolution: {integrity: sha512-vVnuwLqW8WJsg09EanNHnXnzsjYYsZE7JlD4M1sLvDnWGjvYJKNU6VpRqDxOiDChUszDZFKhxQSNYGShF0bKJg==} + engines: {node: '>=18.0.0'} + dependencies: + '@apidevtools/json-schema-ref-parser': 11.7.2 + js-yaml: 4.1.0 + prettier: 3.4.1 + dev: false + /@google-cloud/precise-date@4.0.0: resolution: {integrity: sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==} engines: {node: '>=14.0.0'} @@ -5495,7 +5516,6 @@ packages: /@jsdevtools/ono@7.1.3: resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - dev: true /@jsonhero/path@1.0.21: resolution: {integrity: sha512-gVUDj/92acpVoJwsVJ/RuWOaHyG4oFzn898WNGQItLCTQ+hOaVlEaImhwE1WqOTf+l3dGOUkbSiVKlb3q1hd1Q==} @@ -6569,8 +6589,8 @@ packages: resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} dev: false - /@octokit/plugin-paginate-rest@11.3.5(@octokit/core@6.1.2): - resolution: {integrity: sha512-cgwIRtKrpwhLoBi0CUNuY83DPGRMaWVjqVI/bGKsLJ4PzyWZNaEmhHroI2xlrVXkk6nFv0IsZpOp+ZWSWUS2AQ==} + /@octokit/plugin-paginate-rest@11.3.6(@octokit/core@6.1.2): + resolution: {integrity: sha512-zcvqqf/+TicbTCa/Z+3w4eBJcAxCFymtc0UAIsR3dEVoNilWld4oXdscQ3laXamTszUZdusw97K8+DrbFiOwjw==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=6' @@ -6743,7 +6763,7 @@ packages: engines: {node: '>= 18'} dependencies: '@octokit/core': 6.1.2 - '@octokit/plugin-paginate-rest': 11.3.5(@octokit/core@6.1.2) + '@octokit/plugin-paginate-rest': 11.3.6(@octokit/core@6.1.2) '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.2) '@octokit/plugin-rest-endpoint-methods': 13.2.6(@octokit/core@6.1.2) dev: false @@ -7363,7 +7383,7 @@ packages: resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} engines: {node: '>=8.0.0'} dependencies: - tslib: 2.8.1 + tslib: 2.4.1 dev: false /@peculiar/webcrypto@1.4.1: @@ -7373,7 +7393,7 @@ packages: '@peculiar/asn1-schema': 2.3.13 '@peculiar/json-schema': 1.1.12 pvtsutils: 1.3.6 - tslib: 2.8.1 + tslib: 2.4.1 webcrypto-core: 1.8.1 dev: false @@ -8938,6 +8958,46 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.3.11)(react@18.3.1) dev: false + /@radix-ui/react-select@2.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==} + 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: + '@radix-ui/number': 1.1.0 + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.11 + '@types/react-dom': 18.3.0 + aria-hidden: 1.2.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.0(@types/react@18.3.11)(react@18.3.1) + dev: false + /@radix-ui/react-separator@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} peerDependencies: @@ -10425,18 +10485,6 @@ packages: postcss-selector-parser: 6.0.10 tailwindcss: 3.4.10(ts-node@10.9.2) - /@tailwindcss/typography@0.5.15(tailwindcss@3.4.10): - resolution: {integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20' - dependencies: - lodash.castarray: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.10(ts-node@10.9.2) - dev: false - /@tanstack/query-core@4.36.1: resolution: {integrity: sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA==} dev: false @@ -10507,7 +10555,7 @@ packages: execa: 8.0.1 humanize-duration: 3.32.1 jose: 5.9.6 - nanoid: 3.3.7 + nanoid: 3.3.8 socket.io-client: 4.7.5 superjson: 2.2.1 zod: 3.23.8 @@ -11182,6 +11230,13 @@ packages: '@types/prop-types': 15.7.13 csstype: 3.1.3 + /@types/readable-stream@4.0.18: + resolution: {integrity: sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==} + dependencies: + '@types/node': 20.14.9 + safe-buffer: 5.1.2 + dev: true + /@types/resolve@1.20.6: resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} dev: true @@ -11921,7 +11976,7 @@ packages: indent-string: 5.0.0 dev: true - /ai@3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.8)(vue@3.5.13)(zod@3.23.8): + /ai@3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.9)(vue@3.5.13)(zod@3.23.8): resolution: {integrity: sha512-SutkVjFE86+xNql7fJERJkSEwpILEuiQvCoogJef6ZX/PGHvu3yepwHwVwedgABXe9SudOIKN48EQESrXX/xCw==} engines: {node: '>=18'} peerDependencies: @@ -11946,7 +12001,7 @@ packages: '@ai-sdk/provider-utils': 1.0.20(zod@3.23.8) '@ai-sdk/react': 0.0.62(react@18.3.1)(zod@3.23.8) '@ai-sdk/solid': 0.0.49(zod@3.23.8) - '@ai-sdk/svelte': 0.0.51(svelte@5.2.8)(zod@3.23.8) + '@ai-sdk/svelte': 0.0.51(svelte@5.2.9)(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.46(zod@3.23.8) '@ai-sdk/vue': 0.0.53(vue@3.5.13)(zod@3.23.8) '@opentelemetry/api': 1.4.1 @@ -11957,7 +12012,7 @@ packages: openai: 4.52.1 react: 18.3.1 secure-json-parse: 2.7.0 - svelte: 5.2.8 + svelte: 5.2.9 zod: 3.23.8 zod-to-json-schema: 3.23.2(zod@3.23.8) transitivePeerDependencies: @@ -12276,16 +12331,6 @@ packages: resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} dev: true - /async-mqtt@2.6.3: - resolution: {integrity: sha512-mFGTtlEpOugOoLOf9H5AJyJaZUNtOVXLGGOnPaPZDPQex6W6iIOgtV+fAgam0GQbgnLfgX+Wn/QzS6d+PYfFAQ==} - dependencies: - mqtt: 4.3.8 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - /async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} dev: true @@ -12503,6 +12548,15 @@ packages: readable-stream: 3.6.2 dev: true + /bl@6.0.16: + resolution: {integrity: sha512-V/kz+z2Mx5/6qDfRCilmrukUXcXuCoXKg3/3hDvzKKoSUx8CJKudfIoT29XZc3UE9xBvxs5qictiHdprwtteEg==} + dependencies: + '@types/readable-stream': 4.0.18 + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 4.5.2 + dev: true + /blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} dev: true @@ -12816,8 +12870,8 @@ packages: get-func-name: 2.0.2 dev: true - /checkly@4.9.0(@types/node@20.14.9)(typescript@5.5.3): - resolution: {integrity: sha512-LqohEntErF7dJaJPsEpjvr/O9wUfzBRac6DOXgFDMEw+dNi19oBAcspdOqVGjPjMoCZ9/s5b5tSJI1pusY4mJQ==} + /checkly@4.11.0(@types/node@20.14.9)(typescript@5.5.3): + resolution: {integrity: sha512-/qqLcOjWVCqYKk4ZntZSHGzYDwsq0SybklxiD5k+9JAi6UF40t53+KyJH3RGCgxBxGOECdirQ6oSUcP13WfZcQ==} engines: {node: '>=16.0.0'} hasBin: true dependencies: @@ -12829,7 +12883,6 @@ packages: '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.5.3) acorn: 8.8.1 acorn-walk: 8.2.0 - async-mqtt: 2.6.3 axios: 1.7.4 chalk: 4.1.2 ci-info: 3.8.0 @@ -12838,10 +12891,12 @@ packages: git-repo-info: 2.1.1 glob: 10.3.1 indent-string: 4.0.0 + json-stream-stringify: 3.1.6 json5: 2.2.3 jwt-decode: 3.1.2 log-symbols: 4.1.0 luxon: 3.3.0 + mqtt: 5.10.1 open: 8.4.0 p-queue: 6.6.2 prompts: 2.4.2 @@ -13229,11 +13284,8 @@ packages: engines: {node: '>= 12'} dev: true - /commist@1.1.0: - resolution: {integrity: sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==} - dependencies: - leven: 2.1.0 - minimist: 1.2.8 + /commist@3.2.0: + resolution: {integrity: sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==} dev: true /commitizen@4.3.1(@types/node@20.14.9)(typescript@5.5.3): @@ -14213,7 +14265,7 @@ packages: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.8.1 + tslib: 2.4.1 dev: false /dot-prop@6.0.1: @@ -14668,15 +14720,6 @@ packages: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: false - /duplexify@4.1.3: - resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} - dependencies: - end-of-stream: 1.4.4 - inherits: 2.0.4 - readable-stream: 3.6.2 - stream-shift: 1.0.3 - dev: true - /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -14861,7 +14904,7 @@ packages: es-errors: 1.3.0 es-object-atoms: 1.0.0 es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 + es-to-primitive: 1.3.0 function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 @@ -14931,8 +14974,8 @@ packages: hasown: 2.0.2 dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + /es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} dependencies: is-callable: 1.2.7 @@ -15660,7 +15703,7 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -15708,10 +15751,25 @@ packages: resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==} dev: false + /fast-unique-numbers@8.0.13: + resolution: {integrity: sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g==} + engines: {node: '>=16.1.0'} + dependencies: + '@babel/runtime': 7.26.0 + tslib: 2.8.1 + dev: true + /fast-uri@3.0.3: resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} dev: true + /fast-xml-parser@4.5.0: + resolution: {integrity: sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + /fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} @@ -15925,6 +15983,10 @@ packages: dependencies: is-callable: 1.2.7 + /foreach@2.0.6: + resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} + dev: false + /foreground-child@3.3.0: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} @@ -16115,8 +16177,8 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /fumadocs-core@14.4.0(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-hb+SeSqX93Lczl7okwKzYhoruRa4VaPqbkk7x+zq1i2y6AhuIOeImdqqNy4Zno9KOdhiesfPuB6zXTZnoGeSgg==} + /fumadocs-core@14.5.4(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-MPtCm/qMr1/mruPc/PFD0JXlM9rAIinSInY69ePoUORB+62NQ0Zw00xM1JU3Xhhzr0NUVolHQAVM0yzkE3pb5A==} peerDependencies: '@oramacloud/client': 1.x.x algoliasearch: 4.24.0 @@ -16157,50 +16219,8 @@ packages: - supports-color dev: false - /fumadocs-core@14.5.2(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-I3CDExyt4nI3ShHquIzS5oud0r/hcYR3n8ergzRTY4II4bvM510ysjByKtvczW14QslSFmF+OyLADPScx/46Kg==} - peerDependencies: - '@oramacloud/client': 1.x.x - algoliasearch: 4.24.0 - next: 14.x.x || 15.x.x - react: '>= 18' - react-dom: '>= 18' - peerDependenciesMeta: - '@oramacloud/client': - optional: true - algoliasearch: - optional: true - next: - optional: true - react: - optional: true - react-dom: - optional: true - dependencies: - '@formatjs/intl-localematcher': 0.5.8 - '@orama/orama': 3.0.2 - '@shikijs/rehype': 1.23.1 - github-slugger: 2.0.0 - hast-util-to-estree: 3.1.0 - hast-util-to-jsx-runtime: 2.3.2 - image-size: 1.1.1 - negotiator: 1.0.0 - next: 14.2.10(@babel/core@7.26.0)(@opentelemetry/api@1.4.1)(react-dom@18.3.1)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.6.0(@types/react@18.3.11)(react@18.3.1) - remark: 15.0.1 - remark-gfm: 4.0.0 - scroll-into-view-if-needed: 3.1.0 - shiki: 1.23.1 - unist-util-visit: 5.0.0 - transitivePeerDependencies: - - '@types/react' - - supports-color - dev: false - - /fumadocs-mdx@11.1.1(acorn@8.14.0)(fumadocs-core@14.4.0)(next@14.2.10): - resolution: {integrity: sha512-78Nu/PHfBaRnPWTDTGVVZrG+A7rfK3NU7DX1aCEnZHEfwuY0NmuIOtDIYcoidZxjc88DnoewV+cJoBNn7I/D8Q==} + /fumadocs-mdx@11.1.2(acorn@8.14.0)(fumadocs-core@14.5.4)(next@14.2.10): + resolution: {integrity: sha512-FvZKXCk8c9YPXSfeC9mcvbls1Zy/bzZ+nGgnibeujUJ+x6k24cUZrBqKABsLb6yNrNrB8yGiCC3asuwlppHn/g==} hasBin: true peerDependencies: fumadocs-core: ^14.0.0 @@ -16212,7 +16232,7 @@ packages: esbuild: 0.24.0 estree-util-value-to-estree: 3.2.1 fast-glob: 3.3.2 - fumadocs-core: 14.4.0(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) + fumadocs-core: 14.5.4(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) gray-matter: 4.0.3 micromatch: 4.0.8 next: 14.2.10(@babel/core@7.26.0)(@opentelemetry/api@1.4.1)(react-dom@18.3.1)(react@18.3.1) @@ -16222,6 +16242,41 @@ packages: - supports-color dev: false + /fumadocs-openapi@5.7.5(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.10): + resolution: {integrity: sha512-vZjjSDpaCTM5ZCooOVLe8/IQ8+Vw5iquRU374Schpq3+HA9CHykKlQjuKyB6dnST15fGQ1JstG9qofYiI8gn8w==} + peerDependencies: + next: 14.x.x || 15.x.x + react: '>= 18' + react-dom: '>= 18' + dependencies: + '@apidevtools/json-schema-ref-parser': 11.7.2 + '@fumari/json-schema-to-typescript': 1.1.1 + '@radix-ui/react-select': 2.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.11)(react@18.3.1) + class-variance-authority: 0.7.1 + fast-glob: 3.3.2 + fumadocs-core: 14.5.4(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) + fumadocs-ui: 14.5.4(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.10) + github-slugger: 2.0.0 + hast-util-to-jsx-runtime: 2.3.2 + js-yaml: 4.1.0 + next: 14.2.10(@babel/core@7.26.0)(@opentelemetry/api@1.4.1)(react-dom@18.3.1)(react@18.3.1) + openapi-sampler: 1.6.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-hook-form: 7.53.2(react@18.3.1) + remark: 15.0.1 + remark-rehype: 11.1.1 + shiki: 1.23.1 + transitivePeerDependencies: + - '@oramacloud/client' + - '@types/react' + - '@types/react-dom' + - algoliasearch + - supports-color + - tailwindcss + dev: false + /fumadocs-typescript@3.0.2(typescript@5.5.4): resolution: {integrity: sha512-SqYJy+NxjjuQQeom7wLpODYiWtIKWfndguHL3XKXaMUvhlsjmsWWTaXJWKaqIfOStiYJQlGWrXxFA2Rrpbx63Q==} peerDependencies: @@ -16240,8 +16295,8 @@ packages: - supports-color dev: false - /fumadocs-ui@14.4.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.10): - resolution: {integrity: sha512-UJbhqCKyt4hlXzg+5nj9c48ISOWarxaLfzS8pzjVDE859vnSZVcBYzCMOFIvB2J0DGLX9yvK5RPXuuHkloMNfg==} + /fumadocs-ui@14.5.4(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.10): + resolution: {integrity: sha512-0MkYEYp3SsFbAWRrNz2XL1ODqDpCHSKbGqO9nUbgg+0AuGiV4gxISP5E2NDvDZpTPz3W+c0mzHrZkPq6r2MVGQ==} peerDependencies: next: 14.x.x || 15.x.x react: '>= 18' @@ -16260,12 +16315,13 @@ packages: '@radix-ui/react-scroll-area': 1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': 1.1.0(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-tabs': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@tailwindcss/typography': 0.5.15(tailwindcss@3.4.10) class-variance-authority: 0.7.1 - fumadocs-core: 14.4.0(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) - lucide-react: 0.456.0(react@18.3.1) + fumadocs-core: 14.5.4(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) + lodash.merge: 4.6.2 + lucide-react: 0.460.0(react@18.3.1) next: 14.2.10(@babel/core@7.26.0)(@opentelemetry/api@1.4.1)(react-dom@18.3.1)(react@18.3.1) next-themes: 0.4.3(react-dom@18.3.1)(react@18.3.1) + postcss-selector-parser: 7.0.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-medium-image-zoom: 5.2.11(react-dom@18.3.1)(react@18.3.1) @@ -17038,11 +17094,8 @@ packages: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} dev: true - /help-me@3.0.0: - resolution: {integrity: sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ==} - dependencies: - glob: 7.2.3 - readable-stream: 3.6.2 + /help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} dev: true /hex-rgb@4.3.0: @@ -17929,6 +17982,12 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + /json-pointer@0.6.2: + resolution: {integrity: sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==} + dependencies: + foreach: 2.0.6 + dev: false + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: false @@ -17949,6 +18008,11 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: false + /json-stream-stringify@3.1.6: + resolution: {integrity: sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==} + engines: {node: '>=7.10.1'} + dev: true + /json2module@0.0.3: resolution: {integrity: sha512-qYGxqrRrt4GbB8IEOy1jJGypkNsjWoIMlZt4bAsmUScCA507Hbc2p1JOhBzqn45u3PWafUgH2OnzyNU7udO/GA==} hasBin: true @@ -18091,11 +18155,6 @@ packages: resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} dev: false - /leven@2.1.0: - resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} - engines: {node: '>=0.10.0'} - dev: true - /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -18373,7 +18432,7 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.8.1 + tslib: 2.4.1 dev: false /lowercase-keys@3.0.0: @@ -18403,13 +18462,6 @@ packages: dependencies: yallist: 3.1.1 - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true - /lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} @@ -18426,8 +18478,8 @@ packages: react: 18.3.1 dev: false - /lucide-react@0.456.0(react@18.3.1): - resolution: {integrity: sha512-DIIGJqTT5X05sbAsQ+OhA8OtJYyD4NsEMCA/HQW/Y6ToPQ7gwbtujIoeAaup4HpHzV35SQOarKAWH8LYglB6eA==} + /lucide-react@0.460.0(react@18.3.1): + resolution: {integrity: sha512-BVtq/DykVeIvRTJvRAgCsOwaGL8Un3Bxh8MbDxMhEWlZay3T4IpEKDEpwt5KZ0KJMHzgm6jrltxlT5eXOWXDHg==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc dependencies: @@ -19786,7 +19838,6 @@ packages: /minipass@6.0.2: resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} engines: {node: '>=16 || 14 >=14.17'} - dev: true /minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} @@ -19912,38 +19963,37 @@ packages: /module-details-from-path@1.0.3: resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} - /mqtt-packet@6.10.0: - resolution: {integrity: sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==} + /mqtt-packet@9.0.1: + resolution: {integrity: sha512-koZF1V/X2RZUI6uD9wN5OK1JxxcG1ofAR4H3LjCw1FkeKzruZQ26aAA6v2m1lZyWONZIR5wMMJFrZJDRNzbiQw==} dependencies: - bl: 4.1.0 + bl: 6.0.16 debug: 4.3.7(supports-color@8.1.1) process-nextick-args: 2.0.1 transitivePeerDependencies: - supports-color dev: true - /mqtt@4.3.8: - resolution: {integrity: sha512-2xT75uYa0kiPEF/PE0VPdavmEkoBzMT/UL9moid0rAvlCtV48qBwxD62m7Ld/4j8tSkIO1E/iqRl/S72SEOhOw==} - engines: {node: '>=10.0.0'} + /mqtt@5.10.1: + resolution: {integrity: sha512-hXCOki8sANoQ7w+2OzJzg6qMBxTtrH9RlnVNV8panLZgnl+Gh0J/t4k6r8Az8+C7y3KAcyXtn0mmLixyUom8Sw==} + engines: {node: '>=16.0.0'} hasBin: true dependencies: - commist: 1.1.0 + '@types/readable-stream': 4.0.18 + '@types/ws': 8.5.13 + commist: 3.2.0 concat-stream: 2.0.0 debug: 4.3.7(supports-color@8.1.1) - duplexify: 4.1.3 - help-me: 3.0.0 - inherits: 2.0.4 - lru-cache: 6.0.0 + help-me: 5.0.0 + lru-cache: 10.4.3 minimist: 1.2.8 - mqtt-packet: 6.10.0 + mqtt-packet: 9.0.1 number-allocator: 1.0.14 - pump: 3.0.2 - readable-stream: 3.6.2 + readable-stream: 4.5.2 reinterval: 1.1.0 rfdc: 1.4.1 - split2: 3.2.2 - ws: 7.5.10 - xtend: 4.0.2 + split2: 4.2.0 + worker-timers: 7.1.8 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - supports-color @@ -20052,8 +20102,8 @@ packages: hasBin: true dev: false - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + /nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -20211,7 +20261,7 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.8.1 + tslib: 2.4.1 dev: false /node-addon-api@7.1.1: @@ -20581,6 +20631,14 @@ packages: - encoding dev: false + /openapi-sampler@1.6.0: + resolution: {integrity: sha512-0PKhql1Ms38xSngEztcNQ7EXgssR2jAyVX7RckEln4reynIr/HHwuwM29cDEpiNkk4OkrHoc+7Li9V7WTAPYmw==} + dependencies: + '@types/json-schema': 7.0.15 + fast-xml-parser: 4.5.0 + json-pointer: 0.6.2 + dev: false + /openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} dev: true @@ -20937,7 +20995,7 @@ packages: engines: {node: '>=16 || 14 >=14.18'} dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 6.0.2 /path-to-regexp@0.1.10: resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} @@ -21130,6 +21188,14 @@ packages: cssesc: 3.0.0 util-deprecate: 1.0.2 + /postcss-selector-parser@7.0.0: + resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: false + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -21137,7 +21203,7 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.7 + nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -21145,7 +21211,7 @@ packages: resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.7 + nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.0.2 dev: false @@ -21154,7 +21220,7 @@ packages: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.7 + nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -21162,7 +21228,7 @@ packages: resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.7 + nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 dev: true @@ -21171,7 +21237,7 @@ packages: resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.7 + nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -21229,6 +21295,12 @@ packages: hasBin: true dev: true + /prettier@3.4.1: + resolution: {integrity: sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==} + engines: {node: '>=14'} + hasBin: true + dev: false + /pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -21674,6 +21746,15 @@ packages: react: 18.3.1 dev: false + /react-hook-form@7.53.2(react@18.3.1): + resolution: {integrity: sha512-YVel6fW5sOeedd1524pltpHX+jgU2u3DSDtXEaBORNdqiNrsX/nUI/iGXONegttg0mJVnfrIkiV0cmTU6Oo2xw==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 + dependencies: + react: 18.3.1 + dev: false + /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -23077,7 +23158,7 @@ packages: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: dot-case: 3.0.4 - tslib: 2.8.1 + tslib: 2.4.1 dev: false /snakecase-keys@3.2.1: @@ -23305,10 +23386,9 @@ packages: resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} dev: true - /split2@3.2.2: - resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} - dependencies: - readable-stream: 3.6.2 + /split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} dev: true /sprintf-js@1.0.3: @@ -23337,12 +23417,12 @@ packages: nan: 2.22.0 dev: true - /sswr@2.1.0(svelte@5.2.8): + /sswr@2.1.0(svelte@5.2.9): resolution: {integrity: sha512-Cqc355SYlTAaUt8iDPaC/4DPPXK925PePLMxyBKuWd5kKc5mwsG3nT9+Mq2tyguL5s7b4Jg+IRMpTRsNTAfpSQ==} peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 dependencies: - svelte: 5.2.8 + svelte: 5.2.9 swrev: 4.0.0 dev: false @@ -23385,10 +23465,6 @@ packages: engines: {node: '>=4', npm: '>=6'} dev: true - /stream-shift@1.0.3: - resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - dev: true - /stream-transform@2.1.3: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} dependencies: @@ -23568,6 +23644,10 @@ packages: qs: 6.13.1 dev: false + /strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + dev: false + /style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} dependencies: @@ -23683,8 +23763,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte@5.2.8: - resolution: {integrity: sha512-VU7a01XwnFi6wXVkH5QY3FYXRZWrhsWZhaE8AYU6UeYZdslE3TFgQq6+HLrbMjOLkVhdKt74NGHYbhFeErQQ6g==} + /svelte@5.2.9: + resolution: {integrity: sha512-LjO7R6K8FI8dA3l+4CcsbJ3djIe2TtokHGzfpDTro5g8nworMbTz9alCR95EQXGsqlzIAvqJtZ7Yy0o33lL09Q==} engines: {node: '>=18'} dependencies: '@ampproject/remapping': 2.3.0 @@ -25489,6 +25569,31 @@ packages: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true + /worker-timers-broker@6.1.8: + resolution: {integrity: sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ==} + dependencies: + '@babel/runtime': 7.26.0 + fast-unique-numbers: 8.0.13 + tslib: 2.8.1 + worker-timers-worker: 7.0.71 + dev: true + + /worker-timers-worker@7.0.71: + resolution: {integrity: sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ==} + dependencies: + '@babel/runtime': 7.26.0 + tslib: 2.8.1 + dev: true + + /worker-timers@7.1.8: + resolution: {integrity: sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==} + dependencies: + '@babel/runtime': 7.26.0 + tslib: 2.8.1 + worker-timers-broker: 6.1.8 + worker-timers-worker: 7.0.71 + dev: true + /workerd@1.20240524.0: resolution: {integrity: sha512-LWLe5D8PVHBcqturmBbwgI71r7YPpIMYZoVEH6S4G35EqIJ55cb0n3FipoSyraoIfpcCxCFxX1K6WsRHbP3pFA==} engines: {node: '>=16'} @@ -25533,7 +25638,7 @@ packages: chokidar: 3.6.0 esbuild: 0.17.19 miniflare: 3.20240524.2 - nanoid: 3.3.7 + nanoid: 3.3.8 path-to-regexp: 6.3.0 resolve: 1.22.8 resolve.exports: 2.0.2 @@ -25569,7 +25674,7 @@ packages: esbuild: 0.17.19 itty-time: 1.0.6 miniflare: 3.20241022.0 - nanoid: 3.3.7 + nanoid: 3.3.8 path-to-regexp: 6.3.0 resolve: 1.22.8 resolve.exports: 2.0.2 @@ -25607,7 +25712,7 @@ packages: esbuild: 0.17.19 itty-time: 1.0.6 miniflare: 3.20241022.0 - nanoid: 3.3.7 + nanoid: 3.3.8 path-to-regexp: 6.3.0 resolve: 1.22.8 resolve.exports: 2.0.2 @@ -25672,6 +25777,7 @@ packages: optional: true utf-8-validate: optional: true + dev: false /ws@8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} @@ -25735,6 +25841,7 @@ packages: /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + dev: false /xterm-for-react@1.0.4(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-DCkLR9ZXeW907YyyaCTk/3Ol34VRHfCnf3MAPOkj3dUNA85sDqHvTXN8efw4g7bx7gWdJQRsEpGt2tJOXKG3EQ==}