diff --git a/.github/workflows/platform-frontend-ci.yml b/.github/workflows/platform-frontend-ci.yml index dc33d3bb5e..58d3464a3a 100644 --- a/.github/workflows/platform-frontend-ci.yml +++ b/.github/workflows/platform-frontend-ci.yml @@ -30,7 +30,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: "21" + node-version: "22.18.0" - name: Enable corepack run: corepack enable @@ -62,7 +62,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: "21" + node-version: "22.18.0" - name: Enable corepack run: corepack enable @@ -97,7 +97,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: "21" + node-version: "22.18.0" - name: Enable corepack run: corepack enable @@ -138,7 +138,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: "21" + node-version: "22.18.0" - name: Enable corepack run: corepack enable diff --git a/.github/workflows/platform-fullstack-ci.yml b/.github/workflows/platform-fullstack-ci.yml index d98a6598e0..a75c1b9068 100644 --- a/.github/workflows/platform-fullstack-ci.yml +++ b/.github/workflows/platform-fullstack-ci.yml @@ -30,7 +30,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: "21" + node-version: "22.18.0" - name: Enable corepack run: corepack enable @@ -66,7 +66,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: "21" + node-version: "22.18.0" - name: Enable corepack run: corepack enable diff --git a/autogpt_platform/autogpt_libs/autogpt_libs/auth/dependencies.py b/autogpt_platform/autogpt_libs/autogpt_libs/auth/dependencies.py index 2fbc3da0e7..ff280713ae 100644 --- a/autogpt_platform/autogpt_libs/autogpt_libs/auth/dependencies.py +++ b/autogpt_platform/autogpt_libs/autogpt_libs/auth/dependencies.py @@ -4,11 +4,18 @@ FastAPI dependency functions for JWT-based authentication and authorization. These are the high-level dependency functions used in route definitions. """ +import logging + import fastapi from .jwt_utils import get_jwt_payload, verify_user from .models import User +logger = logging.getLogger(__name__) + +# Header name for admin impersonation +IMPERSONATION_HEADER_NAME = "X-Act-As-User-Id" + async def requires_user(jwt_payload: dict = fastapi.Security(get_jwt_payload)) -> User: """ @@ -32,16 +39,44 @@ async def requires_admin_user( return verify_user(jwt_payload, admin_only=True) -async def get_user_id(jwt_payload: dict = fastapi.Security(get_jwt_payload)) -> str: +async def get_user_id( + request: fastapi.Request, jwt_payload: dict = fastapi.Security(get_jwt_payload) +) -> str: """ FastAPI dependency that returns the ID of the authenticated user. + Supports admin impersonation via X-Act-As-User-Id header: + - If the header is present and user is admin, returns the impersonated user ID + - Otherwise returns the authenticated user's own ID + - Logs all impersonation actions for audit trail + Raises: HTTPException: 401 for authentication failures or missing user ID + HTTPException: 403 if non-admin tries to use impersonation """ + # Get the authenticated user's ID from JWT user_id = jwt_payload.get("sub") if not user_id: raise fastapi.HTTPException( status_code=401, detail="User ID not found in token" ) + + # Check for admin impersonation header + impersonate_header = request.headers.get(IMPERSONATION_HEADER_NAME, "").strip() + if impersonate_header: + # Verify the authenticated user is an admin + authenticated_user = verify_user(jwt_payload, admin_only=False) + if authenticated_user.role != "admin": + raise fastapi.HTTPException( + status_code=403, detail="Only admin users can impersonate other users" + ) + + # Log the impersonation for audit trail + logger.info( + f"Admin impersonation: {authenticated_user.user_id} ({authenticated_user.email}) " + f"acting as user {impersonate_header} for requesting {request.method} {request.url}" + ) + + return impersonate_header + return user_id diff --git a/autogpt_platform/autogpt_libs/autogpt_libs/auth/dependencies_test.py b/autogpt_platform/autogpt_libs/autogpt_libs/auth/dependencies_test.py index 0b9cd6f866..95795c2cfc 100644 --- a/autogpt_platform/autogpt_libs/autogpt_libs/auth/dependencies_test.py +++ b/autogpt_platform/autogpt_libs/autogpt_libs/auth/dependencies_test.py @@ -4,9 +4,10 @@ Tests the full authentication flow from HTTP requests to user validation. """ import os +from unittest.mock import Mock import pytest -from fastapi import FastAPI, HTTPException, Security +from fastapi import FastAPI, HTTPException, Request, Security from fastapi.testclient import TestClient from pytest_mock import MockerFixture @@ -45,6 +46,7 @@ class TestAuthDependencies: """Create a test client.""" return TestClient(app) + @pytest.mark.asyncio async def test_requires_user_with_valid_jwt_payload(self, mocker: MockerFixture): """Test requires_user with valid JWT payload.""" jwt_payload = {"sub": "user-123", "role": "user", "email": "user@example.com"} @@ -58,6 +60,7 @@ class TestAuthDependencies: assert user.user_id == "user-123" assert user.role == "user" + @pytest.mark.asyncio async def test_requires_user_with_admin_jwt_payload(self, mocker: MockerFixture): """Test requires_user accepts admin users.""" jwt_payload = { @@ -73,6 +76,7 @@ class TestAuthDependencies: assert user.user_id == "admin-456" assert user.role == "admin" + @pytest.mark.asyncio async def test_requires_user_missing_sub(self): """Test requires_user with missing user ID.""" jwt_payload = {"role": "user", "email": "user@example.com"} @@ -82,6 +86,7 @@ class TestAuthDependencies: assert exc_info.value.status_code == 401 assert "User ID not found" in exc_info.value.detail + @pytest.mark.asyncio async def test_requires_user_empty_sub(self): """Test requires_user with empty user ID.""" jwt_payload = {"sub": "", "role": "user"} @@ -90,6 +95,7 @@ class TestAuthDependencies: await requires_user(jwt_payload) assert exc_info.value.status_code == 401 + @pytest.mark.asyncio async def test_requires_admin_user_with_admin(self, mocker: MockerFixture): """Test requires_admin_user with admin role.""" jwt_payload = { @@ -105,6 +111,7 @@ class TestAuthDependencies: assert user.user_id == "admin-789" assert user.role == "admin" + @pytest.mark.asyncio async def test_requires_admin_user_with_regular_user(self): """Test requires_admin_user rejects regular users.""" jwt_payload = {"sub": "user-123", "role": "user", "email": "user@example.com"} @@ -114,6 +121,7 @@ class TestAuthDependencies: assert exc_info.value.status_code == 403 assert "Admin access required" in exc_info.value.detail + @pytest.mark.asyncio async def test_requires_admin_user_missing_role(self): """Test requires_admin_user with missing role.""" jwt_payload = {"sub": "user-123", "email": "user@example.com"} @@ -121,31 +129,40 @@ class TestAuthDependencies: with pytest.raises(KeyError): await requires_admin_user(jwt_payload) + @pytest.mark.asyncio async def test_get_user_id_with_valid_payload(self, mocker: MockerFixture): """Test get_user_id extracts user ID correctly.""" + request = Mock(spec=Request) + request.headers = {} jwt_payload = {"sub": "user-id-xyz", "role": "user"} mocker.patch( "autogpt_libs.auth.dependencies.get_jwt_payload", return_value=jwt_payload ) - user_id = await get_user_id(jwt_payload) + user_id = await get_user_id(request, jwt_payload) assert user_id == "user-id-xyz" + @pytest.mark.asyncio async def test_get_user_id_missing_sub(self): """Test get_user_id with missing user ID.""" + request = Mock(spec=Request) + request.headers = {} jwt_payload = {"role": "user"} with pytest.raises(HTTPException) as exc_info: - await get_user_id(jwt_payload) + await get_user_id(request, jwt_payload) assert exc_info.value.status_code == 401 assert "User ID not found" in exc_info.value.detail + @pytest.mark.asyncio async def test_get_user_id_none_sub(self): """Test get_user_id with None user ID.""" + request = Mock(spec=Request) + request.headers = {} jwt_payload = {"sub": None, "role": "user"} with pytest.raises(HTTPException) as exc_info: - await get_user_id(jwt_payload) + await get_user_id(request, jwt_payload) assert exc_info.value.status_code == 401 @@ -170,6 +187,7 @@ class TestAuthDependenciesIntegration: return _create_token + @pytest.mark.asyncio async def test_endpoint_auth_enabled_no_token(self): """Test endpoints require token when auth is enabled.""" app = FastAPI() @@ -184,6 +202,7 @@ class TestAuthDependenciesIntegration: response = client.get("/test") assert response.status_code == 401 + @pytest.mark.asyncio async def test_endpoint_with_valid_token(self, create_token): """Test endpoint with valid JWT token.""" app = FastAPI() @@ -203,6 +222,7 @@ class TestAuthDependenciesIntegration: assert response.status_code == 200 assert response.json()["user_id"] == "test-user" + @pytest.mark.asyncio async def test_admin_endpoint_requires_admin_role(self, create_token): """Test admin endpoint rejects non-admin users.""" app = FastAPI() @@ -240,6 +260,7 @@ class TestAuthDependenciesIntegration: class TestAuthDependenciesEdgeCases: """Edge case tests for authentication dependencies.""" + @pytest.mark.asyncio async def test_dependency_with_complex_payload(self): """Test dependencies handle complex JWT payloads.""" complex_payload = { @@ -263,6 +284,7 @@ class TestAuthDependenciesEdgeCases: admin = await requires_admin_user(complex_payload) assert admin.role == "admin" + @pytest.mark.asyncio async def test_dependency_with_unicode_in_payload(self): """Test dependencies handle unicode in JWT payloads.""" unicode_payload = { @@ -276,6 +298,7 @@ class TestAuthDependenciesEdgeCases: assert "😀" in user.user_id assert user.email == "测试@example.com" + @pytest.mark.asyncio async def test_dependency_with_null_values(self): """Test dependencies handle null values in payload.""" null_payload = { @@ -290,6 +313,7 @@ class TestAuthDependenciesEdgeCases: assert user.user_id == "user-123" assert user.email is None + @pytest.mark.asyncio async def test_concurrent_requests_isolation(self): """Test that concurrent requests don't interfere with each other.""" payload1 = {"sub": "user-1", "role": "user"} @@ -314,6 +338,7 @@ class TestAuthDependenciesEdgeCases: ({"sub": "user", "role": "user"}, "Admin access required", True), ], ) + @pytest.mark.asyncio async def test_dependency_error_cases( self, payload, expected_error: str, admin_only: bool ): @@ -325,6 +350,7 @@ class TestAuthDependenciesEdgeCases: verify_user(payload, admin_only=admin_only) assert expected_error in exc_info.value.detail + @pytest.mark.asyncio async def test_dependency_valid_user(self): """Test valid user case for dependency.""" # Import verify_user to test it directly since dependencies use FastAPI Security @@ -333,3 +359,196 @@ class TestAuthDependenciesEdgeCases: # Valid case user = verify_user({"sub": "user", "role": "user"}, admin_only=False) assert user.user_id == "user" + + +class TestAdminImpersonation: + """Test suite for admin user impersonation functionality.""" + + @pytest.mark.asyncio + async def test_admin_impersonation_success(self, mocker: MockerFixture): + """Test admin successfully impersonating another user.""" + request = Mock(spec=Request) + request.headers = {"X-Act-As-User-Id": "target-user-123"} + jwt_payload = { + "sub": "admin-456", + "role": "admin", + "email": "admin@example.com", + } + + # Mock verify_user to return admin user data + mock_verify_user = mocker.patch("autogpt_libs.auth.dependencies.verify_user") + mock_verify_user.return_value = Mock( + user_id="admin-456", email="admin@example.com", role="admin" + ) + + # Mock logger to verify audit logging + mock_logger = mocker.patch("autogpt_libs.auth.dependencies.logger") + + mocker.patch( + "autogpt_libs.auth.dependencies.get_jwt_payload", return_value=jwt_payload + ) + + user_id = await get_user_id(request, jwt_payload) + + # Should return the impersonated user ID + assert user_id == "target-user-123" + + # Should log the impersonation attempt + mock_logger.info.assert_called_once() + log_call = mock_logger.info.call_args[0][0] + assert "Admin impersonation:" in log_call + assert "admin@example.com" in log_call + assert "target-user-123" in log_call + + @pytest.mark.asyncio + async def test_non_admin_impersonation_attempt(self, mocker: MockerFixture): + """Test non-admin user attempting impersonation returns 403.""" + request = Mock(spec=Request) + request.headers = {"X-Act-As-User-Id": "target-user-123"} + jwt_payload = { + "sub": "regular-user", + "role": "user", + "email": "user@example.com", + } + + # Mock verify_user to return regular user data + mock_verify_user = mocker.patch("autogpt_libs.auth.dependencies.verify_user") + mock_verify_user.return_value = Mock( + user_id="regular-user", email="user@example.com", role="user" + ) + + mocker.patch( + "autogpt_libs.auth.dependencies.get_jwt_payload", return_value=jwt_payload + ) + + with pytest.raises(HTTPException) as exc_info: + await get_user_id(request, jwt_payload) + + assert exc_info.value.status_code == 403 + assert "Only admin users can impersonate other users" in exc_info.value.detail + + @pytest.mark.asyncio + async def test_impersonation_empty_header(self, mocker: MockerFixture): + """Test impersonation with empty header falls back to regular user ID.""" + request = Mock(spec=Request) + request.headers = {"X-Act-As-User-Id": ""} + jwt_payload = { + "sub": "admin-456", + "role": "admin", + "email": "admin@example.com", + } + + mocker.patch( + "autogpt_libs.auth.dependencies.get_jwt_payload", return_value=jwt_payload + ) + + user_id = await get_user_id(request, jwt_payload) + + # Should fall back to the admin's own user ID + assert user_id == "admin-456" + + @pytest.mark.asyncio + async def test_impersonation_missing_header(self, mocker: MockerFixture): + """Test normal behavior when impersonation header is missing.""" + request = Mock(spec=Request) + request.headers = {} # No impersonation header + jwt_payload = { + "sub": "admin-456", + "role": "admin", + "email": "admin@example.com", + } + + mocker.patch( + "autogpt_libs.auth.dependencies.get_jwt_payload", return_value=jwt_payload + ) + + user_id = await get_user_id(request, jwt_payload) + + # Should return the admin's own user ID + assert user_id == "admin-456" + + @pytest.mark.asyncio + async def test_impersonation_audit_logging_details(self, mocker: MockerFixture): + """Test that impersonation audit logging includes all required details.""" + request = Mock(spec=Request) + request.headers = {"X-Act-As-User-Id": "victim-user-789"} + jwt_payload = { + "sub": "admin-999", + "role": "admin", + "email": "superadmin@company.com", + } + + # Mock verify_user to return admin user data + mock_verify_user = mocker.patch("autogpt_libs.auth.dependencies.verify_user") + mock_verify_user.return_value = Mock( + user_id="admin-999", email="superadmin@company.com", role="admin" + ) + + # Mock logger to capture audit trail + mock_logger = mocker.patch("autogpt_libs.auth.dependencies.logger") + + mocker.patch( + "autogpt_libs.auth.dependencies.get_jwt_payload", return_value=jwt_payload + ) + + user_id = await get_user_id(request, jwt_payload) + + # Verify all audit details are logged + assert user_id == "victim-user-789" + mock_logger.info.assert_called_once() + + log_message = mock_logger.info.call_args[0][0] + assert "Admin impersonation:" in log_message + assert "superadmin@company.com" in log_message + assert "victim-user-789" in log_message + + @pytest.mark.asyncio + async def test_impersonation_header_case_sensitivity(self, mocker: MockerFixture): + """Test that impersonation header is case-sensitive.""" + request = Mock(spec=Request) + # Use wrong case - should not trigger impersonation + request.headers = {"x-act-as-user-id": "target-user-123"} + jwt_payload = { + "sub": "admin-456", + "role": "admin", + "email": "admin@example.com", + } + + mocker.patch( + "autogpt_libs.auth.dependencies.get_jwt_payload", return_value=jwt_payload + ) + + user_id = await get_user_id(request, jwt_payload) + + # Should fall back to admin's own ID (header case mismatch) + assert user_id == "admin-456" + + @pytest.mark.asyncio + async def test_impersonation_with_whitespace_header(self, mocker: MockerFixture): + """Test impersonation with whitespace in header value.""" + request = Mock(spec=Request) + request.headers = {"X-Act-As-User-Id": " target-user-123 "} + jwt_payload = { + "sub": "admin-456", + "role": "admin", + "email": "admin@example.com", + } + + # Mock verify_user to return admin user data + mock_verify_user = mocker.patch("autogpt_libs.auth.dependencies.verify_user") + mock_verify_user.return_value = Mock( + user_id="admin-456", email="admin@example.com", role="admin" + ) + + # Mock logger + mock_logger = mocker.patch("autogpt_libs.auth.dependencies.logger") + + mocker.patch( + "autogpt_libs.auth.dependencies.get_jwt_payload", return_value=jwt_payload + ) + + user_id = await get_user_id(request, jwt_payload) + + # Should strip whitespace and impersonate successfully + assert user_id == "target-user-123" + mock_logger.info.assert_called_once() diff --git a/autogpt_platform/frontend/.npmrc b/autogpt_platform/frontend/.npmrc index 15cb462b44..6a028fa5c3 100644 --- a/autogpt_platform/frontend/.npmrc +++ b/autogpt_platform/frontend/.npmrc @@ -1,2 +1,3 @@ # Configure pnpm to save exact versions -save-exact=true \ No newline at end of file +save-exact=true +engine-strict=true \ No newline at end of file diff --git a/autogpt_platform/frontend/package.json b/autogpt_platform/frontend/package.json index 9a383abfb6..8bbdcff9cd 100644 --- a/autogpt_platform/frontend/package.json +++ b/autogpt_platform/frontend/package.json @@ -2,6 +2,9 @@ "name": "frontend", "version": "0.3.4", "private": true, + "engines": { + "node": "22.x" + }, "scripts": { "dev": "pnpm run generate:api:force && next dev --turbo", "build": "next build", @@ -26,7 +29,7 @@ ], "dependencies": { "@faker-js/faker": "10.0.0", - "@hookform/resolvers": "5.2.1", + "@hookform/resolvers": "5.2.2", "@marsidev/react-turnstile": "1.3.1", "@next/third-parties": "15.4.6", "@phosphor-icons/react": "2.1.10", @@ -52,49 +55,49 @@ "@rjsf/core": "5.24.13", "@rjsf/utils": "5.24.13", "@rjsf/validator-ajv8": "5.24.13", - "@sentry/nextjs": "10.15.0", - "@supabase/ssr": "0.6.1", - "@supabase/supabase-js": "2.55.0", - "@tanstack/react-query": "5.87.1", + "@sentry/nextjs": "10.22.0", + "@supabase/ssr": "0.7.0", + "@supabase/supabase-js": "2.78.0", + "@tanstack/react-query": "5.90.6", "@tanstack/react-table": "8.21.3", "@types/jaro-winkler": "0.2.4", "@vercel/analytics": "1.5.0", "@vercel/speed-insights": "1.2.0", - "@xyflow/react": "12.8.3", + "@xyflow/react": "12.9.2", "boring-avatars": "1.11.2", "class-variance-authority": "0.7.1", "clsx": "2.1.1", "cmdk": "1.1.1", "cookie": "1.0.2", "date-fns": "4.1.0", - "dotenv": "17.2.1", + "dotenv": "17.2.3", "elliptic": "6.6.1", "embla-carousel-react": "8.6.0", - "framer-motion": "12.23.12", - "geist": "1.4.2", + "framer-motion": "12.23.24", + "geist": "1.5.1", "highlight.js": "11.11.1", "jaro-winkler": "0.2.8", - "katex": "0.16.22", - "launchdarkly-react-client-sdk": "3.8.1", + "katex": "0.16.25", + "launchdarkly-react-client-sdk": "3.9.0", "lodash": "4.17.21", - "lucide-react": "0.539.0", + "lucide-react": "0.552.0", "moment": "2.30.1", "next": "15.4.7", "next-themes": "0.4.6", - "nuqs": "2.4.3", + "nuqs": "2.7.2", "party-js": "2.2.0", "react": "18.3.1", "react-currency-input-field": "4.0.3", - "react-day-picker": "9.8.1", + "react-day-picker": "9.11.1", "react-dom": "18.3.1", "react-drag-drop-files": "2.4.0", - "react-hook-form": "7.62.0", + "react-hook-form": "7.66.0", "react-icons": "5.5.0", "react-markdown": "9.0.3", "react-modal": "3.16.3", "react-shepherd": "6.1.9", "react-window": "1.8.11", - "recharts": "3.1.2", + "recharts": "3.3.0", "rehype-autolink-headings": "7.1.0", "rehype-highlight": "7.0.2", "rehype-katex": "7.0.1", @@ -112,47 +115,47 @@ "zustand": "5.0.8" }, "devDependencies": { - "@chromatic-com/storybook": "4.1.1", - "@playwright/test": "1.55.0", + "@chromatic-com/storybook": "4.1.2", + "@playwright/test": "1.56.1", "@storybook/addon-a11y": "9.1.5", "@storybook/addon-docs": "9.1.5", "@storybook/addon-links": "9.1.5", "@storybook/addon-onboarding": "9.1.5", "@storybook/nextjs": "9.1.5", - "@tanstack/eslint-plugin-query": "5.86.0", - "@tanstack/react-query-devtools": "5.87.3", + "@tanstack/eslint-plugin-query": "5.91.2", + "@tanstack/react-query-devtools": "5.90.2", "@types/canvas-confetti": "1.9.0", "@types/lodash": "4.17.20", "@types/negotiator": "0.6.4", - "@types/node": "24.3.1", + "@types/node": "24.10.0", "@types/react": "18.3.17", "@types/react-dom": "18.3.5", "@types/react-modal": "3.16.3", "@types/react-window": "1.8.8", - "axe-playwright": "2.1.0", - "chromatic": "13.1.4", + "axe-playwright": "2.2.2", + "chromatic": "13.3.3", "concurrently": "9.2.1", "cross-env": "7.0.3", "eslint": "8.57.1", "eslint-config-next": "15.5.2", "eslint-plugin-storybook": "9.1.5", "import-in-the-middle": "1.14.2", - "msw": "2.11.1", - "msw-storybook-addon": "2.0.5", - "orval": "7.11.2", - "pbkdf2": "3.1.3", + "msw": "2.11.6", + "msw-storybook-addon": "2.0.6", + "orval": "7.13.0", + "pbkdf2": "3.1.5", "postcss": "8.5.6", "prettier": "3.6.2", - "prettier-plugin-tailwindcss": "0.6.14", + "prettier-plugin-tailwindcss": "0.7.1", "require-in-the-middle": "7.5.2", "storybook": "9.1.5", "tailwindcss": "3.4.17", - "typescript": "5.9.2" + "typescript": "5.9.3" }, "msw": { "workerDirectory": [ "public" ] }, - "packageManager": "pnpm@10.11.1+sha256.211e9990148495c9fc30b7e58396f7eeda83d9243eb75407ea4f8650fb161f7c" + "packageManager": "pnpm@10.20.0+sha512.cf9998222162dd85864d0a8102e7892e7ba4ceadebbf5a31f9c2fce48dfce317a9c53b9f6464d1ef9042cba2e02ae02a9f7c143a2b438cd93c91840f0192b9dd" } diff --git a/autogpt_platform/frontend/pnpm-lock.yaml b/autogpt_platform/frontend/pnpm-lock.yaml index 002639cdcc..aa80e5b21f 100644 --- a/autogpt_platform/frontend/pnpm-lock.yaml +++ b/autogpt_platform/frontend/pnpm-lock.yaml @@ -12,14 +12,14 @@ importers: specifier: 10.0.0 version: 10.0.0 '@hookform/resolvers': - specifier: 5.2.1 - version: 5.2.1(react-hook-form@7.62.0(react@18.3.1)) + specifier: 5.2.2 + version: 5.2.2(react-hook-form@7.66.0(react@18.3.1)) '@marsidev/react-turnstile': specifier: 1.3.1 version: 1.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@next/third-parties': specifier: 15.4.6 - version: 15.4.6(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 15.4.6(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@phosphor-icons/react': specifier: 2.1.10 version: 2.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -90,17 +90,17 @@ importers: specifier: 5.24.13 version: 5.24.13(@rjsf/utils@5.24.13(react@18.3.1)) '@sentry/nextjs': - specifier: 10.15.0 - version: 10.15.0(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.101.3(esbuild@0.25.9)) + specifier: 10.22.0 + version: 10.22.0(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.101.3(esbuild@0.25.9)) '@supabase/ssr': - specifier: 0.6.1 - version: 0.6.1(@supabase/supabase-js@2.55.0) + specifier: 0.7.0 + version: 0.7.0(@supabase/supabase-js@2.78.0) '@supabase/supabase-js': - specifier: 2.55.0 - version: 2.55.0 + specifier: 2.78.0 + version: 2.78.0 '@tanstack/react-query': - specifier: 5.87.1 - version: 5.87.1(react@18.3.1) + specifier: 5.90.6 + version: 5.90.6(react@18.3.1) '@tanstack/react-table': specifier: 8.21.3 version: 8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -109,13 +109,13 @@ importers: version: 0.2.4 '@vercel/analytics': specifier: 1.5.0 - version: 1.5.0(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 1.5.0(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@vercel/speed-insights': specifier: 1.2.0 - version: 1.2.0(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 1.2.0(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@xyflow/react': - specifier: 12.8.3 - version: 12.8.3(@types/react@18.3.17)(immer@10.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 12.9.2 + version: 12.9.2(@types/react@18.3.17)(immer@10.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) boring-avatars: specifier: 1.11.2 version: 1.11.2 @@ -135,8 +135,8 @@ importers: specifier: 4.1.0 version: 4.1.0 dotenv: - specifier: 17.2.1 - version: 17.2.1 + specifier: 17.2.3 + version: 17.2.3 elliptic: specifier: 6.6.1 version: 6.6.1 @@ -144,11 +144,11 @@ importers: specifier: 8.6.0 version: 8.6.0(react@18.3.1) framer-motion: - specifier: 12.23.12 - version: 12.23.12(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 12.23.24 + version: 12.23.24(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) geist: - specifier: 1.4.2 - version: 1.4.2(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + specifier: 1.5.1 + version: 1.5.1(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) highlight.js: specifier: 11.11.1 version: 11.11.1 @@ -156,29 +156,29 @@ importers: specifier: 0.2.8 version: 0.2.8 katex: - specifier: 0.16.22 - version: 0.16.22 + specifier: 0.16.25 + version: 0.16.25 launchdarkly-react-client-sdk: - specifier: 3.8.1 - version: 3.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 3.9.0 + version: 3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) lodash: specifier: 4.17.21 version: 4.17.21 lucide-react: - specifier: 0.539.0 - version: 0.539.0(react@18.3.1) + specifier: 0.552.0 + version: 0.552.0(react@18.3.1) moment: specifier: 2.30.1 version: 2.30.1 next: specifier: 15.4.7 - version: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: 0.4.6 version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) nuqs: - specifier: 2.4.3 - version: 2.4.3(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + specifier: 2.7.2 + version: 2.7.2(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) party-js: specifier: 2.2.0 version: 2.2.0 @@ -189,8 +189,8 @@ importers: specifier: 4.0.3 version: 4.0.3(react@18.3.1) react-day-picker: - specifier: 9.8.1 - version: 9.8.1(react@18.3.1) + specifier: 9.11.1 + version: 9.11.1(react@18.3.1) react-dom: specifier: 18.3.1 version: 18.3.1(react@18.3.1) @@ -198,8 +198,8 @@ importers: specifier: 2.4.0 version: 2.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-hook-form: - specifier: 7.62.0 - version: 7.62.0(react@18.3.1) + specifier: 7.66.0 + version: 7.66.0(react@18.3.1) react-icons: specifier: 5.5.0 version: 5.5.0(react@18.3.1) @@ -211,13 +211,13 @@ importers: version: 3.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-shepherd: specifier: 6.1.9 - version: 6.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2) + version: 6.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) react-window: specifier: 1.8.11 version: 1.8.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) recharts: - specifier: 3.1.2 - version: 3.1.2(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(redux@5.0.1) + specifier: 3.3.0 + version: 3.3.0(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(redux@5.0.1) rehype-autolink-headings: specifier: 7.1.0 version: 7.1.0 @@ -265,32 +265,32 @@ importers: version: 5.0.8(@types/react@18.3.17)(immer@10.1.3)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) devDependencies: '@chromatic-com/storybook': - specifier: 4.1.1 - version: 4.1.1(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2)) + specifier: 4.1.2 + version: 4.1.2(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2)) '@playwright/test': - specifier: 1.55.0 - version: 1.55.0 + specifier: 1.56.1 + version: 1.56.1 '@storybook/addon-a11y': specifier: 9.1.5 - version: 9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2)) + version: 9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2)) '@storybook/addon-docs': specifier: 9.1.5 - version: 9.1.5(@types/react@18.3.17)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2)) + version: 9.1.5(@types/react@18.3.17)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2)) '@storybook/addon-links': specifier: 9.1.5 - version: 9.1.5(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2)) + version: 9.1.5(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2)) '@storybook/addon-onboarding': specifier: 9.1.5 - version: 9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2)) + version: 9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2)) '@storybook/nextjs': specifier: 9.1.5 - version: 9.1.5(esbuild@0.25.9)(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))(type-fest@4.41.0)(typescript@5.9.2)(webpack-hot-middleware@2.26.1)(webpack@5.101.3(esbuild@0.25.9)) + version: 9.1.5(esbuild@0.25.9)(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))(type-fest@4.41.0)(typescript@5.9.3)(webpack-hot-middleware@2.26.1)(webpack@5.101.3(esbuild@0.25.9)) '@tanstack/eslint-plugin-query': - specifier: 5.86.0 - version: 5.86.0(eslint@8.57.1)(typescript@5.9.2) + specifier: 5.91.2 + version: 5.91.2(eslint@8.57.1)(typescript@5.9.3) '@tanstack/react-query-devtools': - specifier: 5.87.3 - version: 5.87.3(@tanstack/react-query@5.87.1(react@18.3.1))(react@18.3.1) + specifier: 5.90.2 + version: 5.90.2(@tanstack/react-query@5.90.6(react@18.3.1))(react@18.3.1) '@types/canvas-confetti': specifier: 1.9.0 version: 1.9.0 @@ -301,8 +301,8 @@ importers: specifier: 0.6.4 version: 0.6.4 '@types/node': - specifier: 24.3.1 - version: 24.3.1 + specifier: 24.10.0 + version: 24.10.0 '@types/react': specifier: 18.3.17 version: 18.3.17 @@ -316,11 +316,11 @@ importers: specifier: 1.8.8 version: 1.8.8 axe-playwright: - specifier: 2.1.0 - version: 2.1.0(playwright@1.55.0) + specifier: 2.2.2 + version: 2.2.2(playwright@1.56.1) chromatic: - specifier: 13.1.4 - version: 13.1.4 + specifier: 13.3.3 + version: 13.3.3 concurrently: specifier: 9.2.1 version: 9.2.1 @@ -332,25 +332,25 @@ importers: version: 8.57.1 eslint-config-next: specifier: 15.5.2 - version: 15.5.2(eslint@8.57.1)(typescript@5.9.2) + version: 15.5.2(eslint@8.57.1)(typescript@5.9.3) eslint-plugin-storybook: specifier: 9.1.5 - version: 9.1.5(eslint@8.57.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))(typescript@5.9.2) + version: 9.1.5(eslint@8.57.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))(typescript@5.9.3) import-in-the-middle: specifier: 1.14.2 version: 1.14.2 msw: - specifier: 2.11.1 - version: 2.11.1(@types/node@24.3.1)(typescript@5.9.2) + specifier: 2.11.6 + version: 2.11.6(@types/node@24.10.0)(typescript@5.9.3) msw-storybook-addon: - specifier: 2.0.5 - version: 2.0.5(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2)) + specifier: 2.0.6 + version: 2.0.6(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3)) orval: - specifier: 7.11.2 - version: 7.11.2(openapi-types@12.1.3) + specifier: 7.13.0 + version: 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) pbkdf2: - specifier: 3.1.3 - version: 3.1.3 + specifier: 3.1.5 + version: 3.1.5 postcss: specifier: 8.5.6 version: 8.5.6 @@ -358,20 +358,20 @@ importers: specifier: 3.6.2 version: 3.6.2 prettier-plugin-tailwindcss: - specifier: 0.6.14 - version: 0.6.14(prettier@3.6.2) + specifier: 0.7.1 + version: 0.7.1(prettier@3.6.2) require-in-the-middle: specifier: 7.5.2 version: 7.5.2 storybook: specifier: 9.1.5 - version: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2) + version: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2) tailwindcss: specifier: 3.4.17 version: 3.4.17 typescript: - specifier: 5.9.2 - version: 5.9.2 + specifier: 5.9.3 + version: 5.9.3 packages: @@ -382,8 +382,8 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@apidevtools/json-schema-ref-parser@11.7.2': - resolution: {integrity: sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA==} + '@apidevtools/json-schema-ref-parser@14.0.1': + resolution: {integrity: sha512-Oc96zvmxx1fqoSEdUmfmvvb59/KDOnUoJ7s2t7bISyAn0XEz57LCCw8k2Y4Pf3mwKaZLMciESALORLgfe2frCw==} engines: {node: '>= 16'} '@apidevtools/openapi-schemas@2.1.0': @@ -393,13 +393,19 @@ packages: '@apidevtools/swagger-methods@3.0.2': resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==} - '@apidevtools/swagger-parser@10.1.1': - resolution: {integrity: sha512-u/kozRnsPO/x8QtKYJOqoGtC4kH6yg1lfYkB9Au0WhYB0FNLpyFusttQtvhlwjtG3rOwiRz4D8DnnXa8iEpIKA==} + '@apidevtools/swagger-parser@12.1.0': + resolution: {integrity: sha512-e5mJoswsnAX0jG+J09xHFYQXb/bUc5S3pLpMxUuRUA2H8T2kni3yEoyz2R3Dltw5f4A6j6rPNMpWTK+iVDFlng==} peerDependencies: openapi-types: '>=7' - '@asyncapi/specs@6.9.0': - resolution: {integrity: sha512-gatFEH2hfJXWmv3vogIjBZfiIbPRC/ISn9UEHZZLZDdMBO0USxt3AFgCC9AY1P+eNE7zjXddXCIT7gz32XOK4g==} + '@apm-js-collab/code-transformer@0.8.2': + resolution: {integrity: sha512-YRjJjNq5KFSjDUoqu5pFUWrrsvGOxl6c3bu+uMFc9HNNptZ2rNU/TI2nLw4jnhQNtka972Ee2m3uqbvDQtPeCA==} + + '@apm-js-collab/tracing-hooks@0.3.1': + resolution: {integrity: sha512-Vu1CbmPURlN5fTboVuKMoJjbO5qcq9fA5YXpskx3dXe/zTBvjODFoerw+69rVBlRLrJpwPqSDqEuJDEKIrTldw==} + + '@asyncapi/specs@6.10.0': + resolution: {integrity: sha512-vB5oKLsdrLUORIZ5BXortZTlVyGWWMC1Nud/0LtgxQ3Yn2738HigAD6EVqScvpPsDUI/bcLVsYEXN4dtXQHVng==} '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} @@ -966,20 +972,19 @@ packages: resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} - '@bundled-es-modules/cookie@2.0.1': - resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} - - '@bundled-es-modules/statuses@1.0.1': - resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} - - '@chromatic-com/storybook@4.1.1': - resolution: {integrity: sha512-+Ib4cHtEjKl/Do+4LyU0U1FhLPbIU2Q/zgbOKHBCV+dTC4T3/vGzPqiGsgkdnZyTsK/zXg96LMPSPC4jjOiapg==} + '@chromatic-com/storybook@4.1.2': + resolution: {integrity: sha512-QAWGtHwib0qsP5CcO64aJCF75zpFgpKK3jNpxILzQiPK3sVo4EmnVGJVdwcZWpWrGdH8E4YkncGoitw4EXzKMg==} engines: {node: '>=20.0.0', yarn: '>=1.22.18'} peerDependencies: - storybook: ^0.0.0-0 || ^9.0.0 || ^9.1.0-0 || ^9.2.0-0 || ^10.0.0-0 + storybook: ^0.0.0-0 || ^9.0.0 || ^9.1.0-0 || ^9.2.0-0 || ^10.0.0-0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 - '@date-fns/tz@1.2.0': - resolution: {integrity: sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==} + '@commander-js/extra-typings@14.0.0': + resolution: {integrity: sha512-hIn0ncNaJRLkZrxBIp5AsW/eXEHNKYQBh0aPdoUqNgD+Io3NIykQqpKFyKcuasZhicGaEZJX/JBSIkZ4e5x8Dg==} + peerDependencies: + commander: ~14.0.0 + + '@date-fns/tz@1.4.1': + resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} '@emnapi/core@1.5.0': resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} @@ -999,156 +1004,312 @@ packages: '@emotion/unitless@0.8.1': resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + '@esbuild/aix-ppc64@0.25.11': + resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.25.9': resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.25.11': + resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.25.9': resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.25.11': + resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.25.9': resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.25.11': + resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.25.9': resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.25.11': + resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.25.9': resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.25.11': + resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.25.9': resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.25.11': + resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.25.9': resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.11': + resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.25.9': resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.25.11': + resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.25.9': resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.25.11': + resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.25.9': resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.25.11': + resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.25.9': resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.25.11': + resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.25.9': resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.25.11': + resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.25.9': resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.25.11': + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.25.9': resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.25.11': + resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.25.9': resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.25.11': + resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.25.9': resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.25.11': + resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.25.9': resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.25.11': + resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.25.9': resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.11': + resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.25.9': resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.25.11': + resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.25.9': resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.11': + resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.25.9': resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openharmony-arm64@0.25.11': + resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.25.9': resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.25.11': + resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.25.9': resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.25.11': + resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.25.9': resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.25.11': + resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.25.9': resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.25.11': + resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.25.9': resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} engines: {node: '>=18'} @@ -1195,11 +1356,11 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - '@gerrit0/mini-shiki@3.9.2': - resolution: {integrity: sha512-Tvsj+AOO4Z8xLRJK900WkyfxHsZQu+Zm1//oT1w443PO6RiYMoq/4NGOhaNuZoUMYsjKIAPVQ6eOFMddj6yphQ==} + '@gerrit0/mini-shiki@3.14.0': + resolution: {integrity: sha512-c5X8fwPLOtUS8TVdqhynz9iV0GlOtFUT1ppXYzUUlEXe4kbZ/mvMT8wXoT8kCwUka+zsiloq7sD3pZ3+QVTuNQ==} - '@hookform/resolvers@5.2.1': - resolution: {integrity: sha512-u0+6X58gkjMcxur1wRWokA7XsiiBJ6aK17aPZxhkoYiK5J+HcTx0Vhu9ovXe6H+dVpO6cjrn2FkJTryXEMlryQ==} + '@hookform/resolvers@5.2.2': + resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==} peerDependencies: react-hook-form: ^7.55.0 @@ -1220,8 +1381,8 @@ packages: resolution: {integrity: sha512-AoFbSarOqFBYH+1TZ9Ahkm2IWYSi5v0pBk88fpV+5b3qGJukypX8PwvCWADjuyIccKg48/F73a6hTTkBzDQ2UA==} engines: {node: '>=16.0.0'} - '@ibm-cloud/openapi-ruleset@1.31.2': - resolution: {integrity: sha512-g3YYNTiX6zW7quFvDD9szu+54oHj6+4vz8g3/ikOacVsVEX072CvhjX9zRZf1WH4zDXv8KbprsxV+osZQbXPlg==} + '@ibm-cloud/openapi-ruleset@1.33.3': + resolution: {integrity: sha512-lOxglXIzUZwsw5WsbgZraxxzAYMdXYyiMNOioxYJYTd55ZuN4XEERoPdV5v1oPTdKedHEUSQu5siiSHToENFdA==} engines: {node: '>=16.0.0'} '@img/sharp-darwin-arm64@0.34.3': @@ -1346,8 +1507,12 @@ packages: cpu: [x64] os: [win32] - '@inquirer/confirm@5.1.16': - resolution: {integrity: sha512-j1a5VstaK5KQy8Mu8cHmuQvN1Zc62TbLhjJxwHvKPPKEoowSF6h/0UdOpA9DNdWZ+9Inq73+puRq1df6OJ8Sag==} + '@inquirer/ansi@1.0.1': + resolution: {integrity: sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==} + engines: {node: '>=18'} + + '@inquirer/confirm@5.1.19': + resolution: {integrity: sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1355,8 +1520,8 @@ packages: '@types/node': optional: true - '@inquirer/core@10.2.0': - resolution: {integrity: sha512-NyDSjPqhSvpZEMZrLCYUquWNl+XC/moEcVFqS55IEYIYsY0a1cUCevSqk7ctOlnm/RaSBU5psFryNlxcmGrjaA==} + '@inquirer/core@10.3.0': + resolution: {integrity: sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1364,12 +1529,12 @@ packages: '@types/node': optional: true - '@inquirer/figures@1.0.13': - resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} + '@inquirer/figures@1.0.14': + resolution: {integrity: sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==} engines: {node: '>=18'} - '@inquirer/type@3.0.8': - resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} + '@inquirer/type@3.0.9': + resolution: {integrity: sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1400,9 +1565,6 @@ packages: '@jridgewell/trace-mapping@0.3.30': resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} - '@jsdevtools/ono@7.1.3': - resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - '@jsep-plugin/assignment@1.3.0': resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==} engines: {node: '>= 10.16.0'} @@ -1433,8 +1595,8 @@ packages: '@types/react': '>=16' react: '>=16' - '@mswjs/interceptors@0.39.6': - resolution: {integrity: sha512-bndDP83naYYkfayr/qhBHMhk0YGwS1iv6vaEGcr0SQbO0IZtbOPqjKjds/WcG+bJA+1T5vCx6kprKOzn5Bg+Vw==} + '@mswjs/interceptors@0.40.0': + resolution: {integrity: sha512-EFd6cVbHsgLa6wa4RljGj6Wk75qoHxUSyc5asLyyPSyuhIcdS2Q3Phw6ImS1q+CkALthJRShiYfKANcQMuMqsQ==} engines: {node: '>=18'} '@napi-rs/wasm-runtime@0.2.12': @@ -1722,35 +1884,35 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 - '@orval/angular@7.11.2': - resolution: {integrity: sha512-v7I3MXlc1DTFHZlCo10uqBmss/4puXi1EbYdlYGfeZ2sYQiwtRFEYAMnSIxHzMtdtI4jd7iDEH0fZRA7W6yloA==} + '@orval/angular@7.13.0': + resolution: {integrity: sha512-r/qKpfBWMilze0fzGpguFLOzSGS5AxI8Heaw8+zJ4Nky2+OURDCR2ImCCbeNz0rp12Vd8ovpgEUQIYTbciaapw==} - '@orval/axios@7.11.2': - resolution: {integrity: sha512-X5TJTFofCeJrQcHWoH0wz/032DBhPOQuZUUOPYO3DItOnq9/nfHJYKnUfg13wtYw0LVjCxyTZpeGLUBZnY804A==} + '@orval/axios@7.13.0': + resolution: {integrity: sha512-Uf7wvP94TEbgAMd6ueBNEiw7YtmCvc8Heu/aTpIoQj1aas5myG4DS22udgtuxo17UiGryuX8pwYITltX64lrUw==} - '@orval/core@7.11.2': - resolution: {integrity: sha512-5k2j4ro53yZ3J+tGMu3LpLgVb2OBtxNDgyrJik8qkrFyuORBLx/a+AJRFoPYwZmtnMZzzRXoH4J/fbpW5LXIyg==} + '@orval/core@7.13.0': + resolution: {integrity: sha512-fGwf/ZtwEbiSV1keKunGI7Tu6N6f95LlurBHC1fjsOhixzzVzJS3QofHvuYPtckOPRdMEWjAJsiQCpgrB4OOpw==} - '@orval/fetch@7.11.2': - resolution: {integrity: sha512-FuupASqk4Dn8ZET7u5Ra5djKy22KfRfec60zRR/o5+L5iQkWKEe/A5DBT1PwjTMnp9789PEGlFPQjZNwMG98Tg==} + '@orval/fetch@7.13.0': + resolution: {integrity: sha512-B5aI7GG1Xsfw1DIGqKaEGAZei516cJq+NfB1Fy5gZEuvoQUjvTzm9yIw4F85TZEaaMzad/ZqvpySg8bjSfW7vA==} - '@orval/hono@7.11.2': - resolution: {integrity: sha512-SddhKMYMB/dJH3YQx3xi0Zd+4tfhrEkqJdqQaYLXgENJiw0aGbdaZTdY6mb/e6qP38TTK6ME2PkYOqwkl2DQ7g==} + '@orval/hono@7.13.0': + resolution: {integrity: sha512-B9OvDAYch63KoC0wL99xXLBS0oTCO+rvT+yxBu+tMfoovvWj5cQLeX/DbZa/896MxyfiD/z9dCHuUtzLPaLxzQ==} - '@orval/mcp@7.11.2': - resolution: {integrity: sha512-9kGKko8wLuCbeETp8Pd8lXLtBpLzEJfR2kl2m19AI3nAoHXE/Tnn3KgjMIg0qvCcsRXGXdYJB7wfxy2URdAxVA==} + '@orval/mcp@7.13.0': + resolution: {integrity: sha512-ESH3zoLptftH++DxVr0okToysixdIsDo0eSrtRk0CeKZyGm03UmCnsBplF/xI3WvuImEWO46CrbBYlrHWvGgLg==} - '@orval/mock@7.11.2': - resolution: {integrity: sha512-+uRq6BT6NU2z0UQtgeD6FMuLAxQ5bjJ5PZK3AsbDYFRSmAWUWoeaQcoWyF38F4t7ez779beGs3AlUg+z0Ec4rQ==} + '@orval/mock@7.13.0': + resolution: {integrity: sha512-6qunGaem/s+jkxhtummbEOeJ/ab4dVydFJ9AxmI1mZVevMVz4lbD9Yyq9IQpZhn1G++amOtDyDQ4AC8RRvOzAg==} - '@orval/query@7.11.2': - resolution: {integrity: sha512-C/it+wNfcDtuvpB6h/78YwWU+Rjk7eU1Av8jAoGnvxMRli4nnzhSZ83HMILGhYQbE9WcfNZxQJ6OaBoTWqACPg==} + '@orval/query@7.13.0': + resolution: {integrity: sha512-5E1obQpt81ixJ62UsMr82DODYXl39oSccbXZ8EVv6oROhJyanFks///9WrKEqQPXIzPfqlStyjaY6bJvCjC8JA==} - '@orval/swr@7.11.2': - resolution: {integrity: sha512-95GkKLVy67xJvsiVvK4nTOsCpebWM54FvQdKQaqlJ0FGCNUbqDjVRwBKbjP6dLc/B3wTmBAWlFSLbdVmjGCTYg==} + '@orval/swr@7.13.0': + resolution: {integrity: sha512-SwORHlcLzbidhmxHGh8NET6ZxUZeMikfO+bI6vsayHpopCD7EkJNmbn4v3mDg1bwdzFP8M4drffKVj47KR9AAQ==} - '@orval/zod@7.11.2': - resolution: {integrity: sha512-4MzTg5Wms8/LlM3CbYu80dvCbP88bVlQjnYsBdFXuEv0K2GYkBCAhVOrmXCVrPXE89neV6ABkvWQeuKZQpkdxQ==} + '@orval/zod@7.13.0': + resolution: {integrity: sha512-jEEj0uRO5D5D1CHKQdth5Atl5Ap4/P21SMiOFmVpiArlXr4LQtMpbkiPVM2tsQXIhtC38c9oMt8+rOx1rYSjcw==} '@phosphor-icons/react@2.1.10': resolution: {integrity: sha512-vt8Tvq8GLjheAZZYa+YG/pW7HDbov8El/MANW8pOAz4eGxrwhnbfrQZq0Cp4q8zBEu8NIhHdnr+r8thnfRSNYA==} @@ -1763,8 +1925,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.55.0': - resolution: {integrity: sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==} + '@playwright/test@1.56.1': + resolution: {integrity: sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==} engines: {node: '>=18'} hasBin: true @@ -2479,28 +2641,28 @@ packages: '@scarf/scarf@1.4.0': resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} - '@sentry-internal/browser-utils@10.15.0': - resolution: {integrity: sha512-hJxo6rj3cMqiYlZd6PC8o/i2FG6hRnZdHcJkfm1HXgWCRgdCPilKghL6WU+B2H5dLyRKJ17nWjDAVQPRdCxO9w==} + '@sentry-internal/browser-utils@10.22.0': + resolution: {integrity: sha512-BpJoLZEyJr7ORzkCrIjxRTnFWwO1mJNICVh3B9g5d9245niGT4OJvRozmLz89WgJkZFHWu84ls6Xfq5b/3tGFQ==} engines: {node: '>=18'} - '@sentry-internal/feedback@10.15.0': - resolution: {integrity: sha512-EP+NvdU9yfmepGzQwz0jnqhd0DBxHzrP16TsJIVXJe93QJ+gumdN3XQ0lvYtEC9zHuU08DghRLjfI1kLRfGzdQ==} + '@sentry-internal/feedback@10.22.0': + resolution: {integrity: sha512-zXySOin/gGHPV+yKaHqjN9YZ7psEJwzLn8PzCLeo+4REzF1eQwbYZIgOxJFD32z8s3nZiABSWFM/n1CvVfMEsQ==} engines: {node: '>=18'} - '@sentry-internal/replay-canvas@10.15.0': - resolution: {integrity: sha512-SXgUWArk+haUJ24W6pIm9IiwmIk3WxeQyFUxFfMUetSRb06CVAoNjPb0YuzKIeuFYJb6hDPGQ9UWhShnQpTmkw==} + '@sentry-internal/replay-canvas@10.22.0': + resolution: {integrity: sha512-DE4JNUskJg+O+wFq42W5gAa/99aD5k7TfGOwABxvnzFv8vkKA7pqXwPbFFPzypdKIkln+df7RmbnDwQRNg6/lA==} engines: {node: '>=18'} - '@sentry-internal/replay@10.15.0': - resolution: {integrity: sha512-vHBAFVdDfa51oqPWyRCK4fOIFhFeE2mVlqBWrBb+S3vCNcmtpvqJUq6o4sjSYcQzdZQpMSp5/Lj8Y3a8x/ed7w==} + '@sentry-internal/replay@10.22.0': + resolution: {integrity: sha512-JNE4kHAQSG4/V+J+Zog3vKBWgOe9H33ol/MEU1RuLM/4I+uLf4mTetwnS9ilpnnW/Z/gQYfA+R3CiMrZtqTivw==} engines: {node: '>=18'} '@sentry/babel-plugin-component-annotate@4.3.0': resolution: {integrity: sha512-OuxqBprXRyhe8Pkfyz/4yHQJc5c3lm+TmYWSSx8u48g5yKewSQDOxkiLU5pAk3WnbLPy8XwU/PN+2BG0YFU9Nw==} engines: {node: '>= 14'} - '@sentry/browser@10.15.0': - resolution: {integrity: sha512-YV42VgW7xdmY23u7+nQLNJXDVilNTP0d5WWkHDxeI/uD6AAvn3GyKjx1YMG/KCulxva3dPDPEUunzDm3al26Sw==} + '@sentry/browser@10.22.0': + resolution: {integrity: sha512-wD2XqN+yeBpQFfdPo6+wlKDMyyuDctVGzZWE4qTPntICKQuwMdAfeq5Ma89ad0Dw+bzG9UijGeyuJQlswF87Mw==} engines: {node: '>=18'} '@sentry/bundler-plugin-core@4.3.0': @@ -2559,18 +2721,18 @@ packages: engines: {node: '>= 10'} hasBin: true - '@sentry/core@10.15.0': - resolution: {integrity: sha512-J7WsQvb9G6nsVgWkTHwyX7wR2djtEACYCx19hAnRbSGIg+ysVG+7Ti3RL4bz9/VXfcxsz346cleKc7ljhynYlQ==} + '@sentry/core@10.22.0': + resolution: {integrity: sha512-V1oeHbrOKzxadsCmgtPku3v3Emo/Bpb3VSuKmlLrQefiHX98MWtjJ3XDGfduzD5/dCdh0r/OOLwjcmrO/PZ2aw==} engines: {node: '>=18'} - '@sentry/nextjs@10.15.0': - resolution: {integrity: sha512-u3WLeeYgQH2Ug2SSdUu5ChMDKnWXeDXP7Bn+dRO01Y1/5NrMjoXO2w33ak03SLaZltPJFsRuMcfBtYoLA9BNlw==} + '@sentry/nextjs@10.22.0': + resolution: {integrity: sha512-9Np176cDMLTl98QRqESe6STyaQ0SKiWTDRdF3GPYPEB9s4t5Qz2zZJ9A40Fz3fZ33kW4Z/qscDx3WpCwFLe5Bg==} engines: {node: '>=18'} peerDependencies: - next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 + next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 || ^16.0.0-0 - '@sentry/node-core@10.15.0': - resolution: {integrity: sha512-X6QAHulgfkpONYrXNK2QXfW02ja5FS31sn5DWfCDO8ggHej/u2mrf5nwnUU8vilSwbInHmiMpkUswGEKYDEKTA==} + '@sentry/node-core@10.22.0': + resolution: {integrity: sha512-88Yyn+Qvmp0kPMnNRWgpUlAvhI9CNPqOT+0glW0L7OoN8LkJcNgx2GGUoLrJ+RGeHz/S7dIJY6DGa+u0Not2Qg==} engines: {node: '>=18'} peerDependencies: '@opentelemetry/api': ^1.9.0 @@ -2581,12 +2743,12 @@ packages: '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 '@opentelemetry/semantic-conventions': ^1.37.0 - '@sentry/node@10.15.0': - resolution: {integrity: sha512-5V9BX55DEIscU/S5+AEIQuIMKKbSd+MVo1/x5UkOceBxfiA0KUmgQ0POIpUEZqGCS9rpQ5fEajByRXAQ7bjaWA==} + '@sentry/node@10.22.0': + resolution: {integrity: sha512-PfG8AMT2kgFJ7rWb0lLJOmjLW2riytTliLMjfoJ8/tLGk964uKqE0xM7FLtXZjlLJqTXVYCVG7VIPj185uyckQ==} engines: {node: '>=18'} - '@sentry/opentelemetry@10.15.0': - resolution: {integrity: sha512-j+uk3bfxGgsBejwpq78iRZ+aBOKR/fWcJi72MBTboTEK3B4LINO65PyJqwOhcZOJVVAPL6IK1+sWQp4RL24GTg==} + '@sentry/opentelemetry@10.22.0': + resolution: {integrity: sha512-XHXYYq3zsQ/dj1kQ7cGGLFIEVRmrmjcMhiJHvmKKsUGKxQjHe2G0LuG8clHIPkmbg7yEIxCT/W2I9QzrwYt5+g==} engines: {node: '>=18'} peerDependencies: '@opentelemetry/api': ^1.9.0 @@ -2595,14 +2757,14 @@ packages: '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 '@opentelemetry/semantic-conventions': ^1.37.0 - '@sentry/react@10.15.0': - resolution: {integrity: sha512-dyJTv0rJtHunGE0rZ3amQAgBaKR9YnbIJcg9Y1uZt+vPK/B19sqM9S8D7DUvlBfDk9iWfhBCK6gHLEUOckFrKA==} + '@sentry/react@10.22.0': + resolution: {integrity: sha512-XByOjtW30LMNibmCPJF5LNYFmETNOUmWByECADox8GYV4BEX18WGXl4K1fpPDTSk+y4vUCHbltHa4GkyTRwG8Q==} engines: {node: '>=18'} peerDependencies: react: ^16.14.0 || 17.x || 18.x || 19.x - '@sentry/vercel-edge@10.15.0': - resolution: {integrity: sha512-QNruocfQy2P3rrgCKHCWNq7bsy+cFVNY25Y5PDaYsFKSiIge482g4Tjvfi7VMohy5jozcC1y82efFhicp3UqYg==} + '@sentry/vercel-edge@10.22.0': + resolution: {integrity: sha512-N6/4BrnqTJND/E1wxrQuiMKjJQ6W9xC/gibxrEfbZMFYU6VMz9/Quz+btfFJRsOiuFarLK8J/iEvWVB3mjZdzw==} engines: {node: '>=18'} '@sentry/webpack-plugin@4.3.0': @@ -2611,17 +2773,17 @@ packages: peerDependencies: webpack: '>=4.40.0' - '@shikijs/engine-oniguruma@3.9.2': - resolution: {integrity: sha512-Vn/w5oyQ6TUgTVDIC/BrpXwIlfK6V6kGWDVVz2eRkF2v13YoENUvaNwxMsQU/t6oCuZKzqp9vqtEtEzKl9VegA==} + '@shikijs/engine-oniguruma@3.14.0': + resolution: {integrity: sha512-TNcYTYMbJyy+ZjzWtt0bG5y4YyMIWC2nyePz+CFMWqm+HnZZyy9SWMgo8Z6KBJVIZnx8XUXS8U2afO6Y0g1Oug==} - '@shikijs/langs@3.9.2': - resolution: {integrity: sha512-X1Q6wRRQXY7HqAuX3I8WjMscjeGjqXCg/Sve7J2GWFORXkSrXud23UECqTBIdCSNKJioFtmUGJQNKtlMMZMn0w==} + '@shikijs/langs@3.14.0': + resolution: {integrity: sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg==} - '@shikijs/themes@3.9.2': - resolution: {integrity: sha512-6z5lBPBMRfLyyEsgf6uJDHPa6NAGVzFJqH4EAZ+03+7sedYir2yJBRu2uPZOKmj43GyhVHWHvyduLDAwJQfDjA==} + '@shikijs/themes@3.14.0': + resolution: {integrity: sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA==} - '@shikijs/types@3.9.2': - resolution: {integrity: sha512-/M5L0Uc2ljyn2jKvj4Yiah7ow/W+DJSglVafvWAJ/b8AZDeeRAdMu3c2riDzB7N42VD+jSnWxeP9AKtd4TfYVw==} + '@shikijs/types@3.14.0': + resolution: {integrity: sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -2811,55 +2973,55 @@ packages: typescript: optional: true - '@supabase/auth-js@2.71.1': - resolution: {integrity: sha512-mMIQHBRc+SKpZFRB2qtupuzulaUhFYupNyxqDj5Jp/LyPvcWvjaJzZzObv6URtL/O6lPxkanASnotGtNpS3H2Q==} + '@supabase/auth-js@2.78.0': + resolution: {integrity: sha512-cXDtu1U0LeZj/xfnFoV7yCze37TcbNo8FCxy1FpqhMbB9u9QxxDSW6pA5gm/07Ei7m260Lof4CZx67Cu6DPeig==} - '@supabase/functions-js@2.4.5': - resolution: {integrity: sha512-v5GSqb9zbosquTo6gBwIiq7W9eQ7rE5QazsK/ezNiQXdCbY+bH8D9qEaBIkhVvX4ZRW5rP03gEfw5yw9tiq4EQ==} + '@supabase/functions-js@2.78.0': + resolution: {integrity: sha512-t1jOvArBsOINyqaRee1xJ3gryXLvkBzqnKfi6q3YRzzhJbGS6eXz0pXR5fqmJeB01fLC+1njpf3YhMszdPEF7g==} '@supabase/node-fetch@2.6.15': resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} engines: {node: 4.x || >=6.0.0} - '@supabase/postgrest-js@1.19.4': - resolution: {integrity: sha512-O4soKqKtZIW3olqmbXXbKugUtByD2jPa8kL2m2c1oozAO11uCcGrRhkZL0kVxjBLrXHE0mdSkFsMj7jDSfyNpw==} + '@supabase/postgrest-js@2.78.0': + resolution: {integrity: sha512-AwhpYlSvJ+PSnPmIK8sHj7NGDyDENYfQGKrMtpVIEzQA2ApUjgpUGxzXWN4Z0wEtLQsvv7g4y9HVad9Hzo1TNA==} - '@supabase/realtime-js@2.15.1': - resolution: {integrity: sha512-edRFa2IrQw50kNntvUyS38hsL7t2d/psah6om6aNTLLcWem0R6bOUq7sk7DsGeSlNfuwEwWn57FdYSva6VddYw==} + '@supabase/realtime-js@2.78.0': + resolution: {integrity: sha512-rCs1zmLe7of7hj4s7G9z8rTqzWuNVtmwDr3FiCRCJFawEoa+RQO1xpZGbdeuVvVmKDyVN6b542Okci+117y/LQ==} - '@supabase/ssr@0.6.1': - resolution: {integrity: sha512-QtQgEMvaDzr77Mk3vZ3jWg2/y+D8tExYF7vcJT+wQ8ysuvOeGGjYbZlvj5bHYsj/SpC0bihcisnwPrM4Gp5G4g==} + '@supabase/ssr@0.7.0': + resolution: {integrity: sha512-G65t5EhLSJ5c8hTCcXifSL9Q/ZRXvqgXeNo+d3P56f4U1IxwTqjB64UfmfixvmMcjuxnq2yGqEWVJqUcO+AzAg==} peerDependencies: '@supabase/supabase-js': ^2.43.4 - '@supabase/storage-js@2.11.0': - resolution: {integrity: sha512-Y+kx/wDgd4oasAgoAq0bsbQojwQ+ejIif8uczZ9qufRHWFLMU5cODT+ApHsSrDufqUcVKt+eyxtOXSkeh2v9ww==} + '@supabase/storage-js@2.78.0': + resolution: {integrity: sha512-n17P0JbjHOlxqJpkaGFOn97i3EusEKPEbWOpuk1r4t00Wg06B8Z4GUiq0O0n1vUpjiMgJUkLIMuBVp+bEgunzQ==} - '@supabase/supabase-js@2.55.0': - resolution: {integrity: sha512-Y1uV4nEMjQV1x83DGn7+Z9LOisVVRlY1geSARrUHbXWgbyKLZ6/08dvc0Us1r6AJ4tcKpwpCZWG9yDQYo1JgHg==} + '@supabase/supabase-js@2.78.0': + resolution: {integrity: sha512-xYMRNBFmKp2m1gMuwcp/gr/HlfZKqjye1Ib8kJe29XJNsgwsfO/f8skxnWiscFKTlkOKLuBexNgl5L8dzGt6vA==} '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@tanstack/eslint-plugin-query@5.86.0': - resolution: {integrity: sha512-tmXdnx/fF3yY5G5jpzrJQbASY3PNzsKF0gq9IsZVqz3LJ4sExgdUFGQ305nao0wTMBOclyrSC13v/VQ3yOXu/Q==} + '@tanstack/eslint-plugin-query@5.91.2': + resolution: {integrity: sha512-UPeWKl/Acu1IuuHJlsN+eITUHqAaa9/04geHHPedY8siVarSaWprY0SVMKrkpKfk5ehRT7+/MZ5QwWuEtkWrFw==} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@tanstack/query-core@5.87.1': - resolution: {integrity: sha512-HOFHVvhOCprrWvtccSzc7+RNqpnLlZ5R6lTmngb8aq7b4rc2/jDT0w+vLdQ4lD9bNtQ+/A4GsFXy030Gk4ollA==} + '@tanstack/query-core@5.90.6': + resolution: {integrity: sha512-AnZSLF26R8uX+tqb/ivdrwbVdGemdEDm1Q19qM6pry6eOZ6bEYiY7mWhzXT1YDIPTNEVcZ5kYP9nWjoxDLiIVw==} - '@tanstack/query-devtools@5.87.3': - resolution: {integrity: sha512-LkzxzSr2HS1ALHTgDmJH5eGAVsSQiuwz//VhFW5OqNk0OQ+Fsqba0Tsf+NzWRtXYvpgUqwQr4b2zdFZwxHcGvg==} + '@tanstack/query-devtools@5.90.1': + resolution: {integrity: sha512-GtINOPjPUH0OegJExZ70UahT9ykmAhmtNVcmtdnOZbxLwT7R5OmRztR5Ahe3/Cu7LArEmR6/588tAycuaWb1xQ==} - '@tanstack/react-query-devtools@5.87.3': - resolution: {integrity: sha512-uV7m4/m58jU4OaLEyiPLRoXnL5H5E598lhFLSXIcK83on+ZXW7aIfiu5kwRwe1qFa4X4thH8wKaxz1lt6jNmAA==} + '@tanstack/react-query-devtools@5.90.2': + resolution: {integrity: sha512-vAXJzZuBXtCQtrY3F/yUNJCV4obT/A/n81kb3+YqLbro5Z2+phdAbceO+deU3ywPw8B42oyJlp4FhO0SoivDFQ==} peerDependencies: - '@tanstack/react-query': ^5.87.1 + '@tanstack/react-query': ^5.90.2 react: ^18 || ^19 - '@tanstack/react-query@5.87.1': - resolution: {integrity: sha512-YKauf8jfMowgAqcxj96AHs+Ux3m3bWT1oSVKamaRPXSnW2HqSznnTCEkAVqctF1e/W9R/mPcyzzINIgpOH94qg==} + '@tanstack/react-query@5.90.6': + resolution: {integrity: sha512-gB1sljYjcobZKxjPbKSa31FUTyr+ROaBdoH+wSSs9Dk+yDCmMs+TkTV3PybRRVLC7ax7q0erJ9LvRWnMktnRAw==} peerDependencies: react: ^18 || ^19 @@ -2915,9 +3077,6 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/d3-array@3.2.1': resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} @@ -3020,8 +3179,8 @@ packages: '@types/negotiator@0.6.4': resolution: {integrity: sha512-elf6BsTq+AkyNsb2h5cGNst2Mc7dPliVoAPm1fXglC/BM3f2pFA40BaSSv3E5lyHteEawVKLP+8TwiY1DMNb3A==} - '@types/node@24.3.1': - resolution: {integrity: sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==} + '@types/node@24.10.0': + resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -3076,8 +3235,8 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/urijs@1.19.25': - resolution: {integrity: sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==} + '@types/urijs@1.19.26': + resolution: {integrity: sha512-wkXrVzX5yoqLnndOwFsieJA7oKM8cNkOKJtf/3vVGSUFkWDKZvFHpIl9Pvqb/T9UsawBBFMTTD8xu7sK5MWuvg==} '@types/use-sync-external-store@0.0.6': resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} @@ -3106,16 +3265,32 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.46.2': + resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/scope-manager@8.43.0': resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.46.2': + resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.43.0': resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/tsconfig-utils@8.46.2': + resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.43.0': resolution: {integrity: sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3127,12 +3302,22 @@ packages: resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.46.2': + resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.43.0': resolution: {integrity: sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/typescript-estree@8.46.2': + resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.43.0': resolution: {integrity: sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3140,10 +3325,21 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.46.2': + resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/visitor-keys@8.43.0': resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.46.2': + resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -3365,14 +3561,14 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - '@xyflow/react@12.8.3': - resolution: {integrity: sha512-8sdRZPMCzfhauF96krlUMPCKmi9cX64HsYG8qoVAAvTKDAqxXg7RSp/IhoXlzbI/lsRD1vAxeDBxvI/XqACa6g==} + '@xyflow/react@12.9.2': + resolution: {integrity: sha512-Xr+LFcysHCCoc5KRHaw+FwbqbWYxp9tWtk1mshNcqy25OAPuaKzXSdqIMNOA82TIXF/gFKo0Wgpa6PU7wUUVqw==} peerDependencies: react: '>=17' react-dom: '>=17' - '@xyflow/system@0.0.67': - resolution: {integrity: sha512-hYsmbj+8JDei0jmupBmxNLaeJEcf9kKmMl6IziGe02i0TOCsHwjIdP+qz+f4rI1/FR2CQiCZJrw4dkHOLC6tEQ==} + '@xyflow/system@0.0.72': + resolution: {integrity: sha512-WBI5Aau0fXTXwxHPzceLNS6QdXggSWnGjDtj/gG669crApN8+SCmEtkBth1m7r6pStNo/5fI9McEi7Dk0ymCLA==} abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} @@ -3448,10 +3644,6 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} @@ -3575,14 +3767,18 @@ packages: resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} engines: {node: '>=4'} + axe-core@4.11.0: + resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==} + engines: {node: '>=4'} + axe-html-reporter@2.2.11: resolution: {integrity: sha512-WlF+xlNVgNVWiM6IdVrsh+N0Cw7qupe5HT9N6Uyi+aN7f6SSi92RDomiP1noW8OWIV85V6x404m5oKMeqRV3tQ==} engines: {node: '>=8.9.0'} peerDependencies: axe-core: '>=3' - axe-playwright@2.1.0: - resolution: {integrity: sha512-tY48SX56XaAp16oHPyD4DXpybz8Jxdz9P7exTjF/4AV70EGUavk+1fUPWirM0OYBR+YyDx6hUeDvuHVA6fB9YA==} + axe-playwright@2.2.2: + resolution: {integrity: sha512-h350/grzDCPgpuWV7eEOqr/f61Xn07Gi9f9B3Ew4rW6/nFtpdEJYW6jgRATorgAGXjEAYFTnaY3sEys39wDw4A==} peerDependencies: playwright: '>1.0.0' @@ -3694,10 +3890,6 @@ packages: builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -3741,10 +3933,6 @@ packages: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} - chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -3785,8 +3973,8 @@ packages: '@chromatic-com/playwright': optional: true - chromatic@13.1.4: - resolution: {integrity: sha512-6Voxdy2OvSyoA7mJjyiFiWii7d8ng0jBcW97TqL+ptlAWrJhIf10jrJ78KLPDUNOBIPxvx9Vcpe/bUwoLFIG5g==} + chromatic@13.3.3: + resolution: {integrity: sha512-89w0hiFzIRqLbwGSkqSQzhbpuqaWpXYZuevSIF+570Wb+T/apeAkp3px8nMJcFw+zEdqw/i6soofkJtfirET1Q==} hasBin: true peerDependencies: '@chromatic-com/cypress': ^0.*.* || ^1.0.0 @@ -3801,8 +3989,8 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} - cipher-base@1.0.6: - resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==} + cipher-base@1.0.7: + resolution: {integrity: sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==} engines: {node: '>= 0.10'} cjs-module-lexer@1.4.3: @@ -3859,6 +4047,10 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@14.0.2: + resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} + engines: {node: '>=20'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -3905,10 +4097,6 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - cookie@1.0.2: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} @@ -3938,9 +4126,6 @@ packages: create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} - create-hash@1.1.3: - resolution: {integrity: sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==} - create-hash@1.2.0: resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} @@ -4212,8 +4397,8 @@ packages: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} - dotenv@17.2.1: - resolution: {integrity: sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==} + dotenv@17.2.3: + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} engines: {node: '>=12'} dunder-proto@1.0.1: @@ -4334,6 +4519,11 @@ packages: peerDependencies: esbuild: '>=0.12 <1' + esbuild@0.25.11: + resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.25.9: resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} engines: {node: '>=18'} @@ -4625,8 +4815,8 @@ packages: forwarded-parse@2.1.2: resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==} - framer-motion@12.23.12: - resolution: {integrity: sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==} + framer-motion@12.23.24: + resolution: {integrity: sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -4643,8 +4833,8 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} - fs-extra@11.3.1: - resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} engines: {node: '>=14.14'} fs-monkey@1.1.0: @@ -4673,8 +4863,8 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - geist@1.4.2: - resolution: {integrity: sha512-OQUga/KUc8ueijck6EbtT07L4tZ5+TZgjw8PyWfxo16sL5FWk7gNViPNU8hgCFjy6bJi9yuTP+CRpywzaGN8zw==} + geist@1.5.1: + resolution: {integrity: sha512-mAHZxIsL2o3ZITFaBVFBnwyDOw+zNLYum6A6nIjpzCGIO8QtC3V76XF2RnZTyLx1wlDTmMDy8jg3Ib52MIjGvQ==} peerDependencies: next: '>=13.2.0' @@ -4784,13 +4974,14 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - hash-base@2.0.2: - resolution: {integrity: sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==} - hash-base@3.0.5: resolution: {integrity: sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==} engines: {node: '>= 0.10'} + hash-base@3.1.2: + resolution: {integrity: sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==} + engines: {node: '>= 0.8'} + hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} @@ -4934,6 +5125,9 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + inflected@2.1.0: + resolution: {integrity: sha512-hAEKNxvHf2Iq3H60oMBHkB4wl5jn3TPF3+fXek/sRwAB5gP9xWs4r7aweSF95f99HFoz69pnZTcu8f0SIHV18w==} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -5225,8 +5419,8 @@ packages: resolution: {integrity: sha512-ZNOIIGMzqCGcHQEA2Q4rIQQ3Df6gSIfne+X9Rly9Bc2y55KxAZu8iGv+n2pP0bLf0XAOctJZgeloC54hWzCahQ==} engines: {node: '>=16'} - katex@0.16.22: - resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} + katex@0.16.25: + resolution: {integrity: sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==} hasBin: true keyv@4.5.4: @@ -5239,14 +5433,14 @@ packages: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} engines: {node: '>=0.10'} - launchdarkly-js-client-sdk@3.8.1: - resolution: {integrity: sha512-Y05FXM8FAXAMbbJqeI+ffr6a4m2M/TBUccgI9ejWPSxQS+/b2t+FBWZzfmc7wXuOOYzgGkpHHfQ6bFDU9NKPWQ==} + launchdarkly-js-client-sdk@3.9.0: + resolution: {integrity: sha512-uPL9il6dOZrVQqEcpjDYc2c7HtBTlKpLJb1Q0187i4UokBVZwBXWKjTnNk9hkwaDD5PGD4puoe7POikrR8ACwQ==} - launchdarkly-js-sdk-common@5.7.1: - resolution: {integrity: sha512-RFFeoYVL764zarFpU16lDt1yHzUCt0rnYYKlX5LLtZ5Nhq+2fzE33xRolP/sjxAYVInD0o5z6jKTlDe8gtcDYg==} + launchdarkly-js-sdk-common@5.8.0: + resolution: {integrity: sha512-9X70K3kN1fuR6ZnRudkH7etMgFhi3sEU0mnJ+y2nhID+DpfkNDVnYUGnUs8/s4tsSDs7Q7Gpm4qnr3oqOqT9+A==} - launchdarkly-react-client-sdk@3.8.1: - resolution: {integrity: sha512-lQleTycQwAuNysNsV3VBC31N+wtCEF1FFfyffXlNV1g89jRG5dmEoChCqiuJVnlpL3l4O8+8HIbHuPALcWxCTQ==} + launchdarkly-react-client-sdk@3.9.0: + resolution: {integrity: sha512-Ayw6v5nfT0YoshUI89YH7lkOu+qAEtp9t743+dS6xnFq1IVOnckFlz4AoHa6smVjC3nPzj5n0dCLsRVfVIVEOg==} peerDependencies: react: ^16.6.3 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -5355,8 +5549,8 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lucide-react@0.539.0: - resolution: {integrity: sha512-VVISr+VF2krO91FeuCrm1rSOLACQUYVy7NQkzrOty52Y8TlTPcXcMdQFj9bYzBgXbWCiywlwSZ3Z8u6a+6bMlg==} + lucide-react@0.552.0: + resolution: {integrity: sha512-g9WCjmfwqbexSnZE+2cl21PCfXOcqnGeWeMTNAOGEfpPbm/ZF4YIq77Z8qWrxbu660EKuLB4nSLggoKnCb+isw==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -5606,17 +5800,14 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - motion-dom@12.23.12: - resolution: {integrity: sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==} + motion-dom@12.23.23: + resolution: {integrity: sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==} motion-utils@12.23.6: resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==} @@ -5624,13 +5815,13 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw-storybook-addon@2.0.5: - resolution: {integrity: sha512-uum2gtprDBoUb8GV/rPMwPytHmB8+AUr25BQUY0MpjYey5/ujaew2Edt+4oHiXpLTd0ThyMqmEvGy/sRpDV4lg==} + msw-storybook-addon@2.0.6: + resolution: {integrity: sha512-ExCwDbcJoM2V3iQU+fZNp+axVfNc7DWMRh4lyTXebDO8IbpUNYKGFUrA8UqaeWiRGKVuS7+fU+KXEa9b0OP6uA==} peerDependencies: msw: ^2.0.0 - msw@2.11.1: - resolution: {integrity: sha512-dGSRx0AJmQVQfpGXTsAAq4JFdwdhOBdJ6sJS/jnN0ac3s0NZB6daacHF1z5Pefx+IejmvuiLWw260RlyQOf3sQ==} + msw@2.11.6: + resolution: {integrity: sha512-MCYMykvmiYScyUm7I6y0VCxpNq1rgd5v7kG8ks5dKtvmxRUUPjribX6mUoUNBbM5/3PhUyoelEWiKXGOz84c+w==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -5739,10 +5930,11 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nuqs@2.4.3: - resolution: {integrity: sha512-BgtlYpvRwLYiJuWzxt34q2bXu/AIS66sLU1QePIMr2LWkb+XH0vKXdbLSgn9t6p7QKzwI7f38rX3Wl9llTXQ8Q==} + nuqs@2.7.2: + resolution: {integrity: sha512-wOPJoz5om7jMJQick9zU1S/Q+joL+B2DZTZxfCleHEcUzjUnPoujGod4+nAmUWb+G9TwZnyv+mfNqlyfEi8Zag==} peerDependencies: '@remix-run/react': '>=2' + '@tanstack/react-router': ^1 next: '>=14.2.0' react: '>=18.2.0 || ^19.0.0-0' react-router: ^6 || ^7 @@ -5750,6 +5942,8 @@ packages: peerDependenciesMeta: '@remix-run/react': optional: true + '@tanstack/react-router': + optional: true next: optional: true react-router: @@ -5830,18 +6024,15 @@ packages: openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - openapi3-ts@4.2.2: - resolution: {integrity: sha512-+9g4actZKeb3czfi9gVQ4Br2Ju3KwhCAQJBNaKgye5KggqcBLIhFHH+nIkcm0BUX00TrAJl6dH4JWgM4G4JWrw==} - - openapi3-ts@4.4.0: - resolution: {integrity: sha512-9asTNB9IkKEzWMcHmVZE7Ts3kC9G7AFHfs8i7caD8HbI76gEjdkId4z/AkP83xdZsH7PLAnnbl47qZkXuxpArw==} + openapi3-ts@4.5.0: + resolution: {integrity: sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - orval@7.11.2: - resolution: {integrity: sha512-Cjc/dgnQwAOkvymzvPpFqFc2nQwZ29E+ZFWUI8yKejleHaoFKIdwvkM/b1njtLEjePDcF0hyqXXCTz2wWaXLig==} + orval@7.13.0: + resolution: {integrity: sha512-8Q8BviorGpY2c252CxeeE8eFs7iBJX4KaTGxKmaardvRXjO0oWnEnaeAx9H5cB0FRYZPPKC0n5YHyo1GLs//CQ==} hasBin: true os-browserify@0.3.0: @@ -5952,9 +6143,9 @@ packages: resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} engines: {node: '>= 14.16'} - pbkdf2@3.1.3: - resolution: {integrity: sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==} - engines: {node: '>=0.12'} + pbkdf2@3.1.5: + resolution: {integrity: sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==} + engines: {node: '>= 0.10'} pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} @@ -5994,13 +6185,13 @@ packages: resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} engines: {node: '>=14.16'} - playwright-core@1.55.0: - resolution: {integrity: sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==} + playwright-core@1.56.1: + resolution: {integrity: sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==} engines: {node: '>=18'} hasBin: true - playwright@1.55.0: - resolution: {integrity: sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==} + playwright@1.56.1: + resolution: {integrity: sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==} engines: {node: '>=18'} hasBin: true @@ -6122,9 +6313,9 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-tailwindcss@0.6.14: - resolution: {integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==} - engines: {node: '>=14.21.3'} + prettier-plugin-tailwindcss@0.7.1: + resolution: {integrity: sha512-Bzv1LZcuiR1Sk02iJTS1QzlFNp/o5l2p3xkopwOrbPmtMeh3fK9rVW5M3neBQzHq+kGKj/4LGQMTNcTH4NGPtQ==} + engines: {node: '>=20.19'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' '@prettier/plugin-hermes': '*' @@ -6136,14 +6327,12 @@ packages: prettier: ^3.0 prettier-plugin-astro: '*' prettier-plugin-css-order: '*' - prettier-plugin-import-sort: '*' prettier-plugin-jsdoc: '*' prettier-plugin-marko: '*' prettier-plugin-multiline-arrays: '*' prettier-plugin-organize-attributes: '*' prettier-plugin-organize-imports: '*' prettier-plugin-sort-imports: '*' - prettier-plugin-style-order: '*' prettier-plugin-svelte: '*' peerDependenciesMeta: '@ianvs/prettier-plugin-sort-imports': @@ -6164,8 +6353,6 @@ packages: optional: true prettier-plugin-css-order: optional: true - prettier-plugin-import-sort: - optional: true prettier-plugin-jsdoc: optional: true prettier-plugin-marko: @@ -6178,8 +6365,6 @@ packages: optional: true prettier-plugin-sort-imports: optional: true - prettier-plugin-style-order: - optional: true prettier-plugin-svelte: optional: true @@ -6255,8 +6440,8 @@ packages: peerDependencies: react: ^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-day-picker@9.8.1: - resolution: {integrity: sha512-kMcLrp3PfN/asVJayVv82IjF3iLOOxuH5TNFWezX6lS/T8iVRFPTETpHl3TUSTH99IDMZLubdNPJr++rQctkEw==} + react-day-picker@9.11.1: + resolution: {integrity: sha512-l3ub6o8NlchqIjPKrRFUCkTUEq6KwemQlfv3XZzzwpUeGwmDJ+0u0Upmt38hJyd7D/vn2dQoOoLV/qAp0o3uUw==} engines: {node: '>=18'} peerDependencies: react: '>=16.8.0' @@ -6281,8 +6466,8 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 - react-hook-form@7.62.0: - resolution: {integrity: sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==} + react-hook-form@7.66.0: + resolution: {integrity: sha512-xXBqsWGKrY46ZqaHDo+ZUYiMUgi8suYu5kdrS20EG8KiL7VRQitEbNjm+UcrDYrNi1YLyfpmAeGjCZYXLT9YBw==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 @@ -6406,8 +6591,8 @@ packages: resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} engines: {node: '>= 4'} - recharts@3.1.2: - resolution: {integrity: sha512-vhNbYwaxNbk/IATK0Ki29k3qvTkGqwvCgyQAQ9MavvvBwjvKnMTswdbklJpcOAoMPN/qxF3Lyqob0zO+ZXkZ4g==} + recharts@3.3.0: + resolution: {integrity: sha512-Vi0qmTB0iz1+/Cz9o5B7irVyUjX2ynvEgImbgMt/3sKRREcUM07QiYjS1QpAVrkmVlXqy5gykq4nGWMz9AS4Rg==} engines: {node: '>=18'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -6531,6 +6716,9 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true + rettime@0.7.0: + resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -6540,11 +6728,9 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - ripemd160@2.0.1: - resolution: {integrity: sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==} - - ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + ripemd160@2.0.3: + resolution: {integrity: sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==} + engines: {node: '>= 0.8'} rollup@4.52.2: resolution: {integrity: sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA==} @@ -6619,6 +6805,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -6997,15 +7188,15 @@ packages: resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} - tldts-core@7.0.13: - resolution: {integrity: sha512-Td0LeWLgXJGsikI4mO82fRexgPCEyTcwWiXJERF/GBHX3Dm+HQq/wx4HnYowCbiwQ8d+ENLZc+ktbZw8H+0oEA==} + tldts-core@7.0.17: + resolution: {integrity: sha512-DieYoGrP78PWKsrXr8MZwtQ7GLCUeLxihtjC1jZsW1DnvSMdKPitJSe8OSYDM2u5H6g3kWJZpePqkp43TfLh0g==} - tldts@7.0.13: - resolution: {integrity: sha512-z/SgnxiICGb7Gli0z7ci9BZdjy1tQORUbdmzEUA7NbIJKWhdONn78Ji8gV0PAGfHPyEd+I+W2rMzhLjWkv2Olg==} + tldts@7.0.17: + resolution: {integrity: sha512-Y1KQBgDd/NUc+LfOtKS6mNsC9CCaH+m2P1RoIZy7RAPo3C3/t8X45+zgut31cRZtZ3xKPjfn3TkGTrctC2TQIQ==} hasBin: true - to-buffer@1.2.1: - resolution: {integrity: sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==} + to-buffer@1.2.2: + resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} engines: {node: '>= 0.4'} to-regex-range@5.0.1: @@ -7083,10 +7274,6 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - type-fest@0.7.1: resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} engines: {node: '>=8'} @@ -7115,21 +7302,27 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typedoc-plugin-markdown@4.8.1: - resolution: {integrity: sha512-ug7fc4j0SiJxSwBGLncpSo8tLvrT9VONvPUQqQDTKPxCoFQBADLli832RGPtj6sfSVJebNSrHZQRUdEryYH/7g==} + typedoc-plugin-coverage@4.0.2: + resolution: {integrity: sha512-mfn0e7NCqB8x2PfvhXrtmd7KWlsNf1+B2N9y8gR/jexXBLrXl/0e+b2HdG5HaTXGi7i0t2pyQY2VRmq7gtdEHQ==} engines: {node: '>= 18'} peerDependencies: typedoc: 0.28.x - typedoc@0.28.10: - resolution: {integrity: sha512-zYvpjS2bNJ30SoNYfHSRaFpBMZAsL7uwKbWwqoCNFWjcPnI3e/mPLh2SneH9mX7SJxtDpvDgvd9/iZxGbo7daw==} + typedoc-plugin-markdown@4.9.0: + resolution: {integrity: sha512-9Uu4WR9L7ZBgAl60N/h+jqmPxxvnC9nQAlnnO/OujtG2ubjnKTVUFY1XDhcMY+pCqlX3N2HsQM2QTYZIU9tJuw==} + engines: {node: '>= 18'} + peerDependencies: + typedoc: 0.28.x + + typedoc@0.28.14: + resolution: {integrity: sha512-ftJYPvpVfQvFzpkoSfHLkJybdA/geDJ8BGQt/ZnkkhnBYoYW6lBgPQXu6vqLxO4X75dA55hX8Af847H5KXlEFA==} engines: {node: '>= 18', pnpm: '>= 10'} hasBin: true peerDependencies: typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x - typescript@5.9.2: - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true @@ -7140,8 +7333,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@7.10.0: - resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} @@ -7201,6 +7394,9 @@ packages: unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + until-async@3.0.2: + resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==} + update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -7282,8 +7478,8 @@ packages: validate.io-number@1.0.3: resolution: {integrity: sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==} - validator@13.15.15: - resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==} + validator@13.15.20: + resolution: {integrity: sha512-KxPOq3V2LmfQPP4eqf3Mq/zrT0Dqp2Vmx2Bn285LwVahLc+CsxOM0crBHczm8ijlcjZ0Q5Xd6LW3z3odTPnlrw==} engines: {node: '>= 0.10'} vaul@1.1.2: @@ -7496,9 +7692,8 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@apidevtools/json-schema-ref-parser@11.7.2': + '@apidevtools/json-schema-ref-parser@14.0.1': dependencies: - '@jsdevtools/ono': 7.1.3 '@types/json-schema': 7.0.15 js-yaml: 4.1.0 @@ -7506,18 +7701,27 @@ snapshots: '@apidevtools/swagger-methods@3.0.2': {} - '@apidevtools/swagger-parser@10.1.1(openapi-types@12.1.3)': + '@apidevtools/swagger-parser@12.1.0(openapi-types@12.1.3)': dependencies: - '@apidevtools/json-schema-ref-parser': 11.7.2 + '@apidevtools/json-schema-ref-parser': 14.0.1 '@apidevtools/openapi-schemas': 2.1.0 '@apidevtools/swagger-methods': 3.0.2 - '@jsdevtools/ono': 7.1.3 ajv: 8.17.1 ajv-draft-04: 1.0.0(ajv@8.17.1) call-me-maybe: 1.0.2 openapi-types: 12.1.3 - '@asyncapi/specs@6.9.0': + '@apm-js-collab/code-transformer@0.8.2': {} + + '@apm-js-collab/tracing-hooks@0.3.1': + dependencies: + '@apm-js-collab/code-transformer': 0.8.2 + debug: 4.4.3 + module-details-from-path: 1.0.4 + transitivePeerDependencies: + - supports-color + + '@asyncapi/specs@6.10.0': dependencies: '@types/json-schema': 7.0.15 @@ -8270,27 +8474,23 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@bundled-es-modules/cookie@2.0.1': - dependencies: - cookie: 0.7.2 - - '@bundled-es-modules/statuses@1.0.1': - dependencies: - statuses: 2.0.2 - - '@chromatic-com/storybook@4.1.1(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))': + '@chromatic-com/storybook@4.1.2(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))': dependencies: '@neoconfetti/react': 1.0.0 chromatic: 12.2.0 filesize: 10.1.6 jsonfile: 6.2.0 - storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2) + storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2) strip-ansi: 7.1.2 transitivePeerDependencies: - '@chromatic-com/cypress' - '@chromatic-com/playwright' - '@date-fns/tz@1.2.0': {} + '@commander-js/extra-typings@14.0.0(commander@14.0.2)': + dependencies: + commander: 14.0.2 + + '@date-fns/tz@1.4.1': {} '@emnapi/core@1.5.0': dependencies: @@ -8316,81 +8516,159 @@ snapshots: '@emotion/unitless@0.8.1': {} + '@esbuild/aix-ppc64@0.25.11': + optional: true + '@esbuild/aix-ppc64@0.25.9': optional: true + '@esbuild/android-arm64@0.25.11': + optional: true + '@esbuild/android-arm64@0.25.9': optional: true + '@esbuild/android-arm@0.25.11': + optional: true + '@esbuild/android-arm@0.25.9': optional: true + '@esbuild/android-x64@0.25.11': + optional: true + '@esbuild/android-x64@0.25.9': optional: true + '@esbuild/darwin-arm64@0.25.11': + optional: true + '@esbuild/darwin-arm64@0.25.9': optional: true + '@esbuild/darwin-x64@0.25.11': + optional: true + '@esbuild/darwin-x64@0.25.9': optional: true + '@esbuild/freebsd-arm64@0.25.11': + optional: true + '@esbuild/freebsd-arm64@0.25.9': optional: true + '@esbuild/freebsd-x64@0.25.11': + optional: true + '@esbuild/freebsd-x64@0.25.9': optional: true + '@esbuild/linux-arm64@0.25.11': + optional: true + '@esbuild/linux-arm64@0.25.9': optional: true + '@esbuild/linux-arm@0.25.11': + optional: true + '@esbuild/linux-arm@0.25.9': optional: true + '@esbuild/linux-ia32@0.25.11': + optional: true + '@esbuild/linux-ia32@0.25.9': optional: true + '@esbuild/linux-loong64@0.25.11': + optional: true + '@esbuild/linux-loong64@0.25.9': optional: true + '@esbuild/linux-mips64el@0.25.11': + optional: true + '@esbuild/linux-mips64el@0.25.9': optional: true + '@esbuild/linux-ppc64@0.25.11': + optional: true + '@esbuild/linux-ppc64@0.25.9': optional: true + '@esbuild/linux-riscv64@0.25.11': + optional: true + '@esbuild/linux-riscv64@0.25.9': optional: true + '@esbuild/linux-s390x@0.25.11': + optional: true + '@esbuild/linux-s390x@0.25.9': optional: true + '@esbuild/linux-x64@0.25.11': + optional: true + '@esbuild/linux-x64@0.25.9': optional: true + '@esbuild/netbsd-arm64@0.25.11': + optional: true + '@esbuild/netbsd-arm64@0.25.9': optional: true + '@esbuild/netbsd-x64@0.25.11': + optional: true + '@esbuild/netbsd-x64@0.25.9': optional: true + '@esbuild/openbsd-arm64@0.25.11': + optional: true + '@esbuild/openbsd-arm64@0.25.9': optional: true + '@esbuild/openbsd-x64@0.25.11': + optional: true + '@esbuild/openbsd-x64@0.25.9': optional: true + '@esbuild/openharmony-arm64@0.25.11': + optional: true + '@esbuild/openharmony-arm64@0.25.9': optional: true + '@esbuild/sunos-x64@0.25.11': + optional: true + '@esbuild/sunos-x64@0.25.9': optional: true + '@esbuild/win32-arm64@0.25.11': + optional: true + '@esbuild/win32-arm64@0.25.9': optional: true + '@esbuild/win32-ia32@0.25.11': + optional: true + '@esbuild/win32-ia32@0.25.9': optional: true + '@esbuild/win32-x64@0.25.11': + optional: true + '@esbuild/win32-x64@0.25.9': optional: true @@ -8438,18 +8716,18 @@ snapshots: '@floating-ui/utils@0.2.10': {} - '@gerrit0/mini-shiki@3.9.2': + '@gerrit0/mini-shiki@3.14.0': dependencies: - '@shikijs/engine-oniguruma': 3.9.2 - '@shikijs/langs': 3.9.2 - '@shikijs/themes': 3.9.2 - '@shikijs/types': 3.9.2 + '@shikijs/engine-oniguruma': 3.14.0 + '@shikijs/langs': 3.14.0 + '@shikijs/themes': 3.14.0 + '@shikijs/types': 3.14.0 '@shikijs/vscode-textmate': 10.0.2 - '@hookform/resolvers@5.2.1(react-hook-form@7.62.0(react@18.3.1))': + '@hookform/resolvers@5.2.2(react-hook-form@7.66.0(react@18.3.1))': dependencies: '@standard-schema/utils': 0.3.0 - react-hook-form: 7.62.0(react@18.3.1) + react-hook-form: 7.66.0(react@18.3.1) '@humanwhocodes/config-array@0.13.0': dependencies: @@ -8465,19 +8743,20 @@ snapshots: '@ibm-cloud/openapi-ruleset-utilities@1.9.0': {} - '@ibm-cloud/openapi-ruleset@1.31.2': + '@ibm-cloud/openapi-ruleset@1.33.3': dependencies: '@ibm-cloud/openapi-ruleset-utilities': 1.9.0 '@stoplight/spectral-formats': 1.8.2 '@stoplight/spectral-functions': 1.10.1 '@stoplight/spectral-rulesets': 1.22.0 chalk: 4.1.2 + inflected: 2.1.0 jsonschema: 1.5.0 lodash: 4.17.21 loglevel: 1.9.2 loglevel-plugin-prefix: 0.8.4 minimatch: 6.2.0 - validator: 13.15.15 + validator: 13.15.20 transitivePeerDependencies: - encoding @@ -8567,31 +8846,33 @@ snapshots: '@img/sharp-win32-x64@0.34.3': optional: true - '@inquirer/confirm@5.1.16(@types/node@24.3.1)': - dependencies: - '@inquirer/core': 10.2.0(@types/node@24.3.1) - '@inquirer/type': 3.0.8(@types/node@24.3.1) - optionalDependencies: - '@types/node': 24.3.1 + '@inquirer/ansi@1.0.1': {} - '@inquirer/core@10.2.0(@types/node@24.3.1)': + '@inquirer/confirm@5.1.19(@types/node@24.10.0)': dependencies: - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@24.3.1) - ansi-escapes: 4.3.2 + '@inquirer/core': 10.3.0(@types/node@24.10.0) + '@inquirer/type': 3.0.9(@types/node@24.10.0) + optionalDependencies: + '@types/node': 24.10.0 + + '@inquirer/core@10.3.0(@types/node@24.10.0)': + dependencies: + '@inquirer/ansi': 1.0.1 + '@inquirer/figures': 1.0.14 + '@inquirer/type': 3.0.9(@types/node@24.10.0) 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': 24.3.1 + '@types/node': 24.10.0 - '@inquirer/figures@1.0.13': {} + '@inquirer/figures@1.0.14': {} - '@inquirer/type@3.0.8(@types/node@24.3.1)': + '@inquirer/type@3.0.9(@types/node@24.10.0)': optionalDependencies: - '@types/node': 24.3.1 + '@types/node': 24.10.0 '@isaacs/cliui@8.0.2': dependencies: @@ -8626,8 +8907,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@jsdevtools/ono@7.1.3': {} - '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': dependencies: jsep: 1.4.0 @@ -8651,7 +8930,7 @@ snapshots: '@types/react': 18.3.17 react: 18.3.1 - '@mswjs/interceptors@0.39.6': + '@mswjs/interceptors@0.40.0': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 @@ -8699,9 +8978,9 @@ snapshots: '@next/swc-win32-x64-msvc@15.4.7': optional: true - '@next/third-parties@15.4.6(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@next/third-parties@15.4.6(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - next: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 third-party-capital: 1.0.20 @@ -8953,7 +9232,7 @@ snapshots: '@types/shimmer': 1.2.0 import-in-the-middle: 1.14.2 require-in-the-middle: 7.5.2 - semver: 7.7.2 + semver: 7.7.3 shimmer: 1.2.1 transitivePeerDependencies: - supports-color @@ -8980,111 +9259,128 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@orval/angular@7.11.2(openapi-types@12.1.3)': + '@orval/angular@7.13.0(openapi-types@12.1.3)(typescript@5.9.3)': dependencies: - '@orval/core': 7.11.2(openapi-types@12.1.3) + '@orval/core': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) transitivePeerDependencies: - encoding - openapi-types - supports-color + - typescript - '@orval/axios@7.11.2(openapi-types@12.1.3)': + '@orval/axios@7.13.0(openapi-types@12.1.3)(typescript@5.9.3)': dependencies: - '@orval/core': 7.11.2(openapi-types@12.1.3) + '@orval/core': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) transitivePeerDependencies: - encoding - openapi-types - supports-color + - typescript - '@orval/core@7.11.2(openapi-types@12.1.3)': + '@orval/core@7.13.0(openapi-types@12.1.3)(typescript@5.9.3)': dependencies: - '@apidevtools/swagger-parser': 10.1.1(openapi-types@12.1.3) - '@ibm-cloud/openapi-ruleset': 1.31.2 + '@apidevtools/swagger-parser': 12.1.0(openapi-types@12.1.3) + '@ibm-cloud/openapi-ruleset': 1.33.3 + '@stoplight/spectral-core': 1.20.0 acorn: 8.15.0 - ajv: 8.17.1 chalk: 4.1.2 compare-versions: 6.1.1 debug: 4.4.3 - esbuild: 0.25.9 + esbuild: 0.25.11 esutils: 2.0.3 - fs-extra: 11.3.1 + fs-extra: 11.3.2 globby: 11.1.0 lodash.isempty: 4.4.0 lodash.uniq: 4.5.0 lodash.uniqby: 4.7.0 lodash.uniqwith: 4.5.0 micromatch: 4.0.8 - openapi3-ts: 4.4.0 + openapi3-ts: 4.5.0 swagger2openapi: 7.0.8 + typedoc: 0.28.14(typescript@5.9.3) transitivePeerDependencies: - encoding - openapi-types - supports-color + - typescript - '@orval/fetch@7.11.2(openapi-types@12.1.3)': + '@orval/fetch@7.13.0(openapi-types@12.1.3)(typescript@5.9.3)': dependencies: - '@orval/core': 7.11.2(openapi-types@12.1.3) + '@orval/core': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + openapi3-ts: 4.5.0 transitivePeerDependencies: - encoding - openapi-types - supports-color + - typescript - '@orval/hono@7.11.2(openapi-types@12.1.3)': + '@orval/hono@7.13.0(openapi-types@12.1.3)(typescript@5.9.3)': dependencies: - '@orval/core': 7.11.2(openapi-types@12.1.3) - '@orval/zod': 7.11.2(openapi-types@12.1.3) + '@orval/core': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + '@orval/zod': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + fs-extra: 11.3.2 lodash.uniq: 4.5.0 + openapi3-ts: 4.5.0 transitivePeerDependencies: - encoding - openapi-types - supports-color + - typescript - '@orval/mcp@7.11.2(openapi-types@12.1.3)': + '@orval/mcp@7.13.0(openapi-types@12.1.3)(typescript@5.9.3)': dependencies: - '@orval/core': 7.11.2(openapi-types@12.1.3) - '@orval/fetch': 7.11.2(openapi-types@12.1.3) - '@orval/zod': 7.11.2(openapi-types@12.1.3) + '@orval/core': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + '@orval/fetch': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + '@orval/zod': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + openapi3-ts: 4.5.0 transitivePeerDependencies: - encoding - openapi-types - supports-color + - typescript - '@orval/mock@7.11.2(openapi-types@12.1.3)': + '@orval/mock@7.13.0(openapi-types@12.1.3)(typescript@5.9.3)': dependencies: - '@orval/core': 7.11.2(openapi-types@12.1.3) - openapi3-ts: 4.4.0 + '@orval/core': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + openapi3-ts: 4.5.0 transitivePeerDependencies: - encoding - openapi-types - supports-color + - typescript - '@orval/query@7.11.2(openapi-types@12.1.3)': + '@orval/query@7.13.0(openapi-types@12.1.3)(typescript@5.9.3)': dependencies: - '@orval/core': 7.11.2(openapi-types@12.1.3) - '@orval/fetch': 7.11.2(openapi-types@12.1.3) + '@orval/core': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + '@orval/fetch': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + chalk: 4.1.2 lodash.omitby: 4.6.0 transitivePeerDependencies: - encoding - openapi-types - supports-color + - typescript - '@orval/swr@7.11.2(openapi-types@12.1.3)': + '@orval/swr@7.13.0(openapi-types@12.1.3)(typescript@5.9.3)': dependencies: - '@orval/core': 7.11.2(openapi-types@12.1.3) - '@orval/fetch': 7.11.2(openapi-types@12.1.3) + '@orval/core': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + '@orval/fetch': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) transitivePeerDependencies: - encoding - openapi-types - supports-color + - typescript - '@orval/zod@7.11.2(openapi-types@12.1.3)': + '@orval/zod@7.13.0(openapi-types@12.1.3)(typescript@5.9.3)': dependencies: - '@orval/core': 7.11.2(openapi-types@12.1.3) + '@orval/core': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) lodash.uniq: 4.5.0 + openapi3-ts: 4.5.0 transitivePeerDependencies: - encoding - openapi-types - supports-color + - typescript '@phosphor-icons/react@2.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -9094,9 +9390,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.55.0': + '@playwright/test@1.56.1': dependencies: - playwright: 1.55.0 + playwright: 1.56.1 '@pmmmwh/react-refresh-webpack-plugin@0.5.17(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-hot-middleware@2.26.1)(webpack@5.101.3(esbuild@0.25.9))': dependencies: @@ -9789,33 +10085,33 @@ snapshots: '@scarf/scarf@1.4.0': {} - '@sentry-internal/browser-utils@10.15.0': + '@sentry-internal/browser-utils@10.22.0': dependencies: - '@sentry/core': 10.15.0 + '@sentry/core': 10.22.0 - '@sentry-internal/feedback@10.15.0': + '@sentry-internal/feedback@10.22.0': dependencies: - '@sentry/core': 10.15.0 + '@sentry/core': 10.22.0 - '@sentry-internal/replay-canvas@10.15.0': + '@sentry-internal/replay-canvas@10.22.0': dependencies: - '@sentry-internal/replay': 10.15.0 - '@sentry/core': 10.15.0 + '@sentry-internal/replay': 10.22.0 + '@sentry/core': 10.22.0 - '@sentry-internal/replay@10.15.0': + '@sentry-internal/replay@10.22.0': dependencies: - '@sentry-internal/browser-utils': 10.15.0 - '@sentry/core': 10.15.0 + '@sentry-internal/browser-utils': 10.22.0 + '@sentry/core': 10.22.0 '@sentry/babel-plugin-component-annotate@4.3.0': {} - '@sentry/browser@10.15.0': + '@sentry/browser@10.22.0': dependencies: - '@sentry-internal/browser-utils': 10.15.0 - '@sentry-internal/feedback': 10.15.0 - '@sentry-internal/replay': 10.15.0 - '@sentry-internal/replay-canvas': 10.15.0 - '@sentry/core': 10.15.0 + '@sentry-internal/browser-utils': 10.22.0 + '@sentry-internal/feedback': 10.22.0 + '@sentry-internal/replay': 10.22.0 + '@sentry-internal/replay-canvas': 10.22.0 + '@sentry/core': 10.22.0 '@sentry/bundler-plugin-core@4.3.0': dependencies: @@ -9875,23 +10171,22 @@ snapshots: - encoding - supports-color - '@sentry/core@10.15.0': {} + '@sentry/core@10.22.0': {} - '@sentry/nextjs@10.15.0(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.101.3(esbuild@0.25.9))': + '@sentry/nextjs@10.22.0(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.101.3(esbuild@0.25.9))': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.37.0 '@rollup/plugin-commonjs': 28.0.1(rollup@4.52.2) - '@sentry-internal/browser-utils': 10.15.0 + '@sentry-internal/browser-utils': 10.22.0 '@sentry/bundler-plugin-core': 4.3.0 - '@sentry/core': 10.15.0 - '@sentry/node': 10.15.0 - '@sentry/opentelemetry': 10.15.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0) - '@sentry/react': 10.15.0(react@18.3.1) - '@sentry/vercel-edge': 10.15.0 + '@sentry/core': 10.22.0 + '@sentry/node': 10.22.0 + '@sentry/opentelemetry': 10.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0) + '@sentry/react': 10.22.0(react@18.3.1) + '@sentry/vercel-edge': 10.22.0 '@sentry/webpack-plugin': 4.3.0(webpack@5.101.3(esbuild@0.25.9)) - chalk: 3.0.0 - next: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) resolve: 1.22.8 rollup: 4.52.2 stacktrace-parser: 0.1.11 @@ -9904,8 +10199,9 @@ snapshots: - supports-color - webpack - '@sentry/node-core@10.15.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)': + '@sentry/node-core@10.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)': dependencies: + '@apm-js-collab/tracing-hooks': 0.3.1 '@opentelemetry/api': 1.9.0 '@opentelemetry/context-async-hooks': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) @@ -9913,11 +10209,13 @@ snapshots: '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 - '@sentry/core': 10.15.0 - '@sentry/opentelemetry': 10.15.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0) + '@sentry/core': 10.22.0 + '@sentry/opentelemetry': 10.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0) import-in-the-middle: 1.14.2 + transitivePeerDependencies: + - supports-color - '@sentry/node@10.15.0': + '@sentry/node@10.22.0': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/context-async-hooks': 2.1.0(@opentelemetry/api@1.9.0) @@ -9949,35 +10247,35 @@ snapshots: '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 '@prisma/instrumentation': 6.15.0(@opentelemetry/api@1.9.0) - '@sentry/core': 10.15.0 - '@sentry/node-core': 10.15.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0) - '@sentry/opentelemetry': 10.15.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0) + '@sentry/core': 10.22.0 + '@sentry/node-core': 10.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0) + '@sentry/opentelemetry': 10.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0) import-in-the-middle: 1.14.2 minimatch: 9.0.5 transitivePeerDependencies: - supports-color - '@sentry/opentelemetry@10.15.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)': + '@sentry/opentelemetry@10.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/context-async-hooks': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 - '@sentry/core': 10.15.0 + '@sentry/core': 10.22.0 - '@sentry/react@10.15.0(react@18.3.1)': + '@sentry/react@10.22.0(react@18.3.1)': dependencies: - '@sentry/browser': 10.15.0 - '@sentry/core': 10.15.0 + '@sentry/browser': 10.22.0 + '@sentry/core': 10.22.0 hoist-non-react-statics: 3.3.2 react: 18.3.1 - '@sentry/vercel-edge@10.15.0': + '@sentry/vercel-edge@10.22.0': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@sentry/core': 10.15.0 + '@sentry/core': 10.22.0 '@sentry/webpack-plugin@4.3.0(webpack@5.101.3(esbuild@0.25.9))': dependencies: @@ -9989,20 +10287,20 @@ snapshots: - encoding - supports-color - '@shikijs/engine-oniguruma@3.9.2': + '@shikijs/engine-oniguruma@3.14.0': dependencies: - '@shikijs/types': 3.9.2 + '@shikijs/types': 3.14.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.9.2': + '@shikijs/langs@3.14.0': dependencies: - '@shikijs/types': 3.9.2 + '@shikijs/types': 3.14.0 - '@shikijs/themes@3.9.2': + '@shikijs/themes@3.14.0': dependencies: - '@shikijs/types': 3.9.2 + '@shikijs/types': 3.14.0 - '@shikijs/types@3.9.2': + '@shikijs/types@3.14.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -10031,7 +10329,7 @@ snapshots: '@stoplight/json': 3.21.7 '@stoplight/path': 1.3.2 '@stoplight/types': 13.20.0 - '@types/urijs': 1.19.25 + '@types/urijs': 1.19.26 dependency-graph: 0.11.0 fast-memoize: 2.5.2 immer: 9.0.21 @@ -10122,7 +10420,7 @@ snapshots: '@stoplight/spectral-rulesets@1.22.0': dependencies: - '@asyncapi/specs': 6.9.0 + '@asyncapi/specs': 6.10.0 '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) '@stoplight/json': 3.21.7 '@stoplight/spectral-core': 1.20.0 @@ -10176,47 +10474,47 @@ snapshots: '@stoplight/yaml-ast-parser': 0.0.50 tslib: 2.8.1 - '@storybook/addon-a11y@9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))': + '@storybook/addon-a11y@9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))': dependencies: '@storybook/global': 5.0.0 axe-core: 4.10.3 - storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2) + storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2) - '@storybook/addon-docs@9.1.5(@types/react@18.3.17)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))': + '@storybook/addon-docs@9.1.5(@types/react@18.3.17)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))': dependencies: '@mdx-js/react': 3.1.1(@types/react@18.3.17)(react@18.3.1) - '@storybook/csf-plugin': 9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2)) + '@storybook/csf-plugin': 9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2)) '@storybook/icons': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/react-dom-shim': 9.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2)) + '@storybook/react-dom-shim': 9.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2) + storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-links@9.1.5(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))': + '@storybook/addon-links@9.1.5(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))': dependencies: '@storybook/global': 5.0.0 - storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2) + storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2) optionalDependencies: react: 18.3.1 - '@storybook/addon-onboarding@9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))': + '@storybook/addon-onboarding@9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))': dependencies: - storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2) + storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2) - '@storybook/builder-webpack5@9.1.5(esbuild@0.25.9)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))(typescript@5.9.2)': + '@storybook/builder-webpack5@9.1.5(esbuild@0.25.9)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))(typescript@5.9.3)': dependencies: - '@storybook/core-webpack': 9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2)) + '@storybook/core-webpack': 9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2)) case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.3 css-loader: 6.11.0(webpack@5.101.3(esbuild@0.25.9)) es-module-lexer: 1.7.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.9.2)(webpack@5.101.3(esbuild@0.25.9)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.9.3)(webpack@5.101.3(esbuild@0.25.9)) html-webpack-plugin: 5.6.4(webpack@5.101.3(esbuild@0.25.9)) magic-string: 0.30.19 - storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2) + storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2) style-loader: 3.3.4(webpack@5.101.3(esbuild@0.25.9)) terser-webpack-plugin: 5.3.14(esbuild@0.25.9)(webpack@5.101.3(esbuild@0.25.9)) ts-dedent: 2.2.0 @@ -10225,7 +10523,7 @@ snapshots: webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -10233,14 +10531,14 @@ snapshots: - uglify-js - webpack-cli - '@storybook/core-webpack@9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))': + '@storybook/core-webpack@9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))': dependencies: - storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2) + storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2) ts-dedent: 2.2.0 - '@storybook/csf-plugin@9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))': + '@storybook/csf-plugin@9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))': dependencies: - storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2) + storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2) unplugin: 1.16.1 '@storybook/global@5.0.0': {} @@ -10250,7 +10548,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/nextjs@9.1.5(esbuild@0.25.9)(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))(type-fest@4.41.0)(typescript@5.9.2)(webpack-hot-middleware@2.26.1)(webpack@5.101.3(esbuild@0.25.9))': + '@storybook/nextjs@9.1.5(esbuild@0.25.9)(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))(type-fest@4.41.0)(typescript@5.9.3)(webpack-hot-middleware@2.26.1)(webpack@5.101.3(esbuild@0.25.9))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.4) @@ -10266,31 +10564,31 @@ snapshots: '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4) '@babel/runtime': 7.28.4 '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-hot-middleware@2.26.1)(webpack@5.101.3(esbuild@0.25.9)) - '@storybook/builder-webpack5': 9.1.5(esbuild@0.25.9)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))(typescript@5.9.2) - '@storybook/preset-react-webpack': 9.1.5(esbuild@0.25.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))(typescript@5.9.2) - '@storybook/react': 9.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))(typescript@5.9.2) + '@storybook/builder-webpack5': 9.1.5(esbuild@0.25.9)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))(typescript@5.9.3) + '@storybook/preset-react-webpack': 9.1.5(esbuild@0.25.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))(typescript@5.9.3) + '@storybook/react': 9.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))(typescript@5.9.3) '@types/semver': 7.7.1 babel-loader: 9.2.1(@babel/core@7.28.4)(webpack@5.101.3(esbuild@0.25.9)) css-loader: 6.11.0(webpack@5.101.3(esbuild@0.25.9)) image-size: 2.0.2 loader-utils: 3.3.1 - next: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) node-polyfill-webpack-plugin: 2.0.1(webpack@5.101.3(esbuild@0.25.9)) postcss: 8.5.6 - postcss-loader: 8.2.0(postcss@8.5.6)(typescript@5.9.2)(webpack@5.101.3(esbuild@0.25.9)) + postcss-loader: 8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.101.3(esbuild@0.25.9)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-refresh: 0.14.2 resolve-url-loader: 5.0.0 sass-loader: 16.0.5(webpack@5.101.3(esbuild@0.25.9)) semver: 7.7.2 - storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2) + storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2) style-loader: 3.3.4(webpack@5.101.3(esbuild@0.25.9)) styled-jsx: 5.1.7(@babel/core@7.28.4)(react@18.3.1) tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.2.0 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 webpack: 5.101.3(esbuild@0.25.9) transitivePeerDependencies: - '@rspack/core' @@ -10310,10 +10608,10 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@9.1.5(esbuild@0.25.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))(typescript@5.9.2)': + '@storybook/preset-react-webpack@9.1.5(esbuild@0.25.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))(typescript@5.9.3)': dependencies: - '@storybook/core-webpack': 9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2)) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.9.2)(webpack@5.101.3(esbuild@0.25.9)) + '@storybook/core-webpack': 9.1.5(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.9.3)(webpack@5.101.3(esbuild@0.25.9)) '@types/semver': 7.7.1 find-up: 7.0.0 magic-string: 0.30.19 @@ -10322,11 +10620,11 @@ snapshots: react-dom: 18.3.1(react@18.3.1) resolve: 1.22.10 semver: 7.7.2 - storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2) + storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2) tsconfig-paths: 4.2.0 webpack: 5.101.3(esbuild@0.25.9) optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - '@swc/core' - esbuild @@ -10334,79 +10632,84 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.9.2)(webpack@5.101.3(esbuild@0.25.9))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.9.3)(webpack@5.101.3(esbuild@0.25.9))': dependencies: debug: 4.4.3 endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 micromatch: 4.0.8 - react-docgen-typescript: 2.4.0(typescript@5.9.2) + react-docgen-typescript: 2.4.0(typescript@5.9.3) tslib: 2.8.1 - typescript: 5.9.2 + typescript: 5.9.3 webpack: 5.101.3(esbuild@0.25.9) transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@9.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))': + '@storybook/react-dom-shim@9.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2) + storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2) - '@storybook/react@9.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))(typescript@5.9.2)': + '@storybook/react@9.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))(typescript@5.9.3)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 9.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2)) + '@storybook/react-dom-shim': 9.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2) + storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2) optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 - '@supabase/auth-js@2.71.1': + '@supabase/auth-js@2.78.0': dependencies: '@supabase/node-fetch': 2.6.15 + tslib: 2.8.1 - '@supabase/functions-js@2.4.5': + '@supabase/functions-js@2.78.0': dependencies: '@supabase/node-fetch': 2.6.15 + tslib: 2.8.1 '@supabase/node-fetch@2.6.15': dependencies: whatwg-url: 5.0.0 - '@supabase/postgrest-js@1.19.4': + '@supabase/postgrest-js@2.78.0': dependencies: '@supabase/node-fetch': 2.6.15 + tslib: 2.8.1 - '@supabase/realtime-js@2.15.1': + '@supabase/realtime-js@2.78.0': dependencies: '@supabase/node-fetch': 2.6.15 '@types/phoenix': 1.6.6 '@types/ws': 8.18.1 + tslib: 2.8.1 ws: 8.18.3 transitivePeerDependencies: - bufferutil - utf-8-validate - '@supabase/ssr@0.6.1(@supabase/supabase-js@2.55.0)': + '@supabase/ssr@0.7.0(@supabase/supabase-js@2.78.0)': dependencies: - '@supabase/supabase-js': 2.55.0 + '@supabase/supabase-js': 2.78.0 cookie: 1.0.2 - '@supabase/storage-js@2.11.0': + '@supabase/storage-js@2.78.0': dependencies: '@supabase/node-fetch': 2.6.15 + tslib: 2.8.1 - '@supabase/supabase-js@2.55.0': + '@supabase/supabase-js@2.78.0': dependencies: - '@supabase/auth-js': 2.71.1 - '@supabase/functions-js': 2.4.5 + '@supabase/auth-js': 2.78.0 + '@supabase/functions-js': 2.78.0 '@supabase/node-fetch': 2.6.15 - '@supabase/postgrest-js': 1.19.4 - '@supabase/realtime-js': 2.15.1 - '@supabase/storage-js': 2.11.0 + '@supabase/postgrest-js': 2.78.0 + '@supabase/realtime-js': 2.78.0 + '@supabase/storage-js': 2.78.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -10415,27 +10718,27 @@ snapshots: dependencies: tslib: 2.8.1 - '@tanstack/eslint-plugin-query@5.86.0(eslint@8.57.1)(typescript@5.9.2)': + '@tanstack/eslint-plugin-query@5.91.2(eslint@8.57.1)(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.43.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/utils': 8.46.2(eslint@8.57.1)(typescript@5.9.3) eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript - '@tanstack/query-core@5.87.1': {} + '@tanstack/query-core@5.90.6': {} - '@tanstack/query-devtools@5.87.3': {} + '@tanstack/query-devtools@5.90.1': {} - '@tanstack/react-query-devtools@5.87.3(@tanstack/react-query@5.87.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-query-devtools@5.90.2(@tanstack/react-query@5.90.6(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/query-devtools': 5.87.3 - '@tanstack/react-query': 5.87.1(react@18.3.1) + '@tanstack/query-devtools': 5.90.1 + '@tanstack/react-query': 5.90.6(react@18.3.1) react: 18.3.1 - '@tanstack/react-query@5.87.1(react@18.3.1)': + '@tanstack/react-query@5.90.6(react@18.3.1)': dependencies: - '@tanstack/query-core': 5.87.1 + '@tanstack/query-core': 5.90.6 react: 18.3.1 '@tanstack/react-table@8.21.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -10506,9 +10809,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 24.3.1 - - '@types/cookie@0.6.0': {} + '@types/node': 24.10.0 '@types/d3-array@3.2.1': {} @@ -10559,7 +10860,7 @@ snapshots: '@types/es-aggregate-error@1.0.6': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.10.0 '@types/eslint-scope@3.7.7': dependencies: @@ -10605,13 +10906,13 @@ snapshots: '@types/mysql@2.15.27': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.10.0 '@types/negotiator@0.6.4': {} - '@types/node@24.3.1': + '@types/node@24.10.0': dependencies: - undici-types: 7.10.0 + undici-types: 7.16.0 '@types/parse-json@4.0.2': {} @@ -10621,7 +10922,7 @@ snapshots: '@types/pg@8.15.5': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.10.0 pg-protocol: 1.10.3 pg-types: 2.2.0 @@ -10658,55 +10959,64 @@ snapshots: '@types/tedious@4.0.14': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.10.0 '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} - '@types/urijs@1.19.25': {} + '@types/urijs@1.19.26': {} '@types/use-sync-external-store@0.0.6': {} '@types/ws@8.18.1': dependencies: - '@types/node': 24.3.1 + '@types/node': 24.10.0 - '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.43.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/parser': 8.43.0(eslint@8.57.1)(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/type-utils': 8.43.0(eslint@8.57.1)(typescript@5.9.2) - '@typescript-eslint/utils': 8.43.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/type-utils': 8.43.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.43.0(eslint@8.57.1)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.43.0 eslint: 8.57.1 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.2)': + '@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.43.0 '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.43.0 debug: 4.4.3 eslint: 8.57.1 - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.43.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.43.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.3) '@typescript-eslint/types': 8.43.0 debug: 4.4.3 - typescript: 5.9.2 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 + debug: 4.4.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -10715,28 +11025,39 @@ snapshots: '@typescript-eslint/types': 8.43.0 '@typescript-eslint/visitor-keys': 8.43.0 - '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.2)': + '@typescript-eslint/scope-manager@8.46.2': dependencies: - typescript: 5.9.2 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/visitor-keys': 8.46.2 - '@typescript-eslint/type-utils@8.43.0(eslint@8.57.1)(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.43.0(eslint@8.57.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.43.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.43.0(eslint@8.57.1)(typescript@5.9.3) debug: 4.4.3 eslint: 8.57.1 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.43.0': {} - '@typescript-eslint/typescript-estree@8.43.0(typescript@5.9.2)': + '@typescript-eslint/types@8.46.2': {} + + '@typescript-eslint/typescript-estree@8.43.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.43.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) + '@typescript-eslint/project-service': 8.43.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.3) '@typescript-eslint/types': 8.43.0 '@typescript-eslint/visitor-keys': 8.43.0 debug: 4.4.3 @@ -10744,19 +11065,46 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.2) - typescript: 5.9.2 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.43.0(eslint@8.57.1)(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/visitor-keys': 8.46.2 + debug: 4.4.3 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.43.0(eslint@8.57.1)(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) '@typescript-eslint/scope-manager': 8.43.0 '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.3) eslint: 8.57.1 - typescript: 5.9.2 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.46.2(eslint@8.57.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + eslint: 8.57.1 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -10765,6 +11113,11 @@ snapshots: '@typescript-eslint/types': 8.43.0 eslint-visitor-keys: 4.2.1 + '@typescript-eslint/visitor-keys@8.46.2': + dependencies: + '@typescript-eslint/types': 8.46.2 + eslint-visitor-keys: 4.2.1 + '@ungap/structured-clone@1.3.0': {} '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -10826,14 +11179,14 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vercel/analytics@1.5.0(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@vercel/analytics@1.5.0(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': optionalDependencies: - next: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 - '@vercel/speed-insights@1.2.0(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@vercel/speed-insights@1.2.0(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': optionalDependencies: - next: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 '@vitest/expect@3.2.4': @@ -10844,13 +11197,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))': + '@vitest/mocker@3.2.4(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.19 optionalDependencies: - msw: 2.11.1(@types/node@24.3.1)(typescript@5.9.2) + msw: 2.11.6(@types/node@24.10.0)(typescript@5.9.3) '@vitest/pretty-format@3.2.4': dependencies: @@ -10946,9 +11299,9 @@ snapshots: '@xtuc/long@4.2.2': {} - '@xyflow/react@12.8.3(@types/react@18.3.17)(immer@10.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@xyflow/react@12.9.2(@types/react@18.3.17)(immer@10.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@xyflow/system': 0.0.67 + '@xyflow/system': 0.0.72 classcat: 5.0.5 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -10957,7 +11310,7 @@ snapshots: - '@types/react' - immer - '@xyflow/system@0.0.67': + '@xyflow/system@0.0.72': dependencies: '@types/d3-drag': 3.0.7 '@types/d3-interpolate': 3.0.4 @@ -11035,10 +11388,6 @@ snapshots: ansi-colors@4.1.3: {} - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - ansi-html-community@0.0.8: {} ansi-html@0.0.9: {} @@ -11177,19 +11526,21 @@ snapshots: axe-core@4.10.3: {} - axe-html-reporter@2.2.11(axe-core@4.10.3): + axe-core@4.11.0: {} + + axe-html-reporter@2.2.11(axe-core@4.11.0): dependencies: - axe-core: 4.10.3 + axe-core: 4.11.0 mustache: 4.2.0 - axe-playwright@2.1.0(playwright@1.55.0): + axe-playwright@2.2.2(playwright@1.56.1): dependencies: '@types/junit-report-builder': 3.0.2 - axe-core: 4.10.3 - axe-html-reporter: 2.2.11(axe-core@4.10.3) + axe-core: 4.11.0 + axe-html-reporter: 2.2.11(axe-core@4.11.0) junit-report-builder: 5.1.1 picocolors: 1.1.1 - playwright: 1.55.0 + playwright: 1.56.1 axobject-query@4.1.0: {} @@ -11264,7 +11615,7 @@ snapshots: browserify-aes@1.2.0: dependencies: buffer-xor: 1.0.3 - cipher-base: 1.0.6 + cipher-base: 1.0.7 create-hash: 1.2.0 evp_bytestokey: 1.0.3 inherits: 2.0.4 @@ -11278,7 +11629,7 @@ snapshots: browserify-des@1.0.2: dependencies: - cipher-base: 1.0.6 + cipher-base: 1.0.7 des.js: 1.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 @@ -11324,8 +11675,6 @@ snapshots: builtin-status-codes@3.0.0: {} - cac@6.7.14: {} - call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -11370,11 +11719,6 @@ snapshots: loupe: 3.2.1 pathval: 2.0.1 - chalk@3.0.0: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -11408,14 +11752,15 @@ snapshots: chromatic@12.2.0: {} - chromatic@13.1.4: {} + chromatic@13.3.3: {} chrome-trace-event@1.0.4: {} - cipher-base@1.0.6: + cipher-base@1.0.7: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 + to-buffer: 1.2.2 cjs-module-lexer@1.4.3: {} @@ -11475,6 +11820,8 @@ snapshots: comma-separated-tokens@2.0.3: {} + commander@14.0.2: {} + commander@2.20.3: {} commander@4.1.1: {} @@ -11519,8 +11866,6 @@ snapshots: convert-source-map@2.0.0: {} - cookie@0.7.2: {} - cookie@1.0.2: {} core-js-compat@3.45.1: @@ -11539,41 +11884,34 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cosmiconfig@9.0.0(typescript@5.9.2): + cosmiconfig@9.0.0(typescript@5.9.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 create-ecdh@4.0.4: dependencies: bn.js: 4.12.2 elliptic: 6.6.1 - create-hash@1.1.3: - dependencies: - cipher-base: 1.0.6 - inherits: 2.0.4 - ripemd160: 2.0.2 - sha.js: 2.4.12 - create-hash@1.2.0: dependencies: - cipher-base: 1.0.6 + cipher-base: 1.0.7 inherits: 2.0.4 md5.js: 1.3.5 - ripemd160: 2.0.2 + ripemd160: 2.0.3 sha.js: 2.4.12 create-hmac@1.1.7: dependencies: - cipher-base: 1.0.6 + cipher-base: 1.0.7 create-hash: 1.2.0 inherits: 2.0.4 - ripemd160: 2.0.2 + ripemd160: 2.0.3 safe-buffer: 5.2.1 sha.js: 2.4.12 @@ -11597,7 +11935,7 @@ snapshots: diffie-hellman: 5.0.3 hash-base: 3.0.5 inherits: 2.0.4 - pbkdf2: 3.1.3 + pbkdf2: 3.1.5 public-encrypt: 4.0.3 randombytes: 2.1.0 randomfill: 1.0.4 @@ -11840,7 +12178,7 @@ snapshots: dotenv@16.6.1: {} - dotenv@17.2.1: {} + dotenv@17.2.3: {} dunder-proto@1.0.1: dependencies: @@ -12037,6 +12375,35 @@ snapshots: transitivePeerDependencies: - supports-color + esbuild@0.25.11: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.11 + '@esbuild/android-arm': 0.25.11 + '@esbuild/android-arm64': 0.25.11 + '@esbuild/android-x64': 0.25.11 + '@esbuild/darwin-arm64': 0.25.11 + '@esbuild/darwin-x64': 0.25.11 + '@esbuild/freebsd-arm64': 0.25.11 + '@esbuild/freebsd-x64': 0.25.11 + '@esbuild/linux-arm': 0.25.11 + '@esbuild/linux-arm64': 0.25.11 + '@esbuild/linux-ia32': 0.25.11 + '@esbuild/linux-loong64': 0.25.11 + '@esbuild/linux-mips64el': 0.25.11 + '@esbuild/linux-ppc64': 0.25.11 + '@esbuild/linux-riscv64': 0.25.11 + '@esbuild/linux-s390x': 0.25.11 + '@esbuild/linux-x64': 0.25.11 + '@esbuild/netbsd-arm64': 0.25.11 + '@esbuild/netbsd-x64': 0.25.11 + '@esbuild/openbsd-arm64': 0.25.11 + '@esbuild/openbsd-x64': 0.25.11 + '@esbuild/openharmony-arm64': 0.25.11 + '@esbuild/sunos-x64': 0.25.11 + '@esbuild/win32-arm64': 0.25.11 + '@esbuild/win32-ia32': 0.25.11 + '@esbuild/win32-x64': 0.25.11 + esbuild@0.25.9: optionalDependencies: '@esbuild/aix-ppc64': 0.25.9 @@ -12072,21 +12439,21 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-next@15.5.2(eslint@8.57.1)(typescript@5.9.2): + eslint-config-next@15.5.2(eslint@8.57.1)(typescript@5.9.3): dependencies: '@next/eslint-plugin-next': 15.5.2 '@rushstack/eslint-patch': 1.12.0 - '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2) - '@typescript-eslint/parser': 8.43.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.43.0(eslint@8.57.1)(typescript@5.9.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) eslint-plugin-react: 7.37.5(eslint@8.57.1) eslint-plugin-react-hooks: 5.2.0(eslint@8.57.1) optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - eslint-import-resolver-webpack - eslint-plugin-import-x @@ -12111,22 +12478,22 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.43.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/parser': 8.43.0(eslint@8.57.1)(typescript@5.9.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -12137,7 +12504,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.43.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -12149,7 +12516,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.43.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/parser': 8.43.0(eslint@8.57.1)(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -12161,7 +12528,7 @@ snapshots: array-includes: 3.1.9 array.prototype.flatmap: 1.3.3 ast-types-flow: 0.0.8 - axe-core: 4.10.3 + axe-core: 4.11.0 axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 @@ -12200,11 +12567,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-storybook@9.1.5(eslint@8.57.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2))(typescript@5.9.2): + eslint-plugin-storybook@9.1.5(eslint@8.57.1)(storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.43.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/utils': 8.43.0(eslint@8.57.1)(typescript@5.9.3) eslint: 8.57.1 - storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2) + storybook: 9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2) transitivePeerDependencies: - supports-color - typescript @@ -12424,7 +12791,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.9.2)(webpack@5.101.3(esbuild@0.25.9)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.9.3)(webpack@5.101.3(esbuild@0.25.9)): dependencies: '@babel/code-frame': 7.27.1 chalk: 4.1.2 @@ -12438,14 +12805,14 @@ snapshots: schema-utils: 3.3.0 semver: 7.7.2 tapable: 2.2.3 - typescript: 5.9.2 + typescript: 5.9.3 webpack: 5.101.3(esbuild@0.25.9) forwarded-parse@2.1.2: {} - framer-motion@12.23.12(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@12.23.24(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - motion-dom: 12.23.12 + motion-dom: 12.23.23 motion-utils: 12.23.6 tslib: 2.8.1 optionalDependencies: @@ -12459,7 +12826,7 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 - fs-extra@11.3.1: + fs-extra@11.3.2: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.0 @@ -12488,9 +12855,9 @@ snapshots: functions-have-names@1.2.3: {} - geist@1.4.2(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + geist@1.5.1(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: - next: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) gensync@1.0.0-beta.2: {} @@ -12609,15 +12976,18 @@ snapshots: dependencies: has-symbols: 1.1.0 - hash-base@2.0.2: - dependencies: - inherits: 2.0.4 - hash-base@3.0.5: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 + hash-base@3.1.2: + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + to-buffer: 1.2.2 + hash.js@1.1.7: dependencies: inherits: 2.0.4 @@ -12807,6 +13177,8 @@ snapshots: indent-string@4.0.0: {} + inflected@2.1.0: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -13010,7 +13382,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 24.3.1 + '@types/node': 24.10.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -13087,7 +13459,7 @@ snapshots: make-dir: 3.1.0 xmlbuilder: 15.1.1 - katex@0.16.22: + katex@0.16.25: dependencies: commander: 8.3.0 @@ -13101,21 +13473,21 @@ snapshots: dependencies: language-subtag-registry: 0.3.23 - launchdarkly-js-client-sdk@3.8.1: + launchdarkly-js-client-sdk@3.9.0: dependencies: escape-string-regexp: 4.0.0 - launchdarkly-js-sdk-common: 5.7.1 + launchdarkly-js-sdk-common: 5.8.0 - launchdarkly-js-sdk-common@5.7.1: + launchdarkly-js-sdk-common@5.8.0: dependencies: base64-js: 1.5.1 fast-deep-equal: 2.0.1 uuid: 8.3.2 - launchdarkly-react-client-sdk@3.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + launchdarkly-react-client-sdk@3.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: hoist-non-react-statics: 3.3.2 - launchdarkly-js-client-sdk: 3.8.1 + launchdarkly-js-client-sdk: 3.9.0 lodash.camelcase: 4.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -13207,7 +13579,7 @@ snapshots: dependencies: yallist: 3.1.1 - lucide-react@0.539.0(react@18.3.1): + lucide-react@0.552.0(react@18.3.1): dependencies: react: 18.3.1 @@ -13246,7 +13618,7 @@ snapshots: md5.js@1.3.5: dependencies: - hash-base: 3.0.5 + hash-base: 3.1.2 inherits: 2.0.4 safe-buffer: 5.2.1 @@ -13508,7 +13880,7 @@ snapshots: dependencies: '@types/katex': 0.16.7 devlop: 1.1.0 - katex: 0.16.22 + katex: 0.16.25 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 @@ -13674,13 +14046,11 @@ snapshots: minipass@7.1.2: {} - mitt@3.0.1: {} - module-details-from-path@1.0.4: {} moment@2.30.1: {} - motion-dom@12.23.12: + motion-dom@12.23.23: dependencies: motion-utils: 12.23.6 @@ -13688,33 +14058,33 @@ snapshots: ms@2.1.3: {} - msw-storybook-addon@2.0.5(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2)): + msw-storybook-addon@2.0.6(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3)): dependencies: is-node-process: 1.2.0 - msw: 2.11.1(@types/node@24.3.1)(typescript@5.9.2) + msw: 2.11.6(@types/node@24.10.0)(typescript@5.9.3) - msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2): + msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3): dependencies: - '@bundled-es-modules/cookie': 2.0.1 - '@bundled-es-modules/statuses': 1.0.1 - '@inquirer/confirm': 5.1.16(@types/node@24.3.1) - '@mswjs/interceptors': 0.39.6 + '@inquirer/confirm': 5.1.19(@types/node@24.10.0) + '@mswjs/interceptors': 0.40.0 '@open-draft/deferred-promise': 2.2.0 - '@open-draft/until': 2.1.0 - '@types/cookie': 0.6.0 '@types/statuses': 2.0.6 + cookie: 1.0.2 graphql: 16.11.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: 4.41.0 + until-async: 3.0.2 yargs: 17.7.2 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 transitivePeerDependencies: - '@types/node' @@ -13741,7 +14111,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 15.4.7 '@swc/helpers': 0.5.15 @@ -13760,7 +14130,7 @@ snapshots: '@next/swc-win32-arm64-msvc': 15.4.7 '@next/swc-win32-x64-msvc': 15.4.7 '@opentelemetry/api': 1.9.0 - '@playwright/test': 1.55.0 + '@playwright/test': 1.56.1 sharp: 0.34.3 transitivePeerDependencies: - '@babel/core' @@ -13836,12 +14206,12 @@ snapshots: dependencies: boolbase: 1.0.0 - nuqs@2.4.3(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): + nuqs@2.7.2(next@15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): dependencies: - mitt: 3.0.1 + '@standard-schema/spec': 1.0.0 react: 18.3.1 optionalDependencies: - next: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.55.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 15.4.7(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) oas-kit-common@1.0.8: dependencies: @@ -13941,11 +14311,7 @@ snapshots: openapi-types@12.1.3: {} - openapi3-ts@4.2.2: - dependencies: - yaml: 2.8.1 - - openapi3-ts@4.4.0: + openapi3-ts@4.5.0: dependencies: yaml: 2.8.1 @@ -13958,38 +14324,40 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - orval@7.11.2(openapi-types@12.1.3): + orval@7.13.0(openapi-types@12.1.3)(typescript@5.9.3): dependencies: - '@apidevtools/swagger-parser': 10.1.1(openapi-types@12.1.3) - '@orval/angular': 7.11.2(openapi-types@12.1.3) - '@orval/axios': 7.11.2(openapi-types@12.1.3) - '@orval/core': 7.11.2(openapi-types@12.1.3) - '@orval/fetch': 7.11.2(openapi-types@12.1.3) - '@orval/hono': 7.11.2(openapi-types@12.1.3) - '@orval/mcp': 7.11.2(openapi-types@12.1.3) - '@orval/mock': 7.11.2(openapi-types@12.1.3) - '@orval/query': 7.11.2(openapi-types@12.1.3) - '@orval/swr': 7.11.2(openapi-types@12.1.3) - '@orval/zod': 7.11.2(openapi-types@12.1.3) - ajv: 8.17.1 - cac: 6.7.14 + '@apidevtools/swagger-parser': 12.1.0(openapi-types@12.1.3) + '@commander-js/extra-typings': 14.0.0(commander@14.0.2) + '@orval/angular': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + '@orval/axios': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + '@orval/core': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + '@orval/fetch': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + '@orval/hono': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + '@orval/mcp': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + '@orval/mock': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + '@orval/query': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + '@orval/swr': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) + '@orval/zod': 7.13.0(openapi-types@12.1.3)(typescript@5.9.3) chalk: 4.1.2 chokidar: 4.0.3 + commander: 14.0.2 enquirer: 2.4.1 execa: 5.1.1 find-up: 5.0.0 - fs-extra: 11.3.1 + fs-extra: 11.3.2 + js-yaml: 4.1.0 lodash.uniq: 4.5.0 - openapi3-ts: 4.2.2 + openapi3-ts: 4.5.0 string-argv: 0.3.2 - tsconfck: 2.1.2(typescript@5.9.2) - typedoc: 0.28.10(typescript@5.9.2) - typedoc-plugin-markdown: 4.8.1(typedoc@0.28.10(typescript@5.9.2)) - typescript: 5.9.2 + tsconfck: 2.1.2(typescript@5.9.3) + typedoc: 0.28.14(typescript@5.9.3) + typedoc-plugin-coverage: 4.0.2(typedoc@0.28.14(typescript@5.9.3)) + typedoc-plugin-markdown: 4.9.0(typedoc@0.28.14(typescript@5.9.3)) transitivePeerDependencies: - encoding - openapi-types - supports-color + - typescript os-browserify@0.3.0: {} @@ -14046,7 +14414,7 @@ snapshots: browserify-aes: 1.2.0 evp_bytestokey: 1.0.3 hash-base: 3.0.5 - pbkdf2: 3.1.3 + pbkdf2: 3.1.5 safe-buffer: 5.2.1 parse-entities@4.0.2: @@ -14100,14 +14468,14 @@ snapshots: pathval@2.0.1: {} - pbkdf2@3.1.3: + pbkdf2@3.1.5: dependencies: - create-hash: 1.1.3 + create-hash: 1.2.0 create-hmac: 1.1.7 - ripemd160: 2.0.1 + ripemd160: 2.0.3 safe-buffer: 5.2.1 sha.js: 2.4.12 - to-buffer: 1.2.1 + to-buffer: 1.2.2 pg-int8@1.0.1: {} @@ -14139,11 +14507,11 @@ snapshots: dependencies: find-up: 6.3.0 - playwright-core@1.55.0: {} + playwright-core@1.56.1: {} - playwright@1.55.0: + playwright@1.56.1: dependencies: - playwright-core: 1.55.0 + playwright-core: 1.56.1 optionalDependencies: fsevents: 2.3.2 @@ -14170,9 +14538,9 @@ snapshots: optionalDependencies: postcss: 8.5.6 - postcss-loader@8.2.0(postcss@8.5.6)(typescript@5.9.2)(webpack@5.101.3(esbuild@0.25.9)): + postcss-loader@8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.101.3(esbuild@0.25.9)): dependencies: - cosmiconfig: 9.0.0(typescript@5.9.2) + cosmiconfig: 9.0.0(typescript@5.9.3) jiti: 2.5.1 postcss: 8.5.6 semver: 7.7.2 @@ -14249,7 +14617,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-tailwindcss@0.6.14(prettier@3.6.2): + prettier-plugin-tailwindcss@0.7.1(prettier@3.6.2): dependencies: prettier: 3.6.2 @@ -14320,16 +14688,16 @@ snapshots: dependencies: react: 18.3.1 - react-day-picker@9.8.1(react@18.3.1): + react-day-picker@9.11.1(react@18.3.1): dependencies: - '@date-fns/tz': 1.2.0 + '@date-fns/tz': 1.4.1 date-fns: 4.1.0 date-fns-jalali: 4.1.0-0 react: 18.3.1 - react-docgen-typescript@2.4.0(typescript@5.9.2): + react-docgen-typescript@2.4.0(typescript@5.9.3): dependencies: - typescript: 5.9.2 + typescript: 5.9.3 react-docgen@7.1.1: dependencies: @@ -14359,7 +14727,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) styled-components: 6.1.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-hook-form@7.62.0(react@18.3.1): + react-hook-form@7.66.0(react@18.3.1): dependencies: react: 18.3.1 @@ -14431,12 +14799,12 @@ snapshots: optionalDependencies: '@types/react': 18.3.17 - react-shepherd@6.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.2): + react-shepherd@6.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) shepherd.js: 14.5.1 - typescript: 5.9.2 + typescript: 5.9.3 react-style-singleton@2.2.3(@types/react@18.3.17)(react@18.3.1): dependencies: @@ -14499,7 +14867,7 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 - recharts@3.1.2(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(redux@5.0.1): + recharts@3.3.0(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(redux@5.0.1): dependencies: '@reduxjs/toolkit': 2.9.0(react-redux@9.2.0(@types/react@18.3.17)(react@18.3.1)(redux@5.0.1))(react@18.3.1) clsx: 2.1.1 @@ -14598,7 +14966,7 @@ snapshots: '@types/katex': 0.16.7 hast-util-from-html-isomorphic: 2.0.0 hast-util-to-text: 4.0.2 - katex: 0.16.22 + katex: 0.16.25 unist-util-visit-parents: 6.0.1 vfile: 6.0.3 @@ -14707,20 +15075,17 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + rettime@0.7.0: {} + reusify@1.1.0: {} rimraf@3.0.2: dependencies: glob: 7.2.3 - ripemd160@2.0.1: + ripemd160@2.0.3: dependencies: - hash-base: 2.0.2 - inherits: 2.0.4 - - ripemd160@2.0.2: - dependencies: - hash-base: 3.0.5 + hash-base: 3.1.2 inherits: 2.0.4 rollup@4.52.2: @@ -14811,6 +15176,8 @@ snapshots: semver@7.7.2: {} + semver@7.7.3: {} + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -14843,7 +15210,7 @@ snapshots: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - to-buffer: 1.2.1 + to-buffer: 1.2.2 shallowequal@1.1.0: {} @@ -14995,13 +15362,13 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 - storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2))(prettier@3.6.2): + storybook@9.1.5(@testing-library/dom@10.4.1)(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3))(prettier@3.6.2): dependencies: '@storybook/global': 5.0.0 '@testing-library/jest-dom': 6.8.0 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(msw@2.11.1(@types/node@24.3.1)(typescript@5.9.2)) + '@vitest/mocker': 3.2.4(msw@2.11.6(@types/node@24.10.0)(typescript@5.9.3)) '@vitest/spy': 3.2.4 better-opn: 3.0.2 esbuild: 0.25.9 @@ -15294,13 +15661,13 @@ snapshots: tinyspy@4.0.3: {} - tldts-core@7.0.13: {} + tldts-core@7.0.17: {} - tldts@7.0.13: + tldts@7.0.17: dependencies: - tldts-core: 7.0.13 + tldts-core: 7.0.17 - to-buffer@1.2.1: + to-buffer@1.2.2: dependencies: isarray: 2.0.5 safe-buffer: 5.2.1 @@ -15312,7 +15679,7 @@ snapshots: tough-cookie@6.0.0: dependencies: - tldts: 7.0.13 + tldts: 7.0.17 tr46@0.0.3: {} @@ -15322,17 +15689,17 @@ snapshots: trough@2.2.0: {} - ts-api-utils@2.1.0(typescript@5.9.2): + ts-api-utils@2.1.0(typescript@5.9.3): dependencies: - typescript: 5.9.2 + typescript: 5.9.3 ts-dedent@2.2.0: {} ts-interface-checker@0.1.13: {} - tsconfck@2.1.2(typescript@5.9.2): + tsconfck@2.1.2(typescript@5.9.3): optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 tsconfig-paths-webpack-plugin@4.2.0: dependencies: @@ -15368,8 +15735,6 @@ snapshots: type-fest@0.20.2: {} - type-fest@0.21.3: {} - type-fest@0.7.1: {} type-fest@2.19.0: {} @@ -15409,20 +15774,24 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typedoc-plugin-markdown@4.8.1(typedoc@0.28.10(typescript@5.9.2)): + typedoc-plugin-coverage@4.0.2(typedoc@0.28.14(typescript@5.9.3)): dependencies: - typedoc: 0.28.10(typescript@5.9.2) + typedoc: 0.28.14(typescript@5.9.3) - typedoc@0.28.10(typescript@5.9.2): + typedoc-plugin-markdown@4.9.0(typedoc@0.28.14(typescript@5.9.3)): dependencies: - '@gerrit0/mini-shiki': 3.9.2 + typedoc: 0.28.14(typescript@5.9.3) + + typedoc@0.28.14(typescript@5.9.3): + dependencies: + '@gerrit0/mini-shiki': 3.14.0 lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 - typescript: 5.9.2 + typescript: 5.9.3 yaml: 2.8.1 - typescript@5.9.2: {} + typescript@5.9.3: {} uc.micro@2.1.0: {} @@ -15433,7 +15802,7 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@7.10.0: {} + undici-types@7.16.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -15529,6 +15898,8 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + until-async@3.0.2: {} + update-browserslist-db@1.1.3(browserslist@4.25.4): dependencies: browserslist: 4.25.4 @@ -15600,7 +15971,7 @@ snapshots: validate.io-number@1.0.3: {} - validator@13.15.15: {} + validator@13.15.20: {} vaul@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.17))(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: diff --git a/autogpt_platform/frontend/pnpm-workspace.yaml b/autogpt_platform/frontend/pnpm-workspace.yaml new file mode 100644 index 0000000000..70f9d1bf52 --- /dev/null +++ b/autogpt_platform/frontend/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +onlyBuiltDependencies: + - "@vercel/speed-insights" + - esbuild + - msw diff --git a/autogpt_platform/frontend/public/mockServiceWorker.js b/autogpt_platform/frontend/public/mockServiceWorker.js index ec47a9a50a..2f658e919a 100644 --- a/autogpt_platform/frontend/public/mockServiceWorker.js +++ b/autogpt_platform/frontend/public/mockServiceWorker.js @@ -5,24 +5,23 @@ * Mock Service Worker. * @see https://github.com/mswjs/msw * - Please do NOT modify this file. - * - Please do NOT serve this file on production. */ -const PACKAGE_VERSION = '2.7.0' -const INTEGRITY_CHECKSUM = '00729d72e3b82faf54ca8b9621dbb96f' +const PACKAGE_VERSION = '2.11.6' +const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82' const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') const activeClientIds = new Set() -self.addEventListener('install', function () { +addEventListener('install', function () { self.skipWaiting() }) -self.addEventListener('activate', function (event) { +addEventListener('activate', function (event) { event.waitUntil(self.clients.claim()) }) -self.addEventListener('message', async function (event) { - const clientId = event.source.id +addEventListener('message', async function (event) { + const clientId = Reflect.get(event.source || {}, 'id') if (!clientId || !self.clients) { return @@ -72,11 +71,6 @@ self.addEventListener('message', async function (event) { break } - case 'MOCK_DEACTIVATE': { - activeClientIds.delete(clientId) - break - } - case 'CLIENT_CLOSED': { activeClientIds.delete(clientId) @@ -94,69 +88,92 @@ self.addEventListener('message', async function (event) { } }) -self.addEventListener('fetch', function (event) { - const { request } = event +addEventListener('fetch', function (event) { + const requestInterceptedAt = Date.now() // Bypass navigation requests. - if (request.mode === 'navigate') { + 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 (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { + 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 deleted (still remains active until the next reload). + // after it's been terminated (still remains active until the next reload). if (activeClientIds.size === 0) { return } - // Generate unique request ID. const requestId = crypto.randomUUID() - event.respondWith(handleRequest(event, requestId)) + event.respondWith(handleRequest(event, requestId, requestInterceptedAt)) }) -async function handleRequest(event, requestId) { +/** + * @param {FetchEvent} event + * @param {string} requestId + * @param {number} requestInterceptedAt + */ +async function handleRequest(event, requestId, requestInterceptedAt) { const client = await resolveMainClient(event) - const response = await getResponse(event, client, requestId) + 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)) { - ;(async function () { - const responseClone = response.clone() + const serializedRequest = await serializeRequest(requestCloneForEvents) - sendToClient( - client, - { - type: 'RESPONSE', - payload: { - requestId, - isMockedResponse: IS_MOCKED_RESPONSE in response, + // 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, - body: responseClone.body, headers: Object.fromEntries(responseClone.headers.entries()), + body: responseClone.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. +/** + * 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) @@ -184,12 +201,17 @@ async function resolveMainClient(event) { }) } -async function getResponse(event, client, requestId) { - const { request } = event - +/** + * @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 = request.clone() + const requestClone = event.request.clone() function passthrough() { // Cast the request headers to a new Headers instance @@ -230,29 +252,18 @@ async function getResponse(event, client, requestId) { } // Notify the client that a request has been intercepted. - const requestBuffer = await request.arrayBuffer() + const serializedRequest = await serializeRequest(event.request) const clientMessage = await sendToClient( client, { type: 'REQUEST', payload: { id: requestId, - 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: requestBuffer, - keepalive: request.keepalive, + interceptedAt: requestInterceptedAt, + ...serializedRequest, }, }, - [requestBuffer], + [serializedRequest.body], ) switch (clientMessage.type) { @@ -268,6 +279,12 @@ async function getResponse(event, client, requestId) { 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() @@ -280,14 +297,18 @@ function sendToClient(client, message, transferrables = []) { resolve(event.data) } - client.postMessage( - message, - [channel.port2].concat(transferrables.filter(Boolean)), - ) + client.postMessage(message, [ + channel.port2, + ...transferrables.filter(Boolean), + ]) }) } -async function respondWithMock(response) { +/** + * @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 @@ -305,3 +326,24 @@ async function respondWithMock(response) { 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/autogpt_platform/frontend/src/app/(platform)/admin/components/AdminImpersonationBanner.tsx b/autogpt_platform/frontend/src/app/(platform)/admin/components/AdminImpersonationBanner.tsx new file mode 100644 index 0000000000..9bcb5d8b9c --- /dev/null +++ b/autogpt_platform/frontend/src/app/(platform)/admin/components/AdminImpersonationBanner.tsx @@ -0,0 +1,36 @@ +"use client"; + +import { useAdminImpersonation } from "./useAdminImpersonation"; + +export function AdminImpersonationBanner() { + const { isImpersonating, impersonatedUserId, stopImpersonating } = + useAdminImpersonation(); + + if (!isImpersonating) { + return null; + } + + return ( +
+
+
+ + ⚠️ ADMIN IMPERSONATION ACTIVE + + + You are currently acting as user:{" "} + + {impersonatedUserId} + + +
+ +
+
+ ); +} diff --git a/autogpt_platform/frontend/src/app/(platform)/admin/components/AdminImpersonationPanel.tsx b/autogpt_platform/frontend/src/app/(platform)/admin/components/AdminImpersonationPanel.tsx new file mode 100644 index 0000000000..8acfe55fbf --- /dev/null +++ b/autogpt_platform/frontend/src/app/(platform)/admin/components/AdminImpersonationPanel.tsx @@ -0,0 +1,196 @@ +"use client"; + +import { useState } from "react"; +import { UserMinus, UserCheck, CreditCard } from "@phosphor-icons/react"; +import { Card } from "@/components/atoms/Card/Card"; +import { Input } from "@/components/atoms/Input/Input"; +import { Button } from "@/components/atoms/Button/Button"; +import { Alert, AlertDescription } from "@/components/molecules/Alert/Alert"; +import { useAdminImpersonation } from "./useAdminImpersonation"; +import { useGetV1GetUserCredits } from "@/app/api/__generated__/endpoints/credits/credits"; + +export function AdminImpersonationPanel() { + const [userIdInput, setUserIdInput] = useState(""); + const [error, setError] = useState(""); + const { + isImpersonating, + impersonatedUserId, + startImpersonating, + stopImpersonating, + } = useAdminImpersonation(); + + // Demo: Use existing credits API - it will automatically use impersonation if active + const { + data: creditsResponse, + isLoading: creditsLoading, + error: creditsError, + } = useGetV1GetUserCredits(); + + function handleStartImpersonation() { + setError(""); + + if (!userIdInput.trim()) { + setError("Please enter a valid user ID"); + return; + } + + // Basic UUID validation + const uuidRegex = + /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; + if (!uuidRegex.test(userIdInput.trim())) { + setError("Please enter a valid UUID format user ID"); + return; + } + + try { + startImpersonating(userIdInput.trim()); + setUserIdInput(""); + } catch (err) { + setError( + err instanceof Error ? err.message : "Failed to start impersonation", + ); + } + } + + function handleStopImpersonation() { + stopImpersonating(); + setError(""); + } + + return ( + +
+
+
+ +

Admin User Impersonation

+
+

+ Act on behalf of another user for debugging and support purposes +

+
+ + {/* Security Warning */} + + + Security Notice: This feature is for admin + debugging and support only. All impersonation actions are logged for + audit purposes. + + + + {/* Current Status */} + {isImpersonating && ( + + + Currently impersonating:{" "} + + {impersonatedUserId} + + + + )} + + {/* Impersonation Controls */} +
+ setUserIdInput(e.target.value)} + disabled={isImpersonating} + error={error} + /> + +
+ + + {isImpersonating && ( + + )} +
+
+ + {/* Demo: Live Credits Display */} + +
+
+ +

Live Demo: User Credits

+
+ + {creditsLoading ? ( +

Loading credits...

+ ) : creditsError ? ( + + + Error loading credits:{" "} + {creditsError && + typeof creditsError === "object" && + "message" in creditsError + ? String(creditsError.message) + : "Unknown error"} + + + ) : creditsResponse?.data ? ( +
+

+ + {creditsResponse.data && + typeof creditsResponse.data === "object" && + "credits" in creditsResponse.data + ? String(creditsResponse.data.credits) + : "N/A"} + {" "} + credits available + {isImpersonating && ( + + (via impersonation) + + )} +

+

+ {isImpersonating + ? `Showing credits for user ${impersonatedUserId}` + : "Showing your own credits"} +

+
+ ) : ( +

No credits data available

+ )} +
+
+ + {/* Instructions */} +
+

+ Instructions: +

+
    +
  • Enter the UUID of the user you want to impersonate
  • +
  • + All existing API endpoints automatically work with impersonation +
  • +
  • A warning banner will appear while impersonation is active
  • +
  • + Impersonation persists across page refreshes in this session +
  • +
+
+
+
+ ); +} diff --git a/autogpt_platform/frontend/src/app/(platform)/admin/components/useAdminImpersonation.ts b/autogpt_platform/frontend/src/app/(platform)/admin/components/useAdminImpersonation.ts new file mode 100644 index 0000000000..2edcdc9e0f --- /dev/null +++ b/autogpt_platform/frontend/src/app/(platform)/admin/components/useAdminImpersonation.ts @@ -0,0 +1,94 @@ +"use client"; + +import { useState, useCallback } from "react"; +import { environment } from "@/services/environment"; +import { IMPERSONATION_STORAGE_KEY } from "@/lib/constants"; +import { useToast } from "@/components/molecules/Toast/use-toast"; + +interface AdminImpersonationState { + isImpersonating: boolean; + impersonatedUserId: string | null; +} + +interface AdminImpersonationActions { + startImpersonating: (userId: string) => void; + stopImpersonating: () => void; +} + +type AdminImpersonationHook = AdminImpersonationState & + AdminImpersonationActions; + +function getInitialImpersonationState(): string | null { + if (!environment.isClientSide()) { + return null; + } + + try { + return sessionStorage.getItem(IMPERSONATION_STORAGE_KEY); + } catch (error) { + console.error("Failed to read initial impersonation state:", error); + return null; + } +} + +export function useAdminImpersonation(): AdminImpersonationHook { + const [impersonatedUserId, setImpersonatedUserId] = useState( + getInitialImpersonationState, + ); + const { toast } = useToast(); + + const isImpersonating = Boolean(impersonatedUserId); + + const startImpersonating = useCallback( + (userId: string) => { + if (!userId.trim()) { + toast({ + title: "User ID is required for impersonation", + variant: "destructive", + }); + return; + } + + if (environment.isClientSide()) { + try { + sessionStorage.setItem(IMPERSONATION_STORAGE_KEY, userId); + setImpersonatedUserId(userId); + window.location.reload(); + } catch (error) { + console.error("Failed to start impersonation:", error); + toast({ + title: "Failed to start impersonation", + description: + error instanceof Error ? error.message : "Unknown error", + variant: "destructive", + }); + } + } + }, + [toast], + ); + + const stopImpersonating = useCallback(() => { + if (environment.isClientSide()) { + try { + sessionStorage.removeItem(IMPERSONATION_STORAGE_KEY); + setImpersonatedUserId(null); + window.location.reload(); + } catch (error) { + console.error("Failed to stop impersonation:", error); + toast({ + title: "Failed to stop impersonation", + description: error instanceof Error ? error.message : "Unknown error", + variant: "destructive", + }); + } + } + }, [toast]); + + return { + isImpersonating, + impersonatedUserId, + startImpersonating, + stopImpersonating, + }; +} diff --git a/autogpt_platform/frontend/src/app/(platform)/admin/impersonation/page.tsx b/autogpt_platform/frontend/src/app/(platform)/admin/impersonation/page.tsx new file mode 100644 index 0000000000..b6075a065d --- /dev/null +++ b/autogpt_platform/frontend/src/app/(platform)/admin/impersonation/page.tsx @@ -0,0 +1,19 @@ +import { AdminImpersonationPanel } from "../components/AdminImpersonationPanel"; +import { Text } from "@/components/atoms/Text/Text"; + +export default function AdminImpersonationPage() { + return ( +
+
+ + User Impersonation + + + Manage admin user impersonation for debugging and support purposes + +
+ + +
+ ); +} diff --git a/autogpt_platform/frontend/src/app/(platform)/admin/layout.tsx b/autogpt_platform/frontend/src/app/(platform)/admin/layout.tsx index a91b2c1ef4..01e100517c 100644 --- a/autogpt_platform/frontend/src/app/(platform)/admin/layout.tsx +++ b/autogpt_platform/frontend/src/app/(platform)/admin/layout.tsx @@ -1,5 +1,5 @@ import { Sidebar } from "@/components/__legacy__/Sidebar"; -import { Users, DollarSign } from "lucide-react"; +import { Users, DollarSign, UserSearch } from "lucide-react"; import { IconSliders } from "@/components/__legacy__/ui/icons"; @@ -16,6 +16,11 @@ const sidebarLinkGroups = [ href: "/admin/spending", icon: , }, + { + text: "User Impersonation", + href: "/admin/impersonation", + icon: , + }, { text: "Admin User Management", href: "/admin/settings", diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/BuilderActions.tsx b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/BuilderActions.tsx index 48b2bfd24c..f953d091b1 100644 --- a/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/BuilderActions.tsx +++ b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/BuilderActions.tsx @@ -1,11 +1,13 @@ +import { AgentOutputs } from "./components/AgentOutputs/AgentOutputs"; import { RunGraph } from "./components/RunGraph/RunGraph"; +import { ScheduleGraph } from "./components/ScheduleGraph/ScheduleGraph"; export const BuilderActions = () => { return ( -
- {/* TODO: Add Agent Output */} +
+ - {/* TODO: Add Schedule run button */} +
); }; diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/AgentOutputs/AgentOutputs.tsx b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/AgentOutputs/AgentOutputs.tsx new file mode 100644 index 0000000000..7cc1594ff6 --- /dev/null +++ b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/AgentOutputs/AgentOutputs.tsx @@ -0,0 +1,32 @@ +import { Button } from "@/components/atoms/Button/Button"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/atoms/Tooltip/BaseTooltip"; +import { LogOutIcon } from "lucide-react"; + +export const AgentOutputs = () => { + return ( + <> + + + + {/* Todo: Implement Agent Outputs */} + + + +

Agent Outputs

+
+
+
+ + ); +}; diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/CronSchedulerDialog/CronSchedulerDialog.tsx b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/CronSchedulerDialog/CronSchedulerDialog.tsx new file mode 100644 index 0000000000..adb3c619bf --- /dev/null +++ b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/CronSchedulerDialog/CronSchedulerDialog.tsx @@ -0,0 +1,109 @@ +import { Button } from "@/components/atoms/Button/Button"; +import { Dialog } from "@/components/molecules/Dialog/Dialog"; +import { InfoIcon } from "lucide-react"; +import { CronScheduler } from "@/app/(platform)/library/agents/[id]/components/AgentRunsView/components/ScheduleAgentModal/components/CronScheduler/CronScheduler"; +import { Text } from "@/components/atoms/Text/Text"; +import { useCronSchedulerDialog } from "./useCronSchedulerDialog"; +import { Input } from "@/components/atoms/Input/Input"; + +type CronSchedulerDialogProps = { + open: boolean; + setOpen: (open: boolean) => void; + inputs: Record; + credentials: Record; + defaultCronExpression?: string; + title?: string; +}; + +export function CronSchedulerDialog({ + open, + setOpen, + + defaultCronExpression = "", + title = "Schedule Graph", + inputs, + credentials, +}: CronSchedulerDialogProps) { + const { + setCronExpression, + userTimezone, + timezoneDisplay, + handleCreateSchedule, + scheduleName, + setScheduleName, + isCreatingSchedule, + } = useCronSchedulerDialog({ + open, + setOpen, + inputs, + credentials, + defaultCronExpression, + }); + return ( + + +
+ setScheduleName(e.target.value)} + /> + + + + {/* Timezone info */} + {userTimezone === "not-set" ? ( +
+ + + No timezone set. Schedule will run in UTC. + + Set your timezone + + +
+ ) : ( +
+ + + Schedule will run in your timezone:{" "} + + {timezoneDisplay} + + +
+ )} +
+
+ + +
+
+
+ ); +} diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/CronSchedulerDialog/useCronSchedulerDialog.ts b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/CronSchedulerDialog/useCronSchedulerDialog.ts new file mode 100644 index 0000000000..4d5f8bf254 --- /dev/null +++ b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/CronSchedulerDialog/useCronSchedulerDialog.ts @@ -0,0 +1,100 @@ +import { useGetV1GetUserTimezone } from "@/app/api/__generated__/endpoints/auth/auth"; +import { usePostV1CreateExecutionSchedule } from "@/app/api/__generated__/endpoints/schedules/schedules"; +import { useToast } from "@/components/molecules/Toast/use-toast"; +import { getTimezoneDisplayName } from "@/lib/timezone-utils"; +import { parseAsInteger, parseAsString, useQueryStates } from "nuqs"; +import { useEffect, useState } from "react"; + +export const useCronSchedulerDialog = ({ + open, + setOpen, + inputs, + credentials, + defaultCronExpression = "", +}: { + open: boolean; + setOpen: (open: boolean) => void; + inputs: Record; + credentials: Record; + defaultCronExpression?: string; +}) => { + const { toast } = useToast(); + const [cronExpression, setCronExpression] = useState(""); + const [scheduleName, setScheduleName] = useState(""); + + const [{ flowID, flowVersion }] = useQueryStates({ + flowID: parseAsString, + flowVersion: parseAsInteger, + flowExecutionID: parseAsString, + }); + + const { data: userTimezone } = useGetV1GetUserTimezone({ + query: { + select: (res) => (res.status === 200 ? res.data.timezone : undefined), + }, + }); + const timezoneDisplay = getTimezoneDisplayName(userTimezone || "UTC"); + + const { mutateAsync: createSchedule, isPending: isCreatingSchedule } = + usePostV1CreateExecutionSchedule({ + mutation: { + onSuccess: (response) => { + if (response.status === 200) { + setOpen(false); + toast({ + title: "Schedule created", + description: "Schedule created successfully", + }); + } + }, + onError: (error) => { + toast({ + variant: "destructive", + title: "Failed to create schedule", + description: + (error.detail as string) ?? "An unexpected error occurred.", + }); + }, + }, + }); + + useEffect(() => { + if (open) { + setCronExpression(defaultCronExpression); + } + }, [open, defaultCronExpression]); + + const handleCreateSchedule = async () => { + if (!cronExpression || cronExpression.trim() === "") { + toast({ + variant: "destructive", + title: "Invalid schedule", + description: "Please enter a valid cron expression", + }); + return; + } + + await createSchedule({ + graphId: flowID || "", + data: { + name: scheduleName, + graph_version: flowID ? flowVersion : undefined, + cron: cronExpression, + inputs: inputs, + credentials: credentials, + }, + }); + setOpen(false); + }; + + return { + cronExpression, + setCronExpression, + userTimezone, + timezoneDisplay, + handleCreateSchedule, + setScheduleName, + scheduleName, + isCreatingSchedule, + }; +}; diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/RunGraph/RunGraph.tsx b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/RunGraph/RunGraph.tsx index b7e59db9f3..b567f5692d 100644 --- a/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/RunGraph/RunGraph.tsx +++ b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/RunGraph/RunGraph.tsx @@ -6,6 +6,11 @@ import { useShallow } from "zustand/react/shallow"; import { StopIcon } from "@phosphor-icons/react"; import { cn } from "@/lib/utils"; import { RunInputDialog } from "../RunInputDialog/RunInputDialog"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/atoms/Tooltip/BaseTooltip"; export const RunGraph = () => { const { @@ -21,24 +26,31 @@ export const RunGraph = () => { return ( <> - + + + + + + {isGraphRunning ? "Stop agent" : "Run agent"} + + ); diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/RunInputDialog/RunInputDialog.tsx b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/RunInputDialog/RunInputDialog.tsx index 7d034cc680..41caf6156c 100644 --- a/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/RunInputDialog/RunInputDialog.tsx +++ b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/RunInputDialog/RunInputDialog.tsx @@ -3,17 +3,20 @@ import { RJSFSchema } from "@rjsf/utils"; import { uiSchema } from "../../../FlowEditor/nodes/uiSchema"; import { useGraphStore } from "@/app/(platform)/build/stores/graphStore"; import { Button } from "@/components/atoms/Button/Button"; -import { PlayIcon } from "@phosphor-icons/react"; +import { ClockIcon, PlayIcon } from "@phosphor-icons/react"; import { Text } from "@/components/atoms/Text/Text"; import { FormRenderer } from "@/components/renderers/input-renderer/FormRenderer"; import { useRunInputDialog } from "./useRunInputDialog"; +import { CronSchedulerDialog } from "../CronSchedulerDialog/CronSchedulerDialog"; export const RunInputDialog = ({ isOpen, setIsOpen, + purpose, }: { isOpen: boolean; setIsOpen: (isOpen: boolean) => void; + purpose: "run" | "schedule"; }) => { const hasInputs = useGraphStore((state) => state.hasInputs); const hasCredentials = useGraphStore((state) => state.hasCredentials); @@ -26,82 +29,107 @@ export const RunInputDialog = ({ credentialsUiSchema, handleManualRun, handleInputChange, + openCronSchedulerDialog, + setOpenCronSchedulerDialog, + inputValues, + credentialValues, handleCredentialChange, isExecutingGraph, } = useRunInputDialog({ setIsOpen }); return ( - - -
- {/* Credentials Section */} - {hasCredentials() && ( -
-
- - Credentials - + <> + + +
+ {/* Credentials Section */} + {hasCredentials() && ( +
+
+ + Credentials + +
+
+ handleCredentialChange(v.formData)} + uiSchema={credentialsUiSchema} + initialValues={{}} + formContext={{ + showHandles: false, + size: "large", + }} + /> +
-
- handleCredentialChange(v.formData)} - uiSchema={credentialsUiSchema} - initialValues={{}} - formContext={{ - showHandles: false, - size: "large", - }} - /> -
-
- )} + )} - {/* Inputs Section */} - {hasInputs() && ( -
-
- - Inputs - + {/* Inputs Section */} + {hasInputs() && ( +
+
+ + Inputs + +
+
+ handleInputChange(v.formData)} + uiSchema={uiSchema} + initialValues={{}} + formContext={{ + showHandles: false, + size: "large", + }} + /> +
-
- handleInputChange(v.formData)} - uiSchema={uiSchema} - initialValues={{}} - formContext={{ - showHandles: false, - size: "large", - }} - /> -
-
- )} + )} - {/* Action Button */} -
- + {/* Action Button */} +
+ {purpose === "run" && ( + + )} + {purpose === "schedule" && ( + + )} +
-
-
-
+ +
+ + ); }; diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/RunInputDialog/useRunInputDialog.ts b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/RunInputDialog/useRunInputDialog.ts index e5858b964a..c0621eeaae 100644 --- a/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/RunInputDialog/useRunInputDialog.ts +++ b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/RunInputDialog/useRunInputDialog.ts @@ -19,6 +19,8 @@ export const useRunInputDialog = ({ const credentialsSchema = useGraphStore( (state) => state.credentialsInputSchema, ); + + const [openCronSchedulerDialog, setOpenCronSchedulerDialog] = useState(false); const [inputValues, setInputValues] = useState>({}); const [credentialValues, setCredentialValues] = useState< Record @@ -104,5 +106,7 @@ export const useRunInputDialog = ({ handleInputChange, handleCredentialChange, handleManualRun, + openCronSchedulerDialog, + setOpenCronSchedulerDialog, }; }; diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/ScheduleGraph/ScheduleGraph.tsx b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/ScheduleGraph/ScheduleGraph.tsx new file mode 100644 index 0000000000..8b9515eccc --- /dev/null +++ b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/ScheduleGraph/ScheduleGraph.tsx @@ -0,0 +1,53 @@ +import { Button } from "@/components/atoms/Button/Button"; +import { ClockIcon } from "@phosphor-icons/react"; +import { RunInputDialog } from "../RunInputDialog/RunInputDialog"; +import { useScheduleGraph } from "./useScheduleGraph"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/atoms/Tooltip/BaseTooltip"; +import { CronSchedulerDialog } from "../CronSchedulerDialog/CronSchedulerDialog"; + +export const ScheduleGraph = () => { + const { + openScheduleInputDialog, + setOpenScheduleInputDialog, + handleScheduleGraph, + openCronSchedulerDialog, + setOpenCronSchedulerDialog, + } = useScheduleGraph(); + return ( + <> + + + + + + +

Schedule Graph

+
+
+
+ + + + ); +}; diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/ScheduleGraph/useScheduleGraph.ts b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/ScheduleGraph/useScheduleGraph.ts new file mode 100644 index 0000000000..152ad3904c --- /dev/null +++ b/autogpt_platform/frontend/src/app/(platform)/build/components/BuilderActions/components/ScheduleGraph/useScheduleGraph.ts @@ -0,0 +1,33 @@ +import { useGraphStore } from "@/app/(platform)/build/stores/graphStore"; +import { useShallow } from "zustand/react/shallow"; +import { useNewSaveControl } from "../../../NewControlPanel/NewSaveControl/useNewSaveControl"; +import { useState } from "react"; + +export const useScheduleGraph = () => { + const { onSubmit: onSaveGraph } = useNewSaveControl({ + showToast: false, + }); + const hasInputs = useGraphStore(useShallow((state) => state.hasInputs)); + const hasCredentials = useGraphStore( + useShallow((state) => state.hasCredentials), + ); + const [openScheduleInputDialog, setOpenScheduleInputDialog] = useState(false); + const [openCronSchedulerDialog, setOpenCronSchedulerDialog] = useState(false); + + const handleScheduleGraph = async () => { + await onSaveGraph(undefined); + if (hasInputs() || hasCredentials()) { + setOpenScheduleInputDialog(true); + } else { + setOpenCronSchedulerDialog(true); + } + }; + + return { + openScheduleInputDialog, + setOpenScheduleInputDialog, + handleScheduleGraph, + openCronSchedulerDialog, + setOpenCronSchedulerDialog, + }; +}; diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/FlowEditor/Flow/Flow.tsx b/autogpt_platform/frontend/src/app/(platform)/build/components/FlowEditor/Flow/Flow.tsx index ba8f7adc2e..320e55024c 100644 --- a/autogpt_platform/frontend/src/app/(platform)/build/components/FlowEditor/Flow/Flow.tsx +++ b/autogpt_platform/frontend/src/app/(platform)/build/components/FlowEditor/Flow/Flow.tsx @@ -23,6 +23,8 @@ export const Flow = () => { // We use this hook to load the graph and convert them into custom nodes and edges. useFlow(); + + // This hook is used for websocket realtime updates. useFlowRealtime(); const { isFlowContentLoading } = useFlow(); diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/ControlPanelButton.tsx b/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/ControlPanelButton.tsx index 99715c5df3..b176a002a7 100644 --- a/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/ControlPanelButton.tsx +++ b/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/ControlPanelButton.tsx @@ -1,35 +1,38 @@ -// BLOCK MENU TODO: We need a disable state in this, currently it's not in design. - import { cn } from "@/lib/utils"; import React from "react"; -interface Props extends React.HTMLAttributes { +interface Props extends React.HTMLAttributes { selected?: boolean; - children?: React.ReactNode; // For icon purpose + children?: React.ReactNode; disabled?: boolean; + as?: "div" | "button"; } export const ControlPanelButton: React.FC = ({ selected = false, children, disabled, + as = "div", className, ...rest }) => { + const Component = as; + return ( - // Using div instead of button, because it's only for design purposes. We are using this to give design to PopoverTrigger. -
{children} -
+ ); }; diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/NewBlockMenu/BlockMenu/BlockMenu.tsx b/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/NewBlockMenu/BlockMenu/BlockMenu.tsx index 197f552062..d77b917bc9 100644 --- a/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/NewBlockMenu/BlockMenu/BlockMenu.tsx +++ b/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/NewBlockMenu/BlockMenu/BlockMenu.tsx @@ -8,23 +8,32 @@ import { BlockMenuContent } from "../BlockMenuContent/BlockMenuContent"; import { ControlPanelButton } from "../../ControlPanelButton"; import { LegoIcon } from "@phosphor-icons/react"; import { useControlPanelStore } from "@/app/(platform)/build/stores/controlPanelStore"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/atoms/Tooltip/BaseTooltip"; export const BlockMenu = () => { const { blockMenuOpen, setBlockMenuOpen } = useControlPanelStore(); return ( // pinBlocksPopover ? true : open - - - {/* Need to find phosphor icon alternative for this lucide icon */} - - - + + + + + + + + + Blocks + + +
); diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/NewSaveControl/NewSaveControl.tsx b/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/NewSaveControl/NewSaveControl.tsx index ca058473a4..78dcd0874d 100644 --- a/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/NewSaveControl/NewSaveControl.tsx +++ b/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/NewSaveControl/NewSaveControl.tsx @@ -25,7 +25,7 @@ export const NewSaveControl = () => { const { saveControlOpen, setSaveControlOpen } = useControlPanelStore(); return ( - + { selected={saveControlOpen} className="rounded-none" > - {/* Need to find phosphor icon alternative for this lucide icon */} diff --git a/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/UndoRedoButtons.tsx b/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/UndoRedoButtons.tsx new file mode 100644 index 0000000000..6f134056c8 --- /dev/null +++ b/autogpt_platform/frontend/src/app/(platform)/build/components/NewControlPanel/UndoRedoButtons.tsx @@ -0,0 +1,62 @@ +import { Separator } from "@/components/__legacy__/ui/separator"; +import { ControlPanelButton } from "./ControlPanelButton"; +import { ArrowUUpLeftIcon, ArrowUUpRightIcon } from "@phosphor-icons/react"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/atoms/Tooltip/BaseTooltip"; +import { useHistoryStore } from "../../stores/historyStore"; + +import { useEffect } from "react"; + +export const UndoRedoButtons = () => { + const { undo, redo, canUndo, canRedo } = useHistoryStore(); + + // Keyboard shortcuts for undo and redo + useEffect(() => { + const handleKeyDown = (event: KeyboardEvent) => { + const isMac = /Mac/i.test(navigator.userAgent); + const isCtrlOrCmd = isMac ? event.metaKey : event.ctrlKey; + + if (isCtrlOrCmd && event.key === "z" && !event.shiftKey) { + event.preventDefault(); + if (canUndo()) { + undo(); + } + } else if (isCtrlOrCmd && event.key === "y") { + event.preventDefault(); + if (canRedo()) { + redo(); + } + } + }; + + window.addEventListener("keydown", handleKeyDown); + return () => { + window.removeEventListener("keydown", handleKeyDown); + }; + }, [undo, redo, canUndo, canRedo]); + + return ( + <> + + + + + + + Undo + + + + + + + + + Redo + + + ); +}; diff --git a/autogpt_platform/frontend/src/app/(platform)/build/stores/historyStore.ts b/autogpt_platform/frontend/src/app/(platform)/build/stores/historyStore.ts new file mode 100644 index 0000000000..1e7ecc1032 --- /dev/null +++ b/autogpt_platform/frontend/src/app/(platform)/build/stores/historyStore.ts @@ -0,0 +1,80 @@ +import { create } from "zustand"; +import isEqual from "lodash/isEqual"; + +import { CustomNode } from "../components/FlowEditor/nodes/CustomNode/CustomNode"; +import { Connection, useEdgeStore } from "./edgeStore"; +import { useNodeStore } from "./nodeStore"; + +type HistoryState = { + nodes: CustomNode[]; + connections: Connection[]; +}; + +type HistoryStore = { + past: HistoryState[]; + future: HistoryState[]; + undo: () => void; + redo: () => void; + canUndo: () => boolean; + canRedo: () => boolean; + pushState: (state: HistoryState) => void; + clear: () => void; +}; + +const MAX_HISTORY = 50; + +export const useHistoryStore = create((set, get) => ({ + past: [{ nodes: [], connections: [] }], + future: [], + + pushState: (state: HistoryState) => { + const { past } = get(); + const lastState = past[past.length - 1]; + + if (lastState && isEqual(lastState, state)) { + return; + } + + set((prev) => ({ + past: [...prev.past.slice(-MAX_HISTORY + 1), state], + future: [], + })); + }, + + undo: () => { + const { past, future } = get(); + if (past.length <= 1) return; + + const currentState = past[past.length - 1]; + + const previousState = past[past.length - 2]; + + useNodeStore.getState().setNodes(previousState.nodes); + useEdgeStore.getState().setConnections(previousState.connections); + + set({ + past: past.slice(0, -1), + future: [currentState, ...future], + }); + }, + + redo: () => { + const { past, future } = get(); + if (future.length === 0) return; + + const nextState = future[0]; + + useNodeStore.getState().setNodes(nextState.nodes); + useEdgeStore.getState().setConnections(nextState.connections); + + set({ + past: [...past, nextState], + future: future.slice(1), + }); + }, + + canUndo: () => get().past.length > 1, + canRedo: () => get().future.length > 0, + + clear: () => set({ past: [{ nodes: [], connections: [] }], future: [] }), +})); diff --git a/autogpt_platform/frontend/src/app/(platform)/build/stores/nodeStore.ts b/autogpt_platform/frontend/src/app/(platform)/build/stores/nodeStore.ts index 567410a5a1..9e999ce103 100644 --- a/autogpt_platform/frontend/src/app/(platform)/build/stores/nodeStore.ts +++ b/autogpt_platform/frontend/src/app/(platform)/build/stores/nodeStore.ts @@ -6,6 +6,8 @@ import { convertBlockInfoIntoCustomNodeData } from "../components/helper"; import { Node } from "@/app/api/__generated__/models/node"; import { AgentExecutionStatus } from "@/app/api/__generated__/models/agentExecutionStatus"; import { NodeExecutionResult } from "@/app/api/__generated__/models/nodeExecutionResult"; +import { useHistoryStore } from "./historyStore"; +import { useEdgeStore } from "./edgeStore"; type NodeStore = { nodes: CustomNode[]; @@ -44,10 +46,26 @@ export const useNodeStore = create((set, get) => ({ set((state) => ({ nodeCounter: state.nodeCounter + 1, })), - onNodesChange: (changes) => + onNodesChange: (changes) => { + const prevState = { + nodes: get().nodes, + connections: useEdgeStore.getState().connections, + }; + const shouldTrack = changes.some( + (change) => + change.type === "remove" || + change.type === "add" || + (change.type === "position" && change.dragging === false), + ); set((state) => ({ nodes: applyNodeChanges(changes, state.nodes), - })), + })); + + if (shouldTrack) { + useHistoryStore.getState().pushState(prevState); + } + }, + addNode: (node) => set((state) => ({ nodes: [...state.nodes, node], @@ -66,12 +84,20 @@ export const useNodeStore = create((set, get) => ({ nodes: [...state.nodes, customNode], })); }, - updateNodeData: (nodeId, data) => + updateNodeData: (nodeId, data) => { set((state) => ({ nodes: state.nodes.map((n) => n.id === nodeId ? { ...n, data: { ...n.data, ...data } } : n, ), - })), + })); + + const newState = { + nodes: get().nodes, + connections: useEdgeStore.getState().connections, + }; + + useHistoryStore.getState().pushState(newState); + }, toggleAdvanced: (nodeId: string) => set((state) => ({ nodeAdvancedStates: { diff --git a/autogpt_platform/frontend/src/app/(platform)/layout.tsx b/autogpt_platform/frontend/src/app/(platform)/layout.tsx index 36ae5f56ef..2975e7d097 100644 --- a/autogpt_platform/frontend/src/app/(platform)/layout.tsx +++ b/autogpt_platform/frontend/src/app/(platform)/layout.tsx @@ -1,10 +1,12 @@ import { Navbar } from "@/components/layout/Navbar/Navbar"; +import { AdminImpersonationBanner } from "./admin/components/AdminImpersonationBanner"; import { ReactNode } from "react"; export default function PlatformLayout({ children }: { children: ReactNode }) { return (
+
{children}
); diff --git a/autogpt_platform/frontend/src/app/(platform)/marketplace/components/MainAgentPage/MainAgentPage.tsx b/autogpt_platform/frontend/src/app/(platform)/marketplace/components/MainAgentPage/MainAgentPage.tsx index 67eb25b8b3..ce22b73f56 100644 --- a/autogpt_platform/frontend/src/app/(platform)/marketplace/components/MainAgentPage/MainAgentPage.tsx +++ b/autogpt_platform/frontend/src/app/(platform)/marketplace/components/MainAgentPage/MainAgentPage.tsx @@ -1,14 +1,14 @@ "use client"; -import { Breadcrumbs } from "@/components/molecules/Breadcrumbs/Breadcrumbs"; -import { useMainAgentPage } from "./useMainAgentPage"; -import { MarketplaceAgentPageParams } from "../../agent/[creator]/[slug]/page"; import { Separator } from "@/components/__legacy__/ui/separator"; +import { Breadcrumbs } from "@/components/molecules/Breadcrumbs/Breadcrumbs"; +import { ErrorCard } from "@/components/molecules/ErrorCard/ErrorCard"; +import { MarketplaceAgentPageParams } from "../../agent/[creator]/[slug]/page"; +import { AgentImages } from "../AgentImages/AgentImage"; +import { AgentInfo } from "../AgentInfo/AgentInfo"; +import { AgentPageLoading } from "../AgentPageLoading"; import { AgentsSection } from "../AgentsSection/AgentsSection"; import { BecomeACreator } from "../BecomeACreator/BecomeACreator"; -import { AgentPageLoading } from "../AgentPageLoading"; -import { ErrorCard } from "@/components/molecules/ErrorCard/ErrorCard"; -import { AgentInfo } from "../AgentInfo/AgentInfo"; -import { AgentImages } from "../AgentImages/AgentImage"; +import { useMainAgentPage } from "./useMainAgentPage"; type MainAgentPageProps = { params: MarketplaceAgentPageParams; @@ -65,7 +65,7 @@ export const MainAgentPage = ({ params }: MainAgentPageProps) => { } const breadcrumbs = [ - { name: "Markertplace", link: "/marketplace" }, + { name: "Marketplace", link: "/marketplace" }, { name: agent.creator, link: `/marketplace/creator/${encodeURIComponent(agent.creator)}`, diff --git a/autogpt_platform/frontend/src/app/api/mutators/custom-mutator.ts b/autogpt_platform/frontend/src/app/api/mutators/custom-mutator.ts index f5eb56abe8..0a31eb6942 100644 --- a/autogpt_platform/frontend/src/app/api/mutators/custom-mutator.ts +++ b/autogpt_platform/frontend/src/app/api/mutators/custom-mutator.ts @@ -6,6 +6,10 @@ import { import { transformDates } from "./date-transformer"; import { environment } from "@/services/environment"; +import { + IMPERSONATION_HEADER_NAME, + IMPERSONATION_STORAGE_KEY, +} from "@/lib/constants"; const FRONTEND_BASE_URL = process.env.NEXT_PUBLIC_FRONTEND_BASE_URL || "http://localhost:3000"; @@ -53,6 +57,22 @@ export const customMutator = async < ...((requestOptions.headers as Record) || {}), }; + if (environment.isClientSide()) { + try { + const impersonatedUserId = sessionStorage.getItem( + IMPERSONATION_STORAGE_KEY, + ); + if (impersonatedUserId) { + headers[IMPERSONATION_HEADER_NAME] = impersonatedUserId; + } + } catch (error) { + console.error( + "Admin impersonation: Failed to access sessionStorage:", + error, + ); + } + } + const isFormData = data instanceof FormData; const contentType = isFormData ? "multipart/form-data" : "application/json"; @@ -94,22 +114,38 @@ export const customMutator = async < }); if (!response.ok) { - const response_data = await getBody(response); + let responseData: any = null; + try { + responseData = await getBody(response); + } catch (error) { + console.warn("Failed to parse error response body:", error); + responseData = { error: "Failed to parse response" }; + } + const errorMessage = - response_data?.detail || response_data?.message || response.statusText; + responseData?.detail || + responseData?.message || + response.statusText || + `HTTP ${response.status}`; console.error( `Request failed ${environment.isServerSide() ? "on server" : "on client"}`, - { status: response.status, url: fullUrl, data: response_data }, + { + status: response.status, + method, + url: fullUrl.replace(baseUrl, ""), // Show relative URL for cleaner logs + errorMessage, + responseData: responseData || "No response data", + }, ); - throw new ApiError(errorMessage, response.status, response_data); + throw new ApiError(errorMessage, response.status, responseData); } - const response_data = await getBody(response); + const responseData = await getBody(response); // Transform ISO date strings to Date objects in the response data - const transformedData = transformDates(response_data); + const transformedData = transformDates(responseData); return { status: response.status, diff --git a/autogpt_platform/frontend/src/app/api/proxy/[...path]/route.ts b/autogpt_platform/frontend/src/app/api/proxy/[...path]/route.ts index f5408eb0a6..09235f9c3b 100644 --- a/autogpt_platform/frontend/src/app/api/proxy/[...path]/route.ts +++ b/autogpt_platform/frontend/src/app/api/proxy/[...path]/route.ts @@ -31,6 +31,7 @@ async function handleJsonRequest( backendUrl, payload, "application/json", + req, ); } @@ -39,7 +40,7 @@ async function handleFormDataRequest( backendUrl: string, ): Promise { const formData = await req.formData(); - return await makeAuthenticatedFileUpload(backendUrl, formData); + return await makeAuthenticatedFileUpload(backendUrl, formData, req); } async function handleUrlEncodedRequest( @@ -55,14 +56,22 @@ async function handleUrlEncodedRequest( backendUrl, payload, "application/x-www-form-urlencoded", + req, ); } -async function handleRequestWithoutBody( +async function handleGetDeleteRequest( method: string, backendUrl: string, + req: NextRequest, ): Promise { - return await makeAuthenticatedRequest(method, backendUrl); + return await makeAuthenticatedRequest( + method, + backendUrl, + undefined, + "application/json", + req, + ); } function createUnsupportedContentTypeResponse( @@ -168,7 +177,7 @@ async function handler( try { if (method === "GET" || method === "DELETE") { - responseBody = await handleRequestWithoutBody(method, backendUrl); + responseBody = await handleGetDeleteRequest(method, backendUrl, req); } else if (contentType?.includes("application/json")) { responseBody = await handleJsonRequest(req, method, backendUrl); } else if (contentType?.includes("multipart/form-data")) { diff --git a/autogpt_platform/frontend/src/components/atoms/Switch/Switch.tsx b/autogpt_platform/frontend/src/components/atoms/Switch/Switch.tsx index 94512c6f9e..9193093e67 100644 --- a/autogpt_platform/frontend/src/components/atoms/Switch/Switch.tsx +++ b/autogpt_platform/frontend/src/components/atoms/Switch/Switch.tsx @@ -11,7 +11,7 @@ const Switch = React.forwardRef< >(({ className, ...props }, ref) => ( = { + "Content-Type": "application/json", + }; + + if (environment.isClientSide()) { + try { + const impersonatedUserId = sessionStorage.getItem( + IMPERSONATION_STORAGE_KEY, + ); + if (impersonatedUserId) { + headers[IMPERSONATION_HEADER_NAME] = impersonatedUserId; + } + } catch (_error) { + console.error( + "Admin impersonation: Failed to access sessionStorage:", + _error, + ); + } + } + const response = await fetch(url, { method, - headers: { - "Content-Type": "application/json", - }, + headers, body: !payloadAsQuery && payload ? JSON.stringify(payload) : undefined, credentials: "include", }); diff --git a/autogpt_platform/frontend/src/lib/autogpt-server-api/helpers.ts b/autogpt_platform/frontend/src/lib/autogpt-server-api/helpers.ts index 086cd41126..f405c864cc 100644 --- a/autogpt_platform/frontend/src/lib/autogpt-server-api/helpers.ts +++ b/autogpt_platform/frontend/src/lib/autogpt-server-api/helpers.ts @@ -1,6 +1,7 @@ import { getServerSupabase } from "@/lib/supabase/server/getServerSupabase"; import { Key, storage } from "@/services/storage/local-storage"; import { environment } from "@/services/environment"; +import { IMPERSONATION_HEADER_NAME } from "@/lib/constants"; import { GraphValidationErrorResponse } from "./types"; @@ -133,6 +134,7 @@ export function createRequestHeaders( token: string, hasRequestBody: boolean, contentType: string = "application/json", + originalRequest?: Request, ): Record { const headers: Record = {}; @@ -144,6 +146,16 @@ export function createRequestHeaders( headers["Authorization"] = `Bearer ${token}`; } + // Forward admin impersonation header if present + if (originalRequest) { + const impersonationHeader = originalRequest.headers.get( + IMPERSONATION_HEADER_NAME, + ); + if (impersonationHeader) { + headers[IMPERSONATION_HEADER_NAME] = impersonationHeader; + } + } + return headers; } @@ -249,6 +261,7 @@ export async function makeAuthenticatedRequest( url: string, payload?: Record, contentType: string = "application/json", + originalRequest?: Request, ): Promise { const token = await getServerAuthToken(); const payloadAsQuery = ["GET", "DELETE"].includes(method); @@ -262,7 +275,12 @@ export async function makeAuthenticatedRequest( const response = await fetch(requestUrl, { method, - headers: createRequestHeaders(token, hasRequestBody, contentType), + headers: createRequestHeaders( + token, + hasRequestBody, + contentType, + originalRequest, + ), body: hasRequestBody ? serializeRequestBody(payload, contentType) : undefined, @@ -300,13 +318,17 @@ export async function makeAuthenticatedRequest( export async function makeAuthenticatedFileUpload( url: string, formData: FormData, + originalRequest?: Request, ): Promise { const token = await getServerAuthToken(); - const headers: Record = {}; - if (token && token !== "no-token-found") { - headers["Authorization"] = `Bearer ${token}`; - } + // Reuse existing header creation logic but exclude Content-Type for FormData + const headers = createRequestHeaders( + token, + false, + "application/json", + originalRequest, + ); // Don't set Content-Type for FormData - let the browser set it with boundary const response = await fetch(url, { diff --git a/autogpt_platform/frontend/src/lib/constants.ts b/autogpt_platform/frontend/src/lib/constants.ts new file mode 100644 index 0000000000..f275dbf919 --- /dev/null +++ b/autogpt_platform/frontend/src/lib/constants.ts @@ -0,0 +1,7 @@ +/** + * Shared constants for the frontend application + */ + +// Admin impersonation +export const IMPERSONATION_HEADER_NAME = "X-Act-As-User-Id"; +export const IMPERSONATION_STORAGE_KEY = "admin-impersonate-user-id";