diff --git a/.azdo/publish.yml b/.azdo/publish.yml new file mode 100644 index 000000000..d612543c5 --- /dev/null +++ b/.azdo/publish.yml @@ -0,0 +1,204 @@ +# ============================================================================= +# This pipeline publishes npm packages. Manually triggered only. +# - Internal: publishes unsigned packages to the internal TeamsSDKPreviews feed. +# - Public: publishes signed packages to npm via ESRP (requires approval). +# ============================================================================= + +trigger: none + +pr: none + +parameters: +- name: publishType + displayName: 'Publish Type' + type: string + default: 'Internal' + values: + - Internal + - Public + +variables: +- group: TeamsSDK-Release + +resources: + repositories: + - repository: 1esPipelines + type: git + name: 1ESPipelineTemplates/1ESPipelineTemplates + ref: refs/tags/release + +extends: + template: v1/1ES.Unofficial.PipelineTemplate.yml@1esPipelines + parameters: + pool: + name: 1ES-Teams-Windows-2022-DomoreexpGithub + os: windows + stages: + - stage: build + displayName: Build and Test + jobs: + - job: build_test + pool: + name: 1ES-Teams-Windows-2022-DomoreexpGithub + os: windows + templateContext: + isReleaseJob: true + variables: + ob_outputDirectory: '$(Build.SourcesDirectory)/out' + ob_git_fetchTags: true + ob_sdl_binskim_break: true + ob_git_fetchDepth: -1 + + steps: + - checkout: self + displayName: 'Checkout' + fetchDepth: 0 + target: + container: host + + - task: NodeTool@0 + displayName: 'Use Node 24.x' + inputs: + versionSpec: '24.x' + checkLatest: true + target: + container: host + + - task: UseDotNet@2 + displayName: 'Use .NET SDK' + inputs: + packageType: 'sdk' + version: '8.x' + target: + container: host + + - powershell: | + # Install nbgv + dotnet tool install -g nbgv + Write-Host "##vso[task.prependpath]$env:USERPROFILE\.dotnet\tools" + nbgv --version + + # Set cloud build number and variables (resolves detached HEAD in ADO) + nbgv cloud + displayName: 'Install nbgv and set cloud build version' + target: + container: host + + # Always use internal feed for dependency resolution (avoids firewall issues on 1ES pool) + - task: CmdLine@2 + displayName: 'Configure npm registry' + inputs: + script: | + echo always-auth=true >> .npmrc + echo registry=https://pkgs.dev.azure.com/DomoreexpGithub/Github_Pipelines/_packaging/TeamsSDKPreviews/npm/registry/ >> .npmrc + target: + container: host + + - task: NpmAuthenticate@0 + displayName: 'Authenticate npm registry' + inputs: + workingFile: .npmrc + target: + container: host + + - task: Npm@1 + displayName: 'npm ci' + inputs: + command: ci + verbose: true + target: + container: host + + - script: npm run build + displayName: 'npm build' + target: + container: host + + - script: npm test + displayName: 'npm test' + continueOnError: false + target: + container: host + + - powershell: | + Write-Host "Stamping package versions from nbgv..." + npm run version:stamp + + # Get version from nbgv and set NpmTag + $version = (npm run version:get --silent).Trim() + Write-Host "Version from nbgv: $version" + Write-Host "##vso[task.setvariable variable=VersionNumber]$version" + + # If version contains '-' it's a prerelease, use 'next' tag; otherwise 'latest' + if ($version -match '-') { + Write-Host "Prerelease version detected - using 'next' npm tag" + Write-Host "##vso[task.setvariable variable=NpmTag]next" + } else { + Write-Host "Stable version detected - using 'latest' npm tag" + Write-Host "##vso[task.setvariable variable=NpmTag]latest" + } + displayName: 'Stamp package versions (nbgv)' + env: + PublicRelease: 'true' + target: + container: host + + - powershell: | + New-Item -ItemType Directory -Force -Path ./out + + Get-ChildItem -Path packages, external -Directory | ForEach-Object { + $packageJsonPath = "$($_.FullName)/package.json" + if (Test-Path $packageJsonPath) { + $packageJson = Get-Content $packageJsonPath | ConvertFrom-Json + if ($packageJson.private -eq $true) { + Write-Host "Skipping $($_.Name) (marked as private)" + } else { + Write-Host "Packing $($_.Name)..." + Set-Location $_.FullName + npm pack --pack-destination ../../out + Set-Location ../.. + } + } + } + + Write-Host "`nFiles to publish:" + Get-ChildItem ./out + displayName: 'npm pack (excluding private packages)' + target: + container: host + + # Publish to internal npm feed (Azure Artifacts) + - powershell: | + Get-ChildItem ./out -Filter *.tgz | ForEach-Object { + Write-Host "Publishing $($_.Name) to internal feed..." + npm publish $_.FullName --tag $(NpmTag) + } + displayName: 'Publish packages to internal npm feed' + condition: and(succeeded(), eq('${{ parameters.publishType }}', 'Internal')) + target: + container: host + + # Publish to npm via ESRP + - task: EsrpRelease@10 + displayName: 'Publish packages to npm via ESRP' + condition: and(succeeded(), eq('${{ parameters.publishType }}', 'Public')) + inputs: + connectedservicename: 'TeamsESRP-Release-Npm' + usemanagedidentity: true + keyvaultname: 'esrp-teams' + signcertname: '37a342c7-607b-474f-a41f-b772450e461d' + clientid: '37a342c7-607b-474f-a41f-b772450e461d' + intent: 'packagedistribution' + contenttype: 'npm' + contentsource: 'Folder' + folderlocation: '$(Build.SourcesDirectory)/out' + waitforreleasecompletion: true + serviceendpointurl: 'https://api.esrp.microsoft.com' + owners: $(Release.Owners) + approvers: $(Release.Approvers) + mainpublisher: 'ESRPRELPACMAN' + domaintenantid: '975f013f-7f24-47e8-a7d3-abc4752bf346' + productState: $(NpmTag) + releasetitle: 'Teams SDK TypeScript $(VersionNumber)' + target: + container: host diff --git a/.changeset/README.md b/.changeset/README.md deleted file mode 100644 index e5b6d8d6a..000000000 --- a/.changeset/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Changesets - -Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works -with multi-package repos, or single-package repos to help you version and publish your code. You can -find the full documentation for it [in our repository](https://github.com/changesets/changesets) - -We have a quick list of common questions to get you started engaging with this project in -[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json deleted file mode 100644 index bdb4c9874..000000000 --- a/.changeset/config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$schema": "https://unpkg.com/@changesets/config@3.0.2/schema.json", - "changelog": "@changesets/cli/changelog", - "commit": false, - "fixed": [["@microsoft/teams.*"]], - "linked": [], - "access": "public", - "baseBranch": "main", - "updateInternalDependencies": "patch", - "ignore": [], - "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": { - "onlyUpdatePeerDependentsWhenOutOfRange": true - } -} diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b8e450e7e..0d9d88f47 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,11 +1,2 @@ /\\* @microsoft/teams-ai-admins -/.github/ @microsoft/teams-ai-admins - -# Cards -/packages/cards/ @dclaux - -# Client -/packages/client/ @ydogandjiev @Jesperholmbergmsft - -# DevTools -/packages/devtools/ @corinagum \ No newline at end of file +/.github/ @microsoft/teams-ai-admins \ No newline at end of file diff --git a/.github/workflows/build-test-lint.yml b/.github/workflows/build-test-lint.yml index 7646fd3af..eefa26769 100644 --- a/.github/workflows/build-test-lint.yml +++ b/.github/workflows/build-test-lint.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: ['20.x', '21.x', '22.x', '23.x'] + node-version: ['24.x', '25.x'] permissions: contents: read steps: diff --git a/AGENTS_TEMPLATE.md b/AGENTS_TEMPLATE.md new file mode 100644 index 000000000..8f1e29b0c --- /dev/null +++ b/AGENTS_TEMPLATE.md @@ -0,0 +1,613 @@ +# Agent Instructions for Teams SDK based agents + +This document provides guidance for AI coding agents working on Microsoft Teams bot projects built with the new Teams SDK and OpenAI integration. + +## Project Overview + +This is a Microsoft Teams conversational AI agent that: +- Uses the **new Microsoft Teams SDK** (NOT based on BotFramework) +- Integrates with **OpenAI GPT-4o** for chat completions +- Supports **streaming responses** for real-time user feedback +- Maintains **conversation history** via local storage + +## Critical Setup Requirements + +Before diving in, be aware of these commonly missed steps that cause the bot to fail silently: + +1. **Service Principal Required**: After creating an Azure AD app, you MUST also create a service principal with `az ad sp create --id `. Without this, the bot receives messages but can't respond. + +2. **Correct Environment Variable Names**: The Teams SDK reads `CLIENT_ID`/`CLIENT_SECRET`/`TENANT_ID` from environment variables - NOT the `MicrosoftApp*` names from older Bot Framework documentation. + +3. **SingleTenant Only**: Azure deprecated MultiTenant bots. Use SingleTenant and ensure you're using Teams in the same tenant. + +4. **Globally Unique Bot Names**: Azure bot names must be unique across all of Azure. Add a timestamp suffix. + +See the [Troubleshooting](#troubleshooting) section for detailed solutions to these issues. + +## Architecture + +``` +src/ +└── index.ts # Main application entry point + +appPackage/ +├── manifest.json # Teams app manifest +├── color.png # App icon (192x192) +└── outline.png # App outline icon (32x32) +``` + +### Core Dependencies + +| Package | Purpose | +|---------|---------| +| `@microsoft/teams.apps` | Core App class for hosting, routing, plugins | +| `@microsoft/teams.ai` | ChatPrompt, Message types for AI interactions | +| `@microsoft/teams.common` | LocalStorage and shared utilities | +| `@microsoft/teams.dev` | DevtoolsPlugin for debugging | +| `@microsoft/teams.openai` | OpenAI model integration | + +## Key Concepts + +### The App Class + +The `App` class is the central entry point that handles: +- HTTP server hosting +- Activity routing +- Plugin management +- Storage configuration + +```typescript +import { App } from '@microsoft/teams.apps'; + +const app = new App({ + storage, + plugins: [new DevtoolsPlugin()], +}); +``` + +> **Note**: The App automatically reads credentials from environment variables (`CLIENT_ID`, `CLIENT_SECRET`, `TENANT_ID`). You don't need to pass them explicitly to the constructor. + +### Event-Driven Architecture + +The SDK uses an event-driven pattern. Register handlers using `app.on()`: + +```typescript +app.on('message', async ({ stream, activity }) => { + // Handle incoming messages +}); +``` + +**Available Events:** +- `message` - User sends a message +- `message.submit` - Adaptive Card action submitted +- `install` - Bot installed +- `uninstall` - Bot removed + +### ChatPrompt and Streaming + +Use `ChatPrompt` for AI interactions with streaming support: + +```typescript +const prompt = new ChatPrompt({ + messages: existingMessages, + model: new OpenAIChatModel({ + model: 'gpt-4o', + apiKey: process.env.OPENAI_API_KEY, + }), +}); + +await prompt.send(userText, { + onChunk: (chunk) => stream.emit(chunk), +}); +``` + +### Conversation State + +Conversation history is keyed by `{conversationId}/{userId}`: + +```typescript +const key = `${activity.conversation.id}/${activity.from.id}`; +const messages = storage.get(key); +``` + +## Development Workflow + +### Prerequisites + +1. Node.js >= 20 (LTS) installed +2. OpenAI API key configured in `.env` +3. Azure Bot registration (for Teams deployment) + +### Running Locally + +```bash +# Install dependencies +npm install + +# Development mode with hot reload +npm run dev + +# Production build +npm run build +npm start +``` + +### Environment Variables + +| Variable | Required | Description | +|----------|----------|-------------| +| `OPENAI_API_KEY` | Yes | OpenAI API key for GPT-4o | +| `CLIENT_ID` | Yes | Azure AD App Registration ID (same as MicrosoftAppId) | +| `CLIENT_SECRET` | Yes | Azure AD App client secret (same as MicrosoftAppPassword) | +| `TENANT_ID` | Yes | Azure AD Tenant ID | +| `PORT` | No | Server port (default: 3978) | + +> **Note**: The Teams SDK expects `CLIENT_ID`, `CLIENT_SECRET`, and `TENANT_ID` (not the `MicrosoftApp*` naming convention used by older Bot Framework SDKs). + +### Building for Production + +```bash +npm run clean # Remove dist folder +npm run build # Compile TypeScript via tsup +``` + +## Azure Bot Registration + +To test the bot locally inside a real Teams instance, you must register it in Azure and create a sideloadable app package. + +### Step 1: Gather Required Information + +You'll need three pieces of information: +- **Bot Name**: 3-36 alphanumeric characters (hyphens allowed), e.g., `my-agent-bot` +- **Azure Resource Group**: An existing resource group in your Azure subscription +- **Messaging Endpoint**: HTTPS URL where Teams will send messages (e.g., `https://-3978..devtunnels.ms/api/messages`) + +For local development, use [Microsoft Dev Tunnels](https://learn.microsoft.com/en-us/azure/developer/dev-tunnels/) to expose your local server. Dev tunnels integrate with your Microsoft account and don't require a separate signup. + +```bash +# Install dev tunnels CLI (macOS) +brew install --cask devtunnel + +# Login (uses your Microsoft account) +devtunnel user login + +# Create a persistent tunnel with anonymous access (required for Bot Framework) +devtunnel create my-bot-tunnel --allow-anonymous +devtunnel port create -p 3978 + +# Start your bot locally +npm run dev + +# In another terminal, start the tunnel +devtunnel host +``` + +Your messaging endpoint will be: `https://-3978..devtunnels.ms/api/messages` + +### Step 2: Verify Azure CLI Setup + +Check that Azure CLI is installed and you're logged in: + +```bash +# Check Azure CLI is installed +which az + +# Check login status +az account show + +# If not logged in, authenticate +az login +``` + +### Step 3: Register the Bot in Azure + +Run the following Azure CLI commands to create the bot registration: + +```bash +# Set variables - BOT_NAME must be globally unique, so add a unique suffix +BOT_NAME="my-agent-bot-$(date +%s | tail -c 6)" +RESOURCE_GROUP="your-resource-group" +MESSAGING_ENDPOINT="https://your-tunnel-id.region.devtunnels.ms/api/messages" + +# Create Azure AD App Registration +APP_ID=$(az ad app create \ + --display-name "$BOT_NAME" \ + --sign-in-audience "AzureADMyOrg" \ + --query appId -o tsv) + +# CRITICAL: Create a Service Principal for the app +# Without this, the bot will fail with AADSTS7000229 errors when trying to respond +az ad sp create --id $APP_ID + +# Create a client secret (save this - it won't be shown again!) +APP_SECRET=$(az ad app credential reset \ + --id $APP_ID \ + --display-name "Bot Secret" \ + --query password -o tsv) + +# Get your Tenant ID +TENANT_ID=$(az account show --query tenantId -o tsv) + +# Create the Bot Service (MultiTenant is deprecated, use SingleTenant) +az bot create \ + --resource-group $RESOURCE_GROUP \ + --name $BOT_NAME \ + --app-type SingleTenant \ + --appid $APP_ID \ + --tenant-id $TENANT_ID \ + --endpoint $MESSAGING_ENDPOINT + +# Enable the Teams channel +az bot msteams create \ + --resource-group $RESOURCE_GROUP \ + --name $BOT_NAME + +# Display credentials (SAVE THESE!) +echo "=== Bot Credentials ===" +echo "CLIENT_ID: $APP_ID" +echo "CLIENT_SECRET: $APP_SECRET" +echo "TENANT_ID: $TENANT_ID" +echo "BOT_NAME: $BOT_NAME" +``` + +> **CRITICAL**: The `az ad sp create` command creates a Service Principal, which is **required** for the bot to authenticate. This is the most commonly missed step and causes the bot to receive messages but fail silently when responding. + +### Step 4: Configure Bot Credentials + +Add the Azure credentials to your `.env` file: + +```bash +OPENAI_API_KEY=your-openai-key +CLIENT_ID= +CLIENT_SECRET= +TENANT_ID= +``` + +> **Important**: The Teams SDK uses `CLIENT_ID`, `CLIENT_SECRET`, and `TENANT_ID` - not the `MicrosoftApp*` names used by older Bot Framework SDKs. + +### Step 5: Update the Messaging Endpoint (if needed) + +If your tunnel URL changes, update the bot's messaging endpoint: + +```bash +az bot update \ + --resource-group $RESOURCE_GROUP \ + --name $BOT_NAME \ + --endpoint "https://new-tunnel-id-3978.region.devtunnels.ms/api/messages" +``` + +## Teams App Package + +The `appPackage/` directory contains the Teams app manifest for sideloading. + +### Manifest Variables + +These placeholders in `manifest.json` must be replaced for deployment: + +| Variable | Description | +|----------|-------------| +| `${{TEAMS_APP_ID}}` | Unique GUID for the Teams app (generate with `uuidgen`) | +| `${{BOT_ID}}` | Azure AD App Registration ID (MicrosoftAppId from registration) | +| `${{BOT_DOMAIN}}` | Bot messaging endpoint domain (e.g., `abc123-3978.usw2.devtunnels.ms`) | +| `${{APP_NAME_SUFFIX}}` | Environment suffix (e.g., `dev`, `prod`) | + +### Step 1: Prepare the Manifest + +Create a deployment-ready manifest by replacing the variables: + +```bash +# Generate a unique app ID +TEAMS_APP_ID=$(uuidgen) + +# Use your Bot ID from Azure registration (CLIENT_ID) +BOT_ID="your-client-id" + +# Your dev tunnel domain (without https://) +BOT_DOMAIN="abc123.region456.devtunnels.ms" + +# Environment suffix +APP_NAME_SUFFIX="dev" + +# Create a processed manifest +cd appPackage +sed -e "s/\${{TEAMS_APP_ID}}/$TEAMS_APP_ID/g" \ + -e "s/\${{BOT_ID}}/$BOT_ID/g" \ + -e "s/\${{BOT_DOMAIN}}/$BOT_DOMAIN/g" \ + -e "s/\${{APP_NAME_SUFFIX}}/$APP_NAME_SUFFIX/g" \ + manifest.json > manifest.processed.json + +mv manifest.processed.json manifest.json +``` + +### Step 2: Verify Icons + +Ensure you have the required icons in `appPackage/`: +- `color.png` - 192x192 pixels, full-color app icon +- `outline.png` - 32x32 pixels, transparent outline icon + +If you need to generate placeholder icons: + +```bash +# Using ImageMagick (install with: brew install imagemagick) +convert -size 192x192 xc:#6264A7 -fill white -gravity center \ + -pointsize 72 -annotate 0 "M" appPackage/color.png + +convert -size 32x32 xc:none -fill white -gravity center \ + -pointsize 20 -annotate 0 "M" appPackage/outline.png +``` + +### Step 3: Create the App Package ZIP + +```bash +cd appPackage +zip -r ../my-agent.zip manifest.json color.png outline.png +cd .. +``` + +### Step 4: Sideload to Microsoft Teams + +1. Open Microsoft Teams (desktop or web) +2. Click **Apps** in the left sidebar +3. Click **Manage your apps** at the bottom +4. Click **Upload an app** +5. Select **Upload a custom app** +6. Choose the `my-agent.zip` file you created +7. Click **Add** to install the bot + +### Step 5: Test the Bot + +1. After installation, find your bot in the Apps list +2. Click on it to open a chat +3. Send a message to verify it responds + +## Utility Commands + +### Regenerate Bot Secret + +If you need a new client secret: + +```bash +az ad app credential reset \ + --id $APP_ID \ + --display-name "Bot Secret $(date +%Y%m%d)" \ + --query password -o tsv +``` + +### Delete Bot Registration + +To clean up Azure resources: + +```bash +# Delete the bot service +az bot delete --resource-group $RESOURCE_GROUP --name $BOT_NAME + +# Delete the app registration +az ad app delete --id $APP_ID +``` + +### List Existing Bots + +```bash +az bot list --resource-group $RESOURCE_GROUP -o table +``` + +## Extending the Bot + +### Adding Function Calling / Tools + +To add tool calling capabilities: + +```typescript +import { ChatPrompt } from '@microsoft/teams.ai'; + +const prompt = new ChatPrompt({ + model: new OpenAIChatModel({ model: 'gpt-4o' }), + tools: [ + { + name: 'get_weather', + description: 'Get weather for a location', + parameters: { + type: 'object', + properties: { + location: { type: 'string' } + } + }, + handler: async ({ location }) => { + return { temperature: 72, conditions: 'sunny' }; + } + } + ] +}); +``` + +### Adding Adaptive Cards + +```typescript +import { Card } from '@microsoft/teams.cards'; + +const card = new Card() + .addTextBlock('Hello!') + .addAction('Submit', { type: 'Action.Submit' }); + +await activity.reply(card); +``` + +### Adding Authentication + +```typescript +const app = new App({ + auth: { + connectionName: 'your-oauth-connection', + } +}); + +app.on('message', async ({ auth, activity }) => { + const token = await auth.getToken(); + // Use token for Graph API calls +}); +``` + +## Common Tasks for AI Agents + +### Task: Add a New Message Handler + +1. Open `src/index.ts` +2. Add new `app.on()` handler after existing handlers +3. Implement handler logic +4. Run `npm run build` to verify compilation + +### Task: Modify AI Model Configuration + +1. Locate `OpenAIChatModel` instantiation in `src/index.ts` +2. Adjust model parameters (model name, temperature, etc.) +3. Test changes with `npm run dev` + +### Task: Add New Environment Variables + +1. Add variable to `.env` file +2. Reference via `process.env.VARIABLE_NAME` +3. Document in this file under Environment Variables section + +### Task: Update Teams Manifest + +1. Edit `appPackage/manifest.json` +2. Ensure schema version compatibility (currently 1.20) +3. Repackage for sideloading + +## Troubleshooting + +### Build Errors + +Run `npm run build` to catch TypeScript errors at compile time. The SDK is fully typed to help catch issues early. + +### Bot Not Responding in Teams (Most Common Issues) + +**1. Missing Service Principal (AADSTS7000229)** + +If the bot receives messages but never responds, check for this error in logs: +``` +AADSTS7000229: The client application is missing service principal in the tenant +``` + +**Fix**: Create the service principal: +```bash +az ad sp create --id +``` + +**2. Wrong Environment Variable Names** + +The Teams SDK expects specific environment variable names. Using `MicrosoftAppId`/`MicrosoftAppPassword` instead of `CLIENT_ID`/`CLIENT_SECRET` will cause silent auth failures with `Bearer null` in outgoing requests. + +**Fix**: Use these exact names in your `.env` file: +- `CLIENT_ID` (not `appId` or `MicrosoftAppId`) +- `CLIENT_SECRET` (not `appPassword` or `MicrosoftAppPassword`) +- `TENANT_ID` (not `appTenantId` or `MicrosoftAppTenantId`) + +**3. Tunnel Not Connected** + +If using dev tunnels, ensure the tunnel is running and the bot server was started first. + +**Fix**: Start in this order: +```bash +# Terminal 1: Start bot first +npm run dev + +# Terminal 2: Then start tunnel +devtunnel host +``` + +**4. Tenant Mismatch** + +SingleTenant bots only work in the tenant they're registered in. If you register in tenant A but try to use Teams in tenant B, it will fail silently. + +**Fix**: Ensure you're using Teams with the same account/tenant where the bot is registered. + +### Bot Name Already Taken + +Azure bot names are globally unique. If `az bot create` fails with "name not available": + +**Fix**: Add a unique suffix: +```bash +BOT_NAME="my-agent-bot-$(date +%s | tail -c 6)" +``` + +### 401 Unauthorized When Bot Responds + +Check the bot logs for `Authorization: 'Bearer null'`. This means credentials aren't being found. + +**Fix**: Verify the service principal exists and environment variables are correctly named (`CLIENT_ID`, `CLIENT_SECRET`, `TENANT_ID`). + +### Streaming Not Working + +Ensure you're using the `stream.emit()` pattern within `onChunk` callback. + +### Debugging Tips + +1. **Check bot logs**: Look for errors after sending a message in Teams +2. **Test with DirectLine**: Use Azure portal's "Test in Web Chat" to isolate Teams-specific issues +3. **Verify tunnel**: `curl https://your-tunnel-url/api/messages` should return 401 (not connection error) +4. **Check Azure config**: `az bot show --resource-group RG --name BOT -o json | grep endpoint` + +## Quick Start After Provisioning + +After completing Azure Bot registration and configuration, start everything up so the user can immediately test in Teams. + +### Start the Bot and Tunnel + +Run both commands in the background: + +```bash +# Start the bot server (background) +npm run dev & + +# Start the dev tunnel (background) +devtunnel host & +``` + +Or if using Claude Code, start both as background tasks and verify they're running by checking: +- Bot: Should show "listening on port 3978" +- Tunnel: Should show "Ready to accept connections" with the tunnel URL + +### Verify the Tunnel URL Matches Azure Configuration + +**Important**: The dev tunnel URL may differ from what was initially configured. After starting the tunnel, verify the actual URL matches: + +1. Check the tunnel output for the actual URL (e.g., `https://abc123-3978.usw2.devtunnels.ms`) +2. If different from what's in Azure, update the bot endpoint: + ```bash + az bot update \ + --resource-group $RESOURCE_GROUP \ + --name $BOT_NAME \ + --endpoint "https:///api/messages" + ``` +3. Update `appPackage/manifest.json` with the correct `BOT_DOMAIN` +4. Recreate the app package: `cd appPackage && zip -r ../my-agent.zip manifest.json color.png outline.png` + +### Tell the User How to Test + +Once everything is running, provide the user with these instructions: + +--- + +**Your bot is running and ready to test!** + +**To use in Microsoft Teams:** + +1. Open Microsoft Teams (desktop or web at https://teams.microsoft.com) +2. Click **Apps** in the left sidebar +3. Click **Manage your apps** -> **Upload an app** -> **Upload a custom app** +4. Select the `my-ai-agent.zip` file from your project folder +5. Click **Add** to install the bot +6. Find your bot in Apps and start chatting! + +**Useful links:** +- Devtools: http://localhost:3979/devtools (for debugging) +- Tunnel inspector: Check tunnel output for inspect URL + +--- + +## Resources + +- [Teams SDK Documentation](https://microsoft.github.io/teams-sdk/) +- [Teams SDK TypeScript Reference](https://microsoft.github.io/teams-sdk/llms_docs/llms_typescript.txt) +- [OpenAI API Documentation](https://platform.openai.com/docs) diff --git a/README.md b/README.md index 7dbb7ff13..1a17ef822 100644 --- a/README.md +++ b/README.md @@ -102,8 +102,10 @@ $: npm run test - [`@examples/botbuilder`](./examples/botbuilder/README.md) - [`@examples/graph`](./examples/graph/README.md) - [`@examples/lights`](./examples/lights/README.md) +- [`@examples/reactions`](./examples/reactions/README.md) - [`@examples/tab`](./examples/tab/README.md) - [`@examples/mcp`](./examples/mcp/README.md) +- [`@examples/meetings`](./examples/meetings/README.md) ## Links diff --git a/RELEASE.md b/RELEASE.md index b55340739..dbd91ce71 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,53 +1,100 @@ # Release Process -1. Pull latest changes -1. Run linter -1. install/build -1. run tests. -1. Install cli: cd into cli folder then `npm i -g` -1. Test the cli, run an app. +This project uses [Nerdbank.GitVersioning](https://github.com/dotnet/Nerdbank.GitVersioning) for automatic version management. -## Create Changeset +## How Versioning Works -```bash -npx changeset add -``` +- Versions are computed automatically from git history based on `version.json` +- **Main branch**: `2.0.6-preview.1`, `2.0.6-preview.2`, etc. (prerelease, published with `next` npm tag) +- **Release branch**: `2.0.6`, `2.0.7`, etc. (stable, published with `latest` npm tag) -1. ONLY select all the packages that start with @microsoft/teams.\*. NOT the test packages. +## Publishing -## Apply Changeset +The [publish pipeline](https://dev.azure.com/DomoreexpGithub/Github_Pipelines/_build?definitionId=46&_a=summary) (`.azdo/publish.yml`) is manually triggered and requires selecting a **Publish Type**: `Internal` or `Public`. -```bash -npx changeset version -``` +1. Go to **Pipelines** > **teams.ts** in ADO +2. Click **Run pipeline** +3. Select the branch to build from +4. Choose a **Publish Type**: + - **Internal** — publishes unsigned packages to the Azure Artifacts `TeamsSDKPreviews` npm feed. No approval required. Packages are available immediately. + - **Public** — signs and publishes packages to npm via ESRP. Requires approval via the ADO pipeline environment. +5. Pipeline runs: Build > Test > Stamp versions > Pack > Publish -1. Update root `package.json` manually -1. Run `npm i` again - `package-lock.json` updates -1. Run `npm run build` to ensure everything is built correctly +The pipeline packs all non-private packages from `packages/` and `external/` directories. Packages with `"private": true` in their `package.json` are skipped. -## Publish Changeset +## Approvers -```bash -npx changeset publish -``` +The ADO pipeline environment controls who can approve public releases. To modify approvers: -## Push Tags +1. Go to **Pipelines** > **Environments** in ADO +2. Select the publish environment `teams-sdk-publish` +3. Click the **three dots** menu > **Approvals and checks** +4. Add/remove approvers as needed -```bash -git push --tags -``` +## Creating a Release -## Generate a Release Note +1. **Create a PR from `main` to `release`**: + - Go to GitHub → Pull requests → New pull request + - Base: `release`, Compare: `main` + - Get teammate approval and merge -1. Go to https://github.com/microsoft/teams.ts/releases/new -2. Use the latest tag as the version (the one you just released) -3. Hit "Generate Release Notes" -4. Copy the generated release notes in the [.changeset folder](./.changeset), and paste them at the top of the generated release notes in the GitHub release page. -5. Hit "Publish Release" + > **Note:** The `release` branch must be created before the first stable release. The `publicReleaseRefSpec` in `version.json` is configured to produce stable versions (without the `-preview` suffix) only on the `release` branch. -## Commit and Push Changes +2. **Trigger the release pipeline** with **Public** publish type -1. Create a new branch for the changes (`git checkout -b release/`) -1. Commit all changes (`git add . && git commit -m "Release "`) -1. Push the branch (`git push origin release/`) -1. Create a pull request to the `main` branch +3. **Bump the version on main** for the next release cycle: + - Edit `version.json` on main + - Change `"version": "2.0.6-preview.{height}"` to `"version": "2.0.7-preview.{height}"` + - Commit and push (or PR) + +## Hotfixes + +To fix a bug in a released version without including new preview changes: + +1. **Consider if a normal release would work instead** - merging main to release includes all updates and is simpler. Only use a hotfix if you need to exclude preview changes from main. + +2. **Create a branch from `release`**: + ```bash + git checkout release + git checkout -b hotfix/fix-description + ``` + +3. **Make your fix and commit** + +4. **Create a PR to `release`**, get approval, and merge + +5. **Trigger the release pipeline** + +6. **Cherry-pick the fix back to main**: + ```bash + git checkout main + git cherry-pick + git push origin main + ``` + +## Experimental Features + +To publish experimental versions from a feature branch: + +1. **Create your feature branch** from main + +2. **Edit `version.json`** on the feature branch: + ```json + { + "version": "2.0.6-myfeature.{height}" + } + ``` + +3. **Commits produce**: `2.0.6-myfeature.1`, `2.0.6-myfeature.2`, etc. + +4. **Publish** from the feature branch using the release pipeline + +5. **When ready**, merge to main (main's `version.json` takes over) + +## Bumping Major/Minor Version + +To bump from `2.0.x` to `2.1.x` or `3.0.x`: + +1. Edit `version.json` on main branch +2. Change `"version": "2.0.6-preview.{height}"` to `"version": "2.1.0-preview.{height}"` (or `3.0.0-preview.{height}`) +3. Commit and push diff --git a/examples/a2a/eslint.config.js b/examples/a2a/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/examples/a2a/eslint.config.js +++ b/examples/a2a/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/a2a/package.json b/examples/a2a/package.json index 7fe16e45b..d30d88966 100644 --- a/examples/a2a/package.json +++ b/examples/a2a/package.json @@ -20,12 +20,11 @@ }, "dependencies": { "@a2a-js/sdk": "^0.3.4", - "@microsoft/teams.a2a": "2.0.5", - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.openai": "2.0.5" + "@microsoft/teams.a2a": "*", + "@microsoft/teams.ai": "*", + "@microsoft/teams.apps": "*", + "@microsoft/teams.dev": "*", + "@microsoft/teams.openai": "*" }, "devDependencies": { "rimraf": "^6.0.1", diff --git a/examples/ai/eslint.config.js b/examples/ai/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/examples/ai/eslint.config.js +++ b/examples/ai/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/ai/package.json b/examples/ai/package.json index 6972fc488..2b74f1f23 100644 --- a/examples/ai/package.json +++ b/examples/ai/package.json @@ -21,11 +21,11 @@ "dev:teamsfx:launch-testtool": "npx env-cmd --silent -f env/.env.testtool teamsapptester start" }, "dependencies": { - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.openai": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.cards": "2.0.5", + "@microsoft/teams.apps": "*", + "@microsoft/teams.ai": "*", + "@microsoft/teams.common": "*", + "@microsoft/teams.openai": "*", + "@microsoft/teams.dev": "*", "fuse.js": "^7.1.0" }, "devDependencies": { diff --git a/examples/ai/src/commands.ts b/examples/ai/src/commands.ts index 3f53a4e92..2dc545a07 100644 --- a/examples/ai/src/commands.ts +++ b/examples/ai/src/commands.ts @@ -1,8 +1,8 @@ import { ActivityLike, IMessageActivity, SentActivity } from '@microsoft/teams.api'; -import { OpenAIChatModel } from '@microsoft/teams.openai'; +import { ILogger } from '@microsoft/teams.common'; -import { ILogger } from '../../../packages/common/dist/logging/logger'; +import { OpenAIChatModel } from '@microsoft/teams.openai'; import { handleFeedbackLoop } from './feedback'; import { handleDocumentationSearch } from './simple-rag'; diff --git a/examples/ai/src/simple-rag.ts b/examples/ai/src/simple-rag.ts index b4ce144e6..5d1d5778b 100644 --- a/examples/ai/src/simple-rag.ts +++ b/examples/ai/src/simple-rag.ts @@ -3,7 +3,7 @@ import Fuse from 'fuse.js'; import { ChatPrompt, IChatModel } from '@microsoft/teams.ai'; import { ActivityLike, IMessageActivity, MessageActivity } from '@microsoft/teams.api'; -import { ILogger } from '../../../packages/common/dist/logging/logger'; +import { ILogger } from '@microsoft/teams.common'; interface IDocumentationItem { id: string; diff --git a/examples/ai/src/stateful-prompts.ts b/examples/ai/src/stateful-prompts.ts index 8b63ded35..b25e09aa7 100644 --- a/examples/ai/src/stateful-prompts.ts +++ b/examples/ai/src/stateful-prompts.ts @@ -1,7 +1,7 @@ import { ChatPrompt, IChatModel, Message } from '@microsoft/teams.ai'; import { ActivityLike, IMessageActivity, MessageActivity } from '@microsoft/teams.api'; -import { ILogger } from '../../../packages/common/dist/logging/logger'; +import { ILogger } from '@microsoft/teams.common'; // Simple in-memory store for conversation histories // In your application, it may be a good idea to use a more diff --git a/examples/ai/src/tool-calling.ts b/examples/ai/src/tool-calling.ts index 352d10aec..335c45062 100644 --- a/examples/ai/src/tool-calling.ts +++ b/examples/ai/src/tool-calling.ts @@ -1,7 +1,7 @@ import { ChatPrompt, IChatModel } from '@microsoft/teams.ai'; import { ActivityLike, IMessageActivity, SentActivity } from '@microsoft/teams.api'; -import { ILogger } from '../../../packages/common/dist/logging/logger'; +import { ILogger } from '@microsoft/teams.common'; interface IPokemonSearch { pokemonName: string; diff --git a/examples/botbuilder/eslint.config.js b/examples/botbuilder/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/examples/botbuilder/eslint.config.js +++ b/examples/botbuilder/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/botbuilder/package.json b/examples/botbuilder/package.json index 9e7745f31..f606a3f94 100644 --- a/examples/botbuilder/package.json +++ b/examples/botbuilder/package.json @@ -18,17 +18,13 @@ "dev": "tsx watch -r dotenv/config src/index.ts" }, "dependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.botbuilder": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.graph": "2.0.5", + "@microsoft/teams.apps": "*", + "@microsoft/teams.botbuilder": "*", + "@microsoft/teams.dev": "*", "botbuilder": "4.23.1" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/node": "^22.0.2", "dotenv": "^16.4.5", "rimraf": "^6.0.1", diff --git a/examples/cards/eslint.config.js b/examples/cards/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/examples/cards/eslint.config.js +++ b/examples/cards/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/cards/package.json b/examples/cards/package.json index 11492a184..97257e8a7 100644 --- a/examples/cards/package.json +++ b/examples/cards/package.json @@ -21,10 +21,9 @@ "dev:teamsfx:launch-testtool": "npx env-cmd --silent -f env/.env.testtool teamsapptester start" }, "dependencies": { - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.cards": "2.0.5" + "@microsoft/teams.apps": "*", + "@microsoft/teams.dev": "*", + "@microsoft/teams.cards": "*" }, "devDependencies": { "rimraf": "^6.0.1", diff --git a/examples/dialogs/eslint.config.js b/examples/dialogs/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/examples/dialogs/eslint.config.js +++ b/examples/dialogs/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/dialogs/package.json b/examples/dialogs/package.json index c0b18119d..2cf57c237 100644 --- a/examples/dialogs/package.json +++ b/examples/dialogs/package.json @@ -21,10 +21,9 @@ "dev:teamsfx:launch-testtool": "npx env-cmd --silent -f env/.env.testtool teamsapptester start" }, "dependencies": { - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.dev": "2.0.5" + "@microsoft/teams.apps": "*", + "@microsoft/teams.cards": "*", + "@microsoft/teams.dev": "*" }, "devDependencies": { "rimraf": "^6.0.1", diff --git a/examples/echo/eslint.config.js b/examples/echo/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/examples/echo/eslint.config.js +++ b/examples/echo/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/echo/package.json b/examples/echo/package.json index eddf0bde2..595ffa60b 100644 --- a/examples/echo/package.json +++ b/examples/echo/package.json @@ -21,15 +21,11 @@ "dev:teamsfx:launch-testtool": "npx env-cmd --silent -f env/.env.testtool teamsapptester start" }, "dependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.graph": "2.0.5" + "@microsoft/teams.apps": "*", + "@microsoft/teams.dev": "*" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/node": "^22.5.4", "dotenv": "^16.4.5", "rimraf": "^6.0.1", diff --git a/examples/graph/eslint.config.js b/examples/graph/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/examples/graph/eslint.config.js +++ b/examples/graph/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/graph/package.json b/examples/graph/package.json index a8d38a6fc..469ce2e18 100644 --- a/examples/graph/package.json +++ b/examples/graph/package.json @@ -21,16 +21,11 @@ "dev:teamsfx:launch-testtool": "npx env-cmd --silent -f env/.env.testtool teamsapptester start" }, "dependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.graph": "2.0.5", - "@microsoft/teams.graph-endpoints": "2.0.5" + "@microsoft/teams.apps": "*", + "@microsoft/teams.graph-endpoints": "*" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/node": "^22.5.4", "dotenv": "^16.4.5", "rimraf": "^6.0.1", diff --git a/examples/graph/src/index.ts b/examples/graph/src/index.ts index 5588c2fab..50a4c1b45 100644 --- a/examples/graph/src/index.ts +++ b/examples/graph/src/index.ts @@ -10,6 +10,8 @@ const app = new App({ */ defaultConnectionName: 'graph' }, + // Instead of setting in ConsoleLogger like below, you can also + // set LOG_LEVEL=debug or LOG_LEVEL=trace env var for verbose SDK logging logger: new ConsoleLogger('@tests/auth', { level: 'debug' }), // This is an example of overriding the token URL for a specific region (e.g., Europe). // Uncomment this block if needed. @@ -43,4 +45,10 @@ app.event('signin', async ({ send, userGraph, token }) => { await send(`user "${me.displayName}" signed in. Here's the token: ${JSON.stringify(token)}`); }); +app.on('signin.failure', async ({ activity, log, send }) => { + const { code, message } = activity.value; + log.error(`sign-in failed: ${code} - ${message}`); + await send('Sign-in failed.'); +}); + app.start().catch(console.error); diff --git a/examples/http-adapters/.env.example b/examples/http-adapters/.env.example new file mode 100644 index 000000000..6827f2ff6 --- /dev/null +++ b/examples/http-adapters/.env.example @@ -0,0 +1,3 @@ +PORT=3978 +CLIENT_ID=your-client-id +CLIENT_SECRET=your-client-secret diff --git a/examples/http-adapters/README.md b/examples/http-adapters/README.md new file mode 100644 index 000000000..d15f5c330 --- /dev/null +++ b/examples/http-adapters/README.md @@ -0,0 +1,27 @@ +# HTTP Adapter Examples + +This example shows how to integrate teams.ts with different HTTP frameworks using custom adapters. + +## What's an Adapter? + +An adapter bridges your HTTP framework with teams.ts. You create your server, pass it to the adapter, and teams.ts adds the `/api/messages` bot endpoint to your existing app. + +## Examples + +- **[express/](./express/)** - Hook your own Express server with the built-in Express adapter +- **[hono/](./hono/)** - Build a custom adapter and manage the lifecycle yourself +- **[fastify/](./fastify/)** - Build a custom adapter and let App manage its lifecycle + +## Running + +```bash +npm install +cp .env.example .env + +# Run an example +npm run dev:express +npm run dev:hono +npm run dev:fastify +``` + +All examples start on `http://localhost:3978` with `/api/messages` as the bot endpoint. diff --git a/examples/http-adapters/express/index.ts b/examples/http-adapters/express/index.ts new file mode 100644 index 000000000..6566671e4 --- /dev/null +++ b/examples/http-adapters/express/index.ts @@ -0,0 +1,30 @@ +import 'dotenv/config'; +import { app, httpServer } from './teams-app'; + +const port = parseInt(process.env.PORT || '3978', 10); + +async function main() { + console.log('Starting Express server with Teams bot integration...\n'); + + // Initialize teams.ts app - this adds /api/messages to your Express app + await app.initialize(); + + // Start your Express server + await new Promise((resolve, reject) => { + httpServer.listen(port, () => resolve()); + httpServer.once('error', reject); + }); + + console.log(`✓ Server ready on http://localhost:${port}`); + console.log(`\nYour Express routes:`); + console.log(` GET / - Homepage`); + console.log(` GET /health - Health check`); + console.log(` GET /api/users - Users API`); + console.log(` POST /api/messages - Teams bot endpoint (added by teams.ts)`); + console.log(`\nOpen http://localhost:${port} in your browser!`); +} + +main().catch((err) => { + console.error('Failed to start:', err); + process.exit(1); +}); diff --git a/examples/http-adapters/express/teams-app.ts b/examples/http-adapters/express/teams-app.ts new file mode 100644 index 000000000..d12df6277 --- /dev/null +++ b/examples/http-adapters/express/teams-app.ts @@ -0,0 +1,50 @@ +import http from 'http'; +import express from 'express'; +import { App, ExpressAdapter } from '@microsoft/teams.apps'; + +// 1. Create your existing Express app with routes +export const expressApp = express(); +export const httpServer = http.createServer(expressApp); + +// Add your custom routes +expressApp.get('/health', (_req, res) => { + res.json({ status: 'healthy', timestamp: new Date().toISOString() }); +}); + +expressApp.get('/api/users', (_req, res) => { + res.json({ + users: [ + { id: 1, name: 'Alice' }, + { id: 2, name: 'Bob' } + ] + }); +}); + +expressApp.get('/', (_req, res) => { + res.send(` + + +

Express + teams.ts

+

Your Express server is running with a Teams bot!

+ + + + `); +}); + +// 2. Create Express adapter with your existing server +export const adapter = new ExpressAdapter(httpServer); + +// 3. Create teams.ts app with the adapter +export const app = new App({ + httpServerAdapter: adapter +}); + +// 4. Handle incoming messages +app.on('message', async ({ send, activity }) => { + await send(`Echo from Express server: ${activity.text}`); +}); diff --git a/examples/http-adapters/hono/hono-adapter.ts b/examples/http-adapters/hono/hono-adapter.ts new file mode 100644 index 000000000..56c5023da --- /dev/null +++ b/examples/http-adapters/hono/hono-adapter.ts @@ -0,0 +1,59 @@ +import { Hono, Context } from 'hono'; +import type { StatusCode } from 'hono/utils/http-status'; +import { HttpMethod, IHttpServerAdapter, HttpRouteHandler } from '@microsoft/teams.apps'; + +/** + * Hono adapter for HttpServer + * + * Wraps an existing Hono app to add Teams bot routes. + * Server lifecycle (start/stop) is managed by the user externally. + * + * Usage: + * const hono = new Hono(); + * const app = new App({ httpServerAdapter: new HonoAdapter(hono) }); + * await app.initialize(); + * // Start your Hono server separately with serve() or @hono/node-server + */ +export class HonoAdapter implements IHttpServerAdapter { + protected hono: Hono; + + /** + * Create adapter with your existing Hono app + * @param hono Your Hono app with your custom routes + */ + constructor(hono: Hono) { + this.hono = hono; + } + + /** + * Register a route handler for a given HTTP method and path + */ + registerRoute(method: HttpMethod, path: string, handler: HttpRouteHandler): void { + const m = method.toLowerCase() as Lowercase; + this.hono[m](path, async (c: Context) => { + const body = await c.req.json().catch(() => ({})); + const headers = Object.fromEntries(c.req.raw.headers.entries()); + const response = await handler({ body, headers }); + return c.json(response.body as object, response.status as StatusCode); + }); + } + + /** + * Serve static files from a directory + * Note: For production, consider using Hono's built-in static middleware + * or a CDN for better performance + */ + serveStatic(path: string, directory: string): void { + // Hono's static file serving + this.hono.get(`${path}/*`, async (c) => { + const filePath = c.req.path.replace(path, directory); + try { + const fs = await import('fs/promises'); + const content = await fs.readFile(filePath); + return c.body(content); + } catch { + return c.notFound(); + } + }); + } +} diff --git a/examples/http-adapters/hono/index.ts b/examples/http-adapters/hono/index.ts new file mode 100644 index 000000000..3e3f2b955 --- /dev/null +++ b/examples/http-adapters/hono/index.ts @@ -0,0 +1,79 @@ +import 'dotenv/config'; +import { serve } from '@hono/node-server'; +import { Hono } from 'hono'; +import { App } from '@microsoft/teams.apps'; +import { HonoAdapter } from './hono-adapter'; + +const port = parseInt(process.env.PORT || '3978', 10); + +async function main() { + console.log('Starting Hono server with Teams bot integration...\n'); + + // 1. Create your Hono app with your own routes + const hono = new Hono(); + + // Add your custom routes + hono.get('/health', (c) => { + return c.json({ status: 'healthy', timestamp: new Date().toISOString() }); + }); + + hono.get('/api/users', (c) => { + return c.json({ + users: [ + { id: 1, name: 'Alice' }, + { id: 2, name: 'Bob' } + ] + }); + }); + + hono.get('/', (c) => { + return c.html(` + + +

Hono + teams.ts

+

Your Hono server is running with a Teams bot!

+ + + + `); + }); + + // 2. Create Hono adapter with your Hono app + const adapter = new HonoAdapter(hono); + + // 3. Create teams.ts app with the adapter + const app = new App({ + httpServerAdapter: adapter + }); + + // 4. Handle Teams bot messages + app.on('message', async ({ send, activity }) => { + await send(`Echo from Hono server: ${activity.text}`); + }); + + // 5. Initialize teams.ts app - this adds /api/messages to your Hono app + await app.initialize(); + + // 6. Start your Hono server directly (adapter doesn't manage lifecycle) + serve({ + fetch: hono.fetch, + port + }); + + console.log(`✓ Server ready on http://localhost:${port}`); + console.log(`\nYour Hono routes:`); + console.log(` GET / - Homepage`); + console.log(` GET /health - Health check`); + console.log(` GET /api/users - Users API`); + console.log(` POST /api/messages - Teams bot endpoint (added by teams.ts)`); + console.log(`\nOpen http://localhost:${port} in your browser!`); +} + +main().catch((err) => { + console.error('Failed to start:', err); + process.exit(1); +}); diff --git a/examples/http-adapters/package.json b/examples/http-adapters/package.json new file mode 100644 index 000000000..afba62ec0 --- /dev/null +++ b/examples/http-adapters/package.json @@ -0,0 +1,34 @@ +{ + "name": "@examples/http-adapters", + "version": "0.0.1", + "private": true, + "license": "MIT", + "scripts": { + "dev:express": "tsx watch express/index.ts", + "dev:hono": "tsx watch hono/index.ts", + "dev:restify": "tsx watch restify/index.ts", + "start:express": "NODE_ENV=production tsx express/index.ts", + "start:hono": "NODE_ENV=production tsx hono/index.ts", + "start:restify": "NODE_ENV=production tsx restify/index.ts" + }, + "dependencies": { + "@hono/node-server": "^1.19.9", + "@microsoft/teams.api": "*", + "@microsoft/teams.apps": "*", + "@microsoft/teams.common": "*", + "cors": "^2.8.5", + "express": "^5.0.0", + "hono": "^4.6.14", + "restify": "^11.1.0" + }, + "devDependencies": { + "@microsoft/teams.config": "*", + "@types/cors": "^2.8.17", + "@types/express": "^5.0.0", + "@types/node": "^22.5.4", + "@types/restify": "^8.5.12", + "dotenv": "^16.4.5", + "tsx": "^4.20.6", + "typescript": "^5.4.5" + } +} diff --git a/examples/http-adapters/restify/index.ts b/examples/http-adapters/restify/index.ts new file mode 100644 index 000000000..ff441bf8c --- /dev/null +++ b/examples/http-adapters/restify/index.ts @@ -0,0 +1,23 @@ +import 'dotenv/config'; +import { app } from './teams-app'; + +const port = parseInt(process.env.PORT || '3978', 10); + +async function main() { + console.log('Starting Restify server with Teams bot integration...\n'); + + await app.start(port); + + console.log(`✓ Server ready on http://localhost:${port}`); + console.log(`\nYour Restify routes:`); + console.log(` GET / - Homepage`); + console.log(` GET /health - Health check`); + console.log(` GET /api/users - Users API`); + console.log(` POST /api/messages - Teams bot endpoint (added by teams.ts)`); + console.log(`\nOpen http://localhost:${port} in your browser!`); +} + +main().catch((err) => { + console.error('Failed to start:', err); + process.exit(1); +}); diff --git a/examples/http-adapters/restify/restify-adapter.ts b/examples/http-adapters/restify/restify-adapter.ts new file mode 100644 index 000000000..4c15094eb --- /dev/null +++ b/examples/http-adapters/restify/restify-adapter.ts @@ -0,0 +1,65 @@ +import restify from 'restify'; +import { HttpMethod, IHttpServerAdapter, HttpRouteHandler } from '@microsoft/teams.apps'; + +/** + * Restify adapter for HttpServer + * + * Restify was the default HTTP server used by the Bot Framework JS SDK. + * This adapter shows how to use it with teams.ts. + * + * Usage: + * const adapter = new RestifyAdapter(); + * const app = new App({ httpServerAdapter: adapter }); + * await app.start(3978); + */ +export class RestifyAdapter implements IHttpServerAdapter { + protected server: restify.Server; + + constructor(server?: restify.Server) { + this.server = server || restify.createServer(); + this.server.use(restify.plugins.bodyParser()); + } + + /** + * Get the Restify server instance for adding custom routes/plugins + */ + get instance(): restify.Server { + return this.server; + } + + /** + * Register a route handler for a given HTTP method and path + */ + registerRoute(method: HttpMethod, path: string, handler: HttpRouteHandler): void { + const m = method.toLowerCase() as Lowercase; + this.server[m](path, async (req: restify.Request, res: restify.Response) => { + try { + const response = await handler({ + body: req.body, + headers: req.headers as Record + }); + res.send(response.status, response.body); + } catch (err) { + res.send(500, { error: 'Internal server error' }); + } + }); + } + + /** + * Start the server + */ + async start(port: number): Promise { + return new Promise((resolve) => { + this.server.listen(port, () => resolve()); + }); + } + + /** + * Stop the server + */ + async stop(): Promise { + return new Promise((resolve) => { + this.server.close(() => resolve()); + }); + } +} diff --git a/examples/http-adapters/restify/teams-app.ts b/examples/http-adapters/restify/teams-app.ts new file mode 100644 index 000000000..c03594e97 --- /dev/null +++ b/examples/http-adapters/restify/teams-app.ts @@ -0,0 +1,51 @@ +import { App } from '@microsoft/teams.apps'; +import { RestifyAdapter } from './restify-adapter'; + +// 1. Create Restify adapter +export const adapter = new RestifyAdapter(); + +// Get the Restify server instance to add custom routes +const server = adapter.instance; + +// 2. Add your custom routes +server.get('/health', (_req, res, next) => { + res.send(200, { status: 'healthy', timestamp: new Date().toISOString() }); + next(); +}); + +server.get('/api/users', (_req, res, next) => { + res.send(200, { + users: [ + { id: 1, name: 'Alice' }, + { id: 2, name: 'Bob' } + ] + }); + next(); +}); + +server.get('/', (_req, res, next) => { + res.sendRaw(200, ` + + +

Restify + teams.ts

+

Your Restify server is running with a Teams bot!

+ + + + `, { 'Content-Type': 'text/html' }); + next(); +}); + +// 3. Create teams.ts app with the adapter +export const app = new App({ + httpServerAdapter: adapter, +}); + +// 4. Handle incoming messages +app.on('message', async ({ send, activity }) => { + await send(`Echo from Restify server: ${activity.text}`); +}); diff --git a/examples/http-adapters/tsconfig.json b/examples/http-adapters/tsconfig.json new file mode 100644 index 000000000..a9a21fdc9 --- /dev/null +++ b/examples/http-adapters/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@microsoft/teams.config/tsconfig.node.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": ".", + "jsx": "preserve", + "lib": ["ES2022", "DOM", "DOM.Iterable"] + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules", "dist", ".next"] +} diff --git a/examples/lights/eslint.config.js b/examples/lights/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/examples/lights/eslint.config.js +++ b/examples/lights/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/lights/package.json b/examples/lights/package.json index 124ffae45..d1607ff2e 100644 --- a/examples/lights/package.json +++ b/examples/lights/package.json @@ -18,17 +18,13 @@ "dev": "tsx watch -r dotenv/config src/index.ts" }, "dependencies": { - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.graph": "2.0.5", - "@microsoft/teams.openai": "2.0.5" + "@microsoft/teams.ai": "*", + "@microsoft/teams.apps": "*", + "@microsoft/teams.dev": "*", + "@microsoft/teams.openai": "*" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/node": "^22.5.4", "dotenv": "^16.4.5", "rimraf": "^6.0.1", diff --git a/examples/mcp/eslint.config.js b/examples/mcp/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/examples/mcp/eslint.config.js +++ b/examples/mcp/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/mcp/package.json b/examples/mcp/package.json index 9b986c9f2..db34c42c3 100644 --- a/examples/mcp/package.json +++ b/examples/mcp/package.json @@ -22,19 +22,14 @@ "dev:teamsfx:launch-testtool": "npx env-cmd --silent -f env/.env.testtool teamsapptester start" }, "dependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.graph": "2.0.5", - "@microsoft/teams.mcp": "2.0.5", - "@microsoft/teams.openai": "2.0.5", - "@modelcontextprotocol/sdk": "^1.9.0", + "@microsoft/teams.apps": "*", + "@microsoft/teams.dev": "*", + "@microsoft/teams.mcp": "*", + "@modelcontextprotocol/sdk": "^1.25.2", "zod": "^3.24.3" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@modelcontextprotocol/inspector": "^0.16.5", "@types/node": "^22.5.4", "cross-env": "^7.0.3", diff --git a/examples/mcpclient/eslint.config.js b/examples/mcpclient/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/examples/mcpclient/eslint.config.js +++ b/examples/mcpclient/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/mcpclient/package.json b/examples/mcpclient/package.json index 8420ec7d3..de2a856d4 100644 --- a/examples/mcpclient/package.json +++ b/examples/mcpclient/package.json @@ -18,12 +18,12 @@ "dev": "tsx watch -r dotenv/config src/index.ts" }, "dependencies": { - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.mcpclient": "2.0.5", - "@microsoft/teams.openai": "2.0.5", - "@modelcontextprotocol/sdk": "^1.13.0" + "@microsoft/teams.ai": "*", + "@microsoft/teams.apps": "*", + "@microsoft/teams.dev": "*", + "@microsoft/teams.mcpclient": "*", + "@microsoft/teams.openai": "*", + "@modelcontextprotocol/sdk": "^1.25.2" }, "devDependencies": { "@types/node": "^22.5.4", diff --git a/examples/mcpclient/src/index.ts b/examples/mcpclient/src/index.ts index c01cf53ae..b5c687448 100644 --- a/examples/mcpclient/src/index.ts +++ b/examples/mcpclient/src/index.ts @@ -16,8 +16,10 @@ const prompt = new ChatPrompt( instructions: 'You are a helpful assistant. You MUST use tool calls to do all your work.', model: new OpenAIChatModel({ - model: 'gpt-4o-mini', - apiKey: process.env.OPENAI_API_KEY, + apiKey: process.env.AZURE_OPENAI_API_KEY || process.env.OPENAI_API_KEY, + endpoint: process.env.AZURE_OPENAI_ENDPOINT, + apiVersion: process.env.AZURE_OPENAI_API_VERSION, + model: process.env.AZURE_OPENAI_MODEL_DEPLOYMENT_NAME!, }), logger }, diff --git a/examples/meetings/.gitignore b/examples/meetings/.gitignore new file mode 100644 index 000000000..8fb6e4ae2 --- /dev/null +++ b/examples/meetings/.gitignore @@ -0,0 +1,5 @@ +teams*.yml +env/ +infra/ +node_modules/ +.vscode/ \ No newline at end of file diff --git a/examples/meetings/CHANGELOG.md b/examples/meetings/CHANGELOG.md new file mode 100644 index 000000000..5b6a63e7b --- /dev/null +++ b/examples/meetings/CHANGELOG.md @@ -0,0 +1,241 @@ +# @examples/meetings + +## 0.0.6 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.5 + - @microsoft/teams.apps@2.0.5 + - @microsoft/teams.cards@2.0.5 + - @microsoft/teams.common@2.0.5 + - @microsoft/teams.dev@2.0.5 + - @microsoft/teams.graph@2.0.5 + +## 0.0.5 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.4 + - @microsoft/teams.apps@2.0.4 + - @microsoft/teams.cards@2.0.4 + - @microsoft/teams.common@2.0.4 + - @microsoft/teams.dev@2.0.4 + - @microsoft/teams.graph@2.0.4 + +## 0.0.4 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.3 + - @microsoft/teams.apps@2.0.3 + - @microsoft/teams.cards@2.0.3 + - @microsoft/teams.common@2.0.3 + - @microsoft/teams.dev@2.0.3 + - @microsoft/teams.graph@2.0.3 + +## 0.0.3 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.2 + - @microsoft/teams.apps@2.0.2 + - @microsoft/teams.cards@2.0.2 + - @microsoft/teams.common@2.0.2 + - @microsoft/teams.dev@2.0.2 + - @microsoft/teams.graph@2.0.2 + +## 0.0.2 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.1 + - @microsoft/teams.apps@2.0.1 + - @microsoft/teams.cards@2.0.1 + - @microsoft/teams.common@2.0.1 + - @microsoft/teams.dev@2.0.1 + - @microsoft/teams.graph@2.0.1 + +## 0.0.1 + +### Patch Changes + +- Updated dependencies [a231813] +- Updated dependencies [05085e8] +- Updated dependencies [7a0e5f6] +- Updated dependencies [1d5f350] +- Updated dependencies [9bc2cee] +- Updated dependencies [9b08518] +- Updated dependencies [00d3edb] +- Updated dependencies [ee61ca0] +- Updated dependencies [70cb729] +- Updated dependencies [2337a4f] +- Updated dependencies [e6f9b56] +- Updated dependencies [9e2414b] +- Updated dependencies [753af04] + - @microsoft/teams.api@2.0.0 + - @microsoft/teams.apps@2.0.0 + - @microsoft/teams.cards@2.0.0 + - @microsoft/teams.common@2.0.0 + - @microsoft/teams.dev@2.0.0 + - @microsoft/teams.graph@2.0.0 + +## 0.0.1-preview.12 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.0-preview.12 + - @microsoft/teams.apps@2.0.0-preview.12 + - @microsoft/teams.cards@2.0.0-preview.12 + - @microsoft/teams.common@2.0.0-preview.12 + - @microsoft/teams.dev@2.0.0-preview.12 + - @microsoft/teams.graph@2.0.0-preview.12 + +## 0.0.1-preview.11 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.0-preview.11 + - @microsoft/teams.apps@2.0.0-preview.11 + - @microsoft/teams.cards@2.0.0-preview.11 + - @microsoft/teams.common@2.0.0-preview.11 + - @microsoft/teams.dev@2.0.0-preview.11 + - @microsoft/teams.graph@2.0.0-preview.11 + +## 0.0.1-preview.10 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.0-preview.10 + - @microsoft/teams.apps@2.0.0-preview.10 + - @microsoft/teams.cards@2.0.0-preview.10 + - @microsoft/teams.common@2.0.0-preview.10 + - @microsoft/teams.dev@2.0.0-preview.10 + - @microsoft/teams.graph@2.0.0-preview.10 + +## 0.0.1-preview.9 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.0-preview.9 + - @microsoft/teams.apps@2.0.0-preview.9 + - @microsoft/teams.cards@2.0.0-preview.9 + - @microsoft/teams.common@2.0.0-preview.9 + - @microsoft/teams.dev@2.0.0-preview.9 + - @microsoft/teams.graph@2.0.0-preview.9 + +## 0.0.1-preview.8 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.0-preview.8 + - @microsoft/teams.apps@2.0.0-preview.8 + - @microsoft/teams.cards@2.0.0-preview.8 + - @microsoft/teams.common@2.0.0-preview.8 + - @microsoft/teams.dev@2.0.0-preview.8 + - @microsoft/teams.graph@2.0.0-preview.8 + +## 0.0.1-preview.7 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.0-preview.7 + - @microsoft/teams.apps@2.0.0-preview.7 + - @microsoft/teams.cards@2.0.0-preview.7 + - @microsoft/teams.common@2.0.0-preview.7 + - @microsoft/teams.dev@2.0.0-preview.7 + - @microsoft/teams.graph@2.0.0-preview.7 + +## 0.0.1-preview.6 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.0-preview.6 + - @microsoft/teams.apps@2.0.0-preview.6 + - @microsoft/teams.cards@2.0.0-preview.6 + - @microsoft/teams.common@2.0.0-preview.6 + - @microsoft/teams.dev@2.0.0-preview.6 + - @microsoft/teams.graph@2.0.0-preview.6 + +## 0.0.1-preview.5 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.apps@2.0.0-preview.5 + - @microsoft/teams.api@2.0.0-preview.5 + - @microsoft/teams.cards@2.0.0-preview.5 + - @microsoft/teams.common@2.0.0-preview.5 + - @microsoft/teams.dev@2.0.0-preview.5 + - @microsoft/teams.graph@2.0.0-preview.5 + +## 0.0.1-preview.4 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.0-preview.4 + - @microsoft/teams.apps@2.0.0-preview.4 + - @microsoft/teams.cards@2.0.0-preview.4 + - @microsoft/teams.common@2.0.0-preview.4 + - @microsoft/teams.dev@2.0.0-preview.4 + - @microsoft/teams.graph@2.0.0-preview.4 + +## 0.0.1-preview.3 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.0-preview.3 + - @microsoft/teams.apps@2.0.0-preview.3 + - @microsoft/teams.cards@2.0.0-preview.3 + - @microsoft/teams.common@2.0.0-preview.3 + - @microsoft/teams.dev@2.0.0-preview.3 + - @microsoft/teams.graph@2.0.0-preview.3 + +## 0.0.1-preview.2 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.0-preview.2 + - @microsoft/teams.apps@2.0.0-preview.2 + - @microsoft/teams.cards@2.0.0-preview.2 + - @microsoft/teams.common@2.0.0-preview.2 + - @microsoft/teams.dev@2.0.0-preview.2 + - @microsoft/teams.graph@2.0.0-preview.2 + +## 0.0.1-preview.1 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.api@2.0.0-preview.1 + - @microsoft/teams.apps@2.0.0-preview.1 + - @microsoft/teams.cards@2.0.0-preview.1 + - @microsoft/teams.common@2.0.0-preview.1 + - @microsoft/teams.dev@2.0.0-preview.1 + - @microsoft/teams.graph@2.0.0-preview.1 + +## 0.0.1-preview.0 + +### Patch Changes + +- Updated dependencies + - @microsoft/teams.common@2.0.0-preview.0 + - @microsoft/teams.cards@2.0.0-preview.0 + - @microsoft/teams.graph@2.0.0-preview.0 + - @microsoft/teams.apps@2.0.0-preview.0 + - @microsoft/teams.api@2.0.0-preview.0 + - @microsoft/teams.dev@2.0.0-preview.0 diff --git a/examples/meetings/README.md b/examples/meetings/README.md new file mode 100644 index 000000000..66bdbabcd --- /dev/null +++ b/examples/meetings/README.md @@ -0,0 +1,57 @@ +# Agent: Meetings + +This sample demonstrates how to handle real-time updates for meeting events and meeting participant events. + +## Run + +```bash +$: npm run dev +``` + +## Manifest Requirements + +There are a few requirements in the Teams app manifest (manifest.json) to support these events. + +1) The `scopes` section must include `team`, and `groupChat`: + +```csharp + "bots": [ + { + "botId": "", + "scopes": [ + "team", + "personal", + "groupChat" + ], + "isNotificationOnly": false + } + ] +``` + +2) In the authorization section, make sure to specify the following resource-specific permissions: + +```csharp + "authorization":{ + "permissions":{ + "resourceSpecific":[ + { + "name":"OnlineMeetingParticipant.Read.Chat", + "type":"Application" + }, + { + "name":"ChannelMeeting.ReadBasic.Group", + "type":"Application" + }, + { + "name":"OnlineMeeting.ReadBasic.Chat", + "type":"Application" + } + ] + } + } +``` + +### Teams Developer Portal: Bot Configuration + +For your Bot, make sure the [Meeting Event Subscriptions](https://learn.microsoft.com/en-us/microsoftteams/platform/apps-in-teams-meetings/meeting-apps-apis?branch=pr-en-us-8455&tabs=channel-meeting%2Cguest-user%2Cone-on-one-call%2Cdotnet3%2Cdotnet2%2Cdotnet%2Cparticipant-join-event%2Cparticipant-join-event1#receive-meeting-participant-events) are checked. +This enables you to receive the Meeting Participant events. \ No newline at end of file diff --git a/examples/meetings/appPackage/color.png b/examples/meetings/appPackage/color.png new file mode 100644 index 000000000..e5bd0a650 Binary files /dev/null and b/examples/meetings/appPackage/color.png differ diff --git a/examples/meetings/appPackage/manifest.json b/examples/meetings/appPackage/manifest.json new file mode 100644 index 000000000..f64a68ee3 --- /dev/null +++ b/examples/meetings/appPackage/manifest.json @@ -0,0 +1,69 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.20/MicrosoftTeams.schema.json", + "version": "1.0.0", + "manifestVersion": "1.20", + "id": "${{TEAMS_APP_ID}}", + "name": { + "short": "meetings-tester", + "full": "Meetings tester agent" + }, + "developer": { + "name": "Microsoft", + "mpnId": "", + "websiteUrl": "https://microsoft.com", + "privacyUrl": "https://privacy.microsoft.com/privacystatement", + "termsOfUseUrl": "https://www.microsoft.com/legal/terms-of-use" + }, + "description": { + "short": "Sample bot that showcases various meeting events", + "full": "Sample bot that showcases meeting events and meeting participant events" + }, + "icons": { + "outline": "outline.png", + "color": "color.png" + }, + "accentColor": "#FFFFFF", + "staticTabs": [ + { + "entityId": "conversations", + "scopes": ["personal"] + }, + { + "entityId": "about", + "scopes": ["personal"] + } + ], + "bots": [ + { + "botId": "${{BOT_ID}}", + "scopes": ["personal", "team", "groupChat"], + "isNotificationOnly": false, + "supportsCalling": true, + "supportsVideo": true, + "supportsFiles": false + } + ], + "validDomains": ["${{BOT_DOMAIN}}", "*.botframework.com"], + "webApplicationInfo": { + "id": "${{BOT_ID}}", + "resource": "api://botid-${{BOT_ID}}" + }, + "authorization":{ + "permissions":{ + "resourceSpecific":[ + { + "name":"OnlineMeetingParticipant.Read.Chat", + "type":"Application" + }, + { + "name":"ChannelMeeting.ReadBasic.Group", + "type":"Application" + }, + { + "name":"OnlineMeeting.ReadBasic.Chat", + "type":"Application" + } + ] + } + } +} diff --git a/examples/meetings/appPackage/outline.png b/examples/meetings/appPackage/outline.png new file mode 100644 index 000000000..b1ae0b88c Binary files /dev/null and b/examples/meetings/appPackage/outline.png differ diff --git a/examples/meetings/eslint.config.js b/examples/meetings/eslint.config.js new file mode 100644 index 000000000..5ccf8112f --- /dev/null +++ b/examples/meetings/eslint.config.js @@ -0,0 +1 @@ +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/meetings/package.json b/examples/meetings/package.json new file mode 100644 index 000000000..4f08888d9 --- /dev/null +++ b/examples/meetings/package.json @@ -0,0 +1,32 @@ +{ + "name": "@examples/meetings", + "version": "0.0.6", + "private": true, + "license": "MIT", + "main": "dist/index", + "types": "dist/index", + "files": [ + "dist", + "README.md" + ], + "scripts": { + "clean": "npx rimraf ./dist", + "lint": "npx eslint", + "lint:fix": "npx eslint --fix", + "build": "npx tsc", + "start": "node .", + "dev": "tsx watch -r dotenv/config src/index.ts" + }, + "dependencies": { + "@microsoft/teams.apps": "*", + "@microsoft/teams.cards": "*" + }, + "devDependencies": { + "@types/node": "^22.5.4", + "dotenv": "^16.4.5", + "rimraf": "^6.0.1", + "tsx": "^4.20.6", + "typescript": "^5.4.5", + "env-cmd": "latest" + } +} diff --git a/examples/meetings/src/index.ts b/examples/meetings/src/index.ts new file mode 100644 index 000000000..1620d2f72 --- /dev/null +++ b/examples/meetings/src/index.ts @@ -0,0 +1,74 @@ +import { App } from '@microsoft/teams.apps'; +import { AdaptiveCard, TextBlock, OpenUrlAction, ActionSet } from '@microsoft/teams.cards'; +import { ConsoleLogger } from '@microsoft/teams.common/logging'; + +const app = new App({ + logger: new ConsoleLogger('@examples/meetings', { level: 'debug' }) +}); + +app.on('message', async ({ reply, activity }) => { + await reply({ type: 'typing' }); + await reply(`you said "${activity.text}"`); +}); + +app.on('meetingStart', async ({ activity, send }) => { + const meetingData = activity.value; + const startTime = new Date(meetingData.StartTime).toLocaleString(); + + const card = new AdaptiveCard( + new TextBlock(`'${meetingData.Title}' has started at ${startTime}.`, { + wrap: true, + weight: 'Bolder' + }), + new ActionSet( + new OpenUrlAction(meetingData.JoinUrl).withTitle('Join the meeting') + ) + ); + + await send(card); +}); + +app.on('meetingEnd', async ({ activity, send }) => { + const meetingData = activity.value; + const endTime = new Date(meetingData.EndTime).toLocaleString(); + + const card = new AdaptiveCard( + new TextBlock(`'${meetingData.Title}' has ended at ${endTime}.`, { + wrap: true, + weight: 'Bolder' + }) + ); + + await send(card); +}); + +app.on('meetingParticipantJoin', async ({ activity, send }) => { + const meetingData = activity.value; + const member = meetingData.members[0].user.name; + const role = meetingData.members[0].meeting.role; + + const card = new AdaptiveCard( + new TextBlock(`${member} has joined the meeting as ${role}.`, { + wrap: true, + weight: 'Bolder' + }) + ); + + await send(card); +}); + +app.on('meetingParticipantLeave', async ({ activity, send }) => { + const meetingData = activity.value; + const member = meetingData.members[0].user.name; + + const card = new AdaptiveCard( + new TextBlock(`${member} has left the meeting.`, { + wrap: true, + weight: 'Bolder' + }) + ); + + await send(card); +}); + +app.start().catch(console.error); diff --git a/examples/meetings/tsconfig.json b/examples/meetings/tsconfig.json new file mode 100644 index 000000000..9a42fe553 --- /dev/null +++ b/examples/meetings/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@microsoft/teams.config/tsconfig.node.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src/**/*.ts"] +} diff --git a/examples/meetings/turbo.json b/examples/meetings/turbo.json new file mode 100644 index 000000000..f2351c749 --- /dev/null +++ b/examples/meetings/turbo.json @@ -0,0 +1,16 @@ +{ + "extends": ["//"], + "tasks": { + "build": { + "inputs": ["$TURBO_DEFAULT$", ".env*"], + "outputs": [".next/**", "!.next/cache/**"], + "cache": false, + "dependsOn": [ + "@microsoft/teams.api#build", + "@microsoft/teams.apps#build", + "@microsoft/teams.common#build", + "@microsoft/teams.cards#build" + ] + } + } +} diff --git a/examples/message-extensions/eslint.config.js b/examples/message-extensions/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/examples/message-extensions/eslint.config.js +++ b/examples/message-extensions/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/message-extensions/package.json b/examples/message-extensions/package.json index 03af16bee..a03d065c9 100644 --- a/examples/message-extensions/package.json +++ b/examples/message-extensions/package.json @@ -18,15 +18,12 @@ "dev": "tsx watch -r dotenv/config src/index.ts" }, "dependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.graph": "2.0.5" + "@microsoft/teams.apps": "*", + "@microsoft/teams.cards": "*", + "@microsoft/teams.dev": "*" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/node": "^22.5.4", "dotenv": "^16.4.5", "rimraf": "^6.0.1", diff --git a/examples/proactive-messaging/README.md b/examples/proactive-messaging/README.md new file mode 100644 index 000000000..54a07fb34 --- /dev/null +++ b/examples/proactive-messaging/README.md @@ -0,0 +1,77 @@ +# Proactive Messaging Example + +Send proactive messages to Teams users without running a server. + +## Key Concepts + +**Without a server:** +```typescript +await app.initialize(); +await app.send(conversationId, 'Hello!'); +``` + +**With a running server:** +```typescript +await app.start(); +// Later, anywhere in your code: +await app.send(conversationId, 'Hello!'); +``` + +> **Note**: Use `app.initialize()` only when you don't need a server. If using `app.start()`, just call `app.send()` directly. +> +> **Important**: Without a server (`app.initialize()`), you can only send messages. You cannot receive incoming messages from users. + +## Usage + +1. Set up `.env`: + ``` + BOT_ID= + BOT_PASSWORD= + ``` + +2. Run: + ```bash + npm run dev + ``` + +## Examples + +**Send text:** +```typescript +await app.send(conversationId, 'Your message'); +``` + +**Send card:** +```typescript +const card = new AdaptiveCard( + new TextBlock('Title', { size: 'Large' }) +); +await app.send(conversationId, card); +``` + +**Scheduled job (no server):** +```typescript +const app = new App(); +await app.initialize(); +await app.send(conversationId, 'Reminder!'); +``` + +**From running bot:** +```typescript +const app = new App(); +await app.start(); + +app.on('message', async ({ activity }) => { + await saveConversationId(activity.conversation.id); +}); + +// Send proactive messages anytime +await app.send(conversationId, 'Update!'); +``` + +## Notes + +- Without a server (`app.initialize()`), you can only send messages, not receive them +- Get conversation IDs from previous interactions, installation events, or Graph API +- Your bot must be installed in the conversation +- Be mindful of rate limits diff --git a/examples/proactive-messaging/eslint.config.js b/examples/proactive-messaging/eslint.config.js new file mode 100644 index 000000000..5ccf8112f --- /dev/null +++ b/examples/proactive-messaging/eslint.config.js @@ -0,0 +1 @@ +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/proactive-messaging/package.json b/examples/proactive-messaging/package.json new file mode 100644 index 000000000..8a65738fb --- /dev/null +++ b/examples/proactive-messaging/package.json @@ -0,0 +1,34 @@ +{ + "name": "@examples/proactive-messaging", + "version": "0.0.6", + "private": true, + "license": "MIT", + "main": "dist/index", + "types": "dist/index", + "files": [ + "dist", + "README.md" + ], + "scripts": { + "clean": "npx rimraf ./dist", + "lint": "npx eslint", + "lint:fix": "npx eslint --fix", + "build": "npx tsc", + "start": "node . ", + "dev": "tsx -r dotenv/config src/index.ts" + }, + "dependencies": { + "@microsoft/teams.api": "*", + "@microsoft/teams.apps": "*", + "@microsoft/teams.cards": "*", + "@microsoft/teams.common": "*" + }, + "devDependencies": { + "@microsoft/teams.config": "*", + "@types/node": "^22.5.4", + "dotenv": "^16.4.5", + "rimraf": "^6.0.1", + "tsx": "^4.20.6", + "typescript": "^5.4.5" + } +} diff --git a/examples/proactive-messaging/src/index.ts b/examples/proactive-messaging/src/index.ts new file mode 100644 index 000000000..c96e15c1c --- /dev/null +++ b/examples/proactive-messaging/src/index.ts @@ -0,0 +1,72 @@ +/** + * Proactive Messaging Example + * + * Demonstrates sending messages without running a server using app.initialize(). + * Note: If using app.start(), you can call app.send() directly without app.initialize(). + */ + +import { App } from '@microsoft/teams.apps'; +import { ActionSet, AdaptiveCard, OpenUrlAction, TextBlock } from '@microsoft/teams.cards'; +import { ConsoleLogger } from '@microsoft/teams.common/logging'; + +async function sendProactiveMessage(app: App, conversationId: string, message: string) { + console.log(`Sending proactive message to conversation: ${conversationId}`); + console.log(`Message: ${message}`); + + const result = await app.send(conversationId, message); + + console.log(`✓ Message sent successfully! Activity ID: ${result.id}`); +} + +async function sendProactiveCard(app: App, conversationId: string) { + const card = new AdaptiveCard( + new TextBlock('Proactive Notification', { size: 'Large', weight: 'Bolder' }), + new TextBlock('This message was sent proactively without a server running!', { wrap: true }), + new TextBlock('Status: Active • Priority: High • Time: Now', { wrap: true, isSubtle: true }), + new ActionSet( + new OpenUrlAction('https://aka.ms/teams-sdk', { title: 'Learn More' }) + ) + ); + + console.log(`Sending proactive card to conversation: ${conversationId}`); + + const result = await app.send(conversationId, card); + + console.log(`✓ Card sent successfully! Activity ID: ${result.id}`); +} + +async function main() { + const conversationId = process.argv[2]; + + if (!conversationId) { + console.error('Error: Missing conversation ID argument'); + console.error('Usage: npm start '); + console.error(' npm run dev '); + process.exit(1); + } + + const app = new App({ + logger: new ConsoleLogger('@examples/proactive-messaging', { level: 'info' }) + }); + + // Initialize without starting HTTP server + // Note: If using app.start(), skip this and call app.send() directly + // Without a server, you can only send messages - you cannot receive incoming messages + console.log('Initializing app (without starting server)...'); + await app.initialize(); + console.log('✓ App initialized\n'); + + await sendProactiveMessage( + app, + conversationId, + 'Hello! This is a proactive message sent without a running server 🚀' + ); + + await new Promise(resolve => setTimeout(resolve, 2000)); + + await sendProactiveCard(app, conversationId); + + console.log('\n✓ All proactive messages sent successfully!'); +} + +main().catch(console.error); diff --git a/examples/proactive-messaging/tsconfig.json b/examples/proactive-messaging/tsconfig.json new file mode 100644 index 000000000..9a42fe553 --- /dev/null +++ b/examples/proactive-messaging/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@microsoft/teams.config/tsconfig.node.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src/**/*.ts"] +} diff --git a/examples/proactive-messaging/turbo.json b/examples/proactive-messaging/turbo.json new file mode 100644 index 000000000..1cf545ebe --- /dev/null +++ b/examples/proactive-messaging/turbo.json @@ -0,0 +1,18 @@ +{ + "extends": ["//"], + "tasks": { + "build": { + "inputs": ["$TURBO_DEFAULT$", ".env*"], + "outputs": [".next/**", "!.next/cache/**"], + "cache": false, + "dependsOn": [ + "@microsoft/teams.api#build", + "@microsoft/teams.apps#build", + "@microsoft/teams.cards#build", + "@microsoft/teams.common#build", + "@microsoft/teams.dev#build", + "@microsoft/teams.graph#build" + ] + } + } +} diff --git a/examples/reactions/.gitignore b/examples/reactions/.gitignore new file mode 100644 index 000000000..b97fee95a --- /dev/null +++ b/examples/reactions/.gitignore @@ -0,0 +1,5 @@ +teams*.yml +env/ +infra/ +node_modules/ +.vscode/ diff --git a/examples/reactions/README.md b/examples/reactions/README.md new file mode 100644 index 000000000..678cb69ea --- /dev/null +++ b/examples/reactions/README.md @@ -0,0 +1,44 @@ +# Example: Reactions + +A bot that demonstrates how to use the ReactionClient to add and remove reactions on messages. + +## Features + +- Responds to user messages and adds reactions +- Handles `messageReaction` activities to detect when users add/remove reactions +- Demonstrates using the `ReactionClient` API to programmatically manage reactions + +## Usage + +1. Send a message to the bot +2. The bot will reply and add a reaction to your message +3. Add or remove reactions on bot messages to see reaction events logged + +## Run + +```bash +$: npm run dev +``` + +## ReactionClient API + +```typescript +import { Client } from '@microsoft/teams.api'; + +const client = new Client(serviceUrl); + +// Add a reaction +await client.reactions.add(conversationId, activityId, 'like'); + +// Remove a reaction +await client.reactions.remove(conversationId, activityId, 'like'); +``` + +## Supported Reaction Types + +- `like` - 👍 +- `heart` - ❤️ +- `laugh` - 😂 +- `surprised` - 😮 +- `sad` - 😢 +- `angry` - 😠 diff --git a/examples/reactions/appPackage/color.png b/examples/reactions/appPackage/color.png new file mode 100644 index 000000000..e5bd0a650 Binary files /dev/null and b/examples/reactions/appPackage/color.png differ diff --git a/examples/reactions/appPackage/manifest.json b/examples/reactions/appPackage/manifest.json new file mode 100644 index 000000000..0d7e2e6f5 --- /dev/null +++ b/examples/reactions/appPackage/manifest.json @@ -0,0 +1,51 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.20/MicrosoftTeams.schema.json", + "version": "1.0.0", + "manifestVersion": "1.20", + "id": "${{TEAMS_APP_ID}}", + "name": { + "short": "reactions-demo", + "full": "Reactions Demo Bot" + }, + "developer": { + "name": "Microsoft", + "mpnId": "", + "websiteUrl": "https://microsoft.com", + "privacyUrl": "https://privacy.microsoft.com/privacystatement", + "termsOfUseUrl": "https://www.microsoft.com/legal/terms-of-use" + }, + "description": { + "short": "Demo bot showing how to use ReactionClient", + "full": "Sample bot that demonstrates how to use the ReactionClient API to add, remove, and respond to message reactions" + }, + "icons": { + "outline": "outline.png", + "color": "color.png" + }, + "accentColor": "#FFFFFF", + "staticTabs": [ + { + "entityId": "conversations", + "scopes": ["personal"] + }, + { + "entityId": "about", + "scopes": ["personal"] + } + ], + "bots": [ + { + "botId": "${{BOT_ID}}", + "scopes": ["personal", "team", "groupChat"], + "isNotificationOnly": false, + "supportsCalling": false, + "supportsVideo": false, + "supportsFiles": false + } + ], + "validDomains": ["${{BOT_DOMAIN}}", "*.botframework.com"], + "webApplicationInfo": { + "id": "${{BOT_ID}}", + "resource": "api://botid-${{BOT_ID}}" + } +} diff --git a/examples/reactions/appPackage/outline.png b/examples/reactions/appPackage/outline.png new file mode 100644 index 000000000..b1ae0b88c Binary files /dev/null and b/examples/reactions/appPackage/outline.png differ diff --git a/examples/reactions/eslint.config.js b/examples/reactions/eslint.config.js new file mode 100644 index 000000000..5ccf8112f --- /dev/null +++ b/examples/reactions/eslint.config.js @@ -0,0 +1 @@ +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/reactions/package.json b/examples/reactions/package.json new file mode 100644 index 000000000..7d309f8a4 --- /dev/null +++ b/examples/reactions/package.json @@ -0,0 +1,35 @@ +{ + "name": "@examples/reactions", + "version": "0.0.1", + "private": true, + "license": "MIT", + "main": "dist/index", + "types": "dist/index", + "files": [ + "dist", + "README.md" + ], + "scripts": { + "clean": "npx rimraf ./dist", + "lint": "npx eslint", + "lint:fix": "npx eslint --fix", + "build": "npx tsc", + "start": "node .", + "dev": "tsx watch -r dotenv/config src/index.ts", + "dev:teamsfx": "npx cross-env NODE_OPTIONS='--inspect=9239' npx env-cmd -f .env npm run dev", + "dev:teamsfx:testtool": "npx cross-env NODE_OPTIONS='--inspect=9239' npx env-cmd -f .env npm run dev", + "dev:teamsfx:launch-testtool": "npx env-cmd --silent -f env/.env.testtool teamsapptester start" + }, + "dependencies": { + "@microsoft/teams.apps": "*" + }, + "devDependencies": { + "@microsoft/teams.config": "*", + "@types/node": "^22.5.4", + "dotenv": "^16.4.5", + "rimraf": "^6.0.1", + "tsx": "^4.20.6", + "typescript": "^5.4.5", + "env-cmd": "latest" + } +} diff --git a/examples/reactions/src/index.ts b/examples/reactions/src/index.ts new file mode 100644 index 000000000..40af3c694 --- /dev/null +++ b/examples/reactions/src/index.ts @@ -0,0 +1,115 @@ +import { Client, MessageReactionActivity } from '@microsoft/teams.api'; +import { App } from '@microsoft/teams.apps'; +import { ConsoleLogger } from '@microsoft/teams.common/logging'; + +const app = new App({ + logger: new ConsoleLogger('@examples/reactions', { level: 'debug' }) +}); + +// Store the service URL and conversation reference to use with ReactionClient + +type ReactionParameter = Parameters[2]; + +// Handle incoming messages +app.on('message', async ({ reply, activity, log, api }) => { + // Save the service URL from the first message + + const userMessage = activity.text?.toLowerCase() || ''; + + if (userMessage.includes('help')) { + await reply({ + type: 'message', + text: '**Reactions Bot Help**\n\n' + + 'I demonstrate how to use the ReactionClient API!\n\n' + + '**Commands:**\n' + + '- Type "add [reaction]" - I\'ll add that reaction to your message\n' + + '- Type "remove [reaction]" - I\'ll remove a reaction from your message\n' + + '- Add any reaction to my messages and I\'ll tell you about it!', + }); + return; + } + + // Handle commands to add reactions + const addMatch = userMessage.match(/add\s+(\S+)/); + if (addMatch && api) { + const reactionType = addMatch[1] as ReactionParameter; + try { + await api.reactions.add( + activity.conversation.id, + activity.id, + reactionType + ); + await reply(`Added a ${reactionType} reaction to your message!`); + log.info(`Added ${reactionType} reaction to message ${activity.id}`); + } catch (error) { + log.error('Failed to add reaction:', error); + await reply('Sorry, I had trouble adding that reaction.'); + } + return; + } + + // Handle commands to remove reactions + const removeMatch = userMessage.match(/remove\s+(\S+)/); + if (removeMatch && api) { + const reactionType = removeMatch[1] as ReactionParameter; + try { + await api.reactions.remove( + activity.conversation.id, + activity.id, + reactionType + ); + await reply(`Removed the ${reactionType} reaction from your message!`); + log.info(`Removed ${reactionType} reaction from message ${activity.id}`); + } catch (error) { + log.error('Failed to remove reaction:', error); + await reply('Sorry, I had trouble removing that reaction.'); + } + return; + } + + // Default response + await reply({ + type: 'message', + text: `You said: "${activity.text}"\n\nType "help" to see what I can do!`, + }); +}); + +// Handle reaction events +app.on('messageReaction', async ({ activity, send, log }) => { + const reactionActivity = activity as MessageReactionActivity; + + // Log added reactions + if (reactionActivity.reactionsAdded && reactionActivity.reactionsAdded.length > 0) { + for (const reaction of reactionActivity.reactionsAdded) { + const userName = reaction.user?.displayName || 'Someone'; + const reactionEmoji = reaction.type; + log.info(`${userName} added a ${reaction.type} reaction (${reactionEmoji})`); + + // Send a message acknowledging the reaction + await send( + `Thanks for the ${reactionEmoji} reaction, ${userName}!` + ); + } + } + + // Log removed reactions + if (reactionActivity.reactionsRemoved && reactionActivity.reactionsRemoved.length > 0) { + for (const reaction of reactionActivity.reactionsRemoved) { + const userName = reaction.user?.displayName || 'Someone'; + const reactionEmoji = reaction.type; + log.info(`${userName} removed a ${reaction.type} reaction (${reactionEmoji})`); + } + } +}); + +// Welcome message on installation +app.on('install.add', async ({ send }) => { + await send({ + type: 'message', + text: '👋 **Welcome to the Reactions Bot!**\n\n' + + 'I demonstrate how to use the ReactionClient to manage message reactions.\n\n' + + 'Type "help" to see what I can do!', + }); +}); + +app.start().catch(console.error); diff --git a/examples/reactions/tsconfig.json b/examples/reactions/tsconfig.json new file mode 100644 index 000000000..9a42fe553 --- /dev/null +++ b/examples/reactions/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@microsoft/teams.config/tsconfig.node.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src/**/*.ts"] +} diff --git a/examples/tab/appPackage/color.png b/examples/tab/appPackage/color.png new file mode 100644 index 000000000..e5bd0a650 Binary files /dev/null and b/examples/tab/appPackage/color.png differ diff --git a/examples/tab/appPackage/manifest.json b/examples/tab/appPackage/manifest.json new file mode 100644 index 000000000..c3cdde9a6 --- /dev/null +++ b/examples/tab/appPackage/manifest.json @@ -0,0 +1,57 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.20/MicrosoftTeams.schema.json", + "version": "1.0.0", + "manifestVersion": "1.20", + "id": "${{TEAMS_APP_ID}}", + "name": { + "short": "tab-tester", + "full": "tab tester agent" + }, + "developer": { + "name": "Microsoft", + "mpnId": "", + "websiteUrl": "https://microsoft.com", + "privacyUrl": "https://privacy.microsoft.com/privacystatement", + "termsOfUseUrl": "https://www.microsoft.com/legal/terms-of-use" + }, + "description": { + "short": "Sample bot that repeats back what you say", + "full": "Sample bot that repeats back what you say" + }, + "icons": { + "outline": "outline.png", + "color": "color.png" + }, + "accentColor": "#FFFFFF", + "staticTabs": [ + { + "entityId": "conversations", + "scopes": ["personal"] + }, + { + "entityId": "about", + "scopes": ["personal"] + }, + { + "entityId": "test", + "name": "Test Tab", + "contentUrl": "https://${{BOT_DOMAIN}}/tabs/test/", + "scopes": ["personal"] + } + ], + "bots": [ + { + "botId": "${{BOT_ID}}", + "scopes": ["personal", "team", "groupChat"], + "isNotificationOnly": false, + "supportsCalling": false, + "supportsVideo": false, + "supportsFiles": false + } + ], + "validDomains": ["${{BOT_DOMAIN}}", "*.botframework.com"], + "webApplicationInfo": { + "id": "${{BOT_ID}}", + "resource": "api://botid-${{BOT_ID}}" + } +} diff --git a/examples/tab/appPackage/outline.png b/examples/tab/appPackage/outline.png new file mode 100644 index 000000000..b1ae0b88c Binary files /dev/null and b/examples/tab/appPackage/outline.png differ diff --git a/examples/tab/eslint.config.js b/examples/tab/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/examples/tab/eslint.config.js +++ b/examples/tab/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/tab/package-lock.json b/examples/tab/package-lock.json index aba332392..209199d41 100644 --- a/examples/tab/package-lock.json +++ b/examples/tab/package-lock.json @@ -1,12 +1,12 @@ { "name": "@examples/tab", - "version": "0.0.5", + "version": "0.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@examples/tab", - "version": "0.0.5", + "version": "0.0.7", "license": "MIT", "dependencies": { "@microsoft/teams.api": "2.0.4", diff --git a/examples/tab/package.json b/examples/tab/package.json index beb92b206..f50fb87a9 100644 --- a/examples/tab/package.json +++ b/examples/tab/package.json @@ -19,19 +19,15 @@ "build:client": "npx vite build --outDir dist/client" }, "dependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.client": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.graph": "2.0.5", - "@microsoft/teams.graph-endpoints": "2.0.5", - "react": "^19.2.1", - "react-dom": "^19.2.1" + "@microsoft/teams.apps": "*", + "@microsoft/teams.client": "*", + "@microsoft/teams.dev": "*", + "@microsoft/teams.graph-endpoints": "*", + "react": "^19.2.2", + "react-dom": "^19.2.2" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/node": "^22.5.4", "@vitejs/plugin-react": "^4.3.4", "dotenv": "^16.4.5", diff --git a/examples/targeted-messages/.gitignore b/examples/targeted-messages/.gitignore new file mode 100644 index 000000000..2a10fd5e7 --- /dev/null +++ b/examples/targeted-messages/.gitignore @@ -0,0 +1,7 @@ +teams*.yml +env/ +infra/ +node_modules/ +.vscode/ +dist/ +.env diff --git a/examples/targeted-messages/README.md b/examples/targeted-messages/README.md new file mode 100644 index 000000000..b95e40a0d --- /dev/null +++ b/examples/targeted-messages/README.md @@ -0,0 +1,40 @@ +# Example: Targeted Messages + +A bot that demonstrates targeted (ephemeral) messages in Microsoft Teams. + +Targeted messages are messages that only a specific recipient can see - other participants in the conversation won't see them. + +## Commands + +| Command | Behavior | +|---------|----------| +| `test send` | Sends a targeted message (only you see it) | +| `test reply` | Replies with a targeted message | +| `test update` | Sends a targeted message, then updates it after 3 seconds | +| `test delete` | Sends a targeted message, then deletes it after 5 seconds | +| `help` | Shows available commands | + +## Testing in a Group Chat + +To properly test targeted messages: + +1. Add the bot to a **group chat** with 2+ people +2. Send `test send` +3. **Expected result**: + - You (the sender) should see the "🔒 Targeted message" + - Other participants should **NOT** see it + +## Run + +```bash +npm run dev +``` + +## Environment Variables + +Create a `.env` file: + +``` +CLIENT_ID= +CLIENT_SECRET= +``` diff --git a/examples/targeted-messages/appPackage/color.png b/examples/targeted-messages/appPackage/color.png new file mode 100644 index 000000000..f27ccf203 Binary files /dev/null and b/examples/targeted-messages/appPackage/color.png differ diff --git a/examples/targeted-messages/appPackage/manifest.json b/examples/targeted-messages/appPackage/manifest.json new file mode 100644 index 000000000..53dfff1b4 --- /dev/null +++ b/examples/targeted-messages/appPackage/manifest.json @@ -0,0 +1,51 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.20/MicrosoftTeams.schema.json", + "version": "1.0.0", + "manifestVersion": "1.20", + "id": "${{TEAMS_APP_ID}}", + "name": { + "short": "targeted-messages", + "full": "Targeted Messages Example" + }, + "developer": { + "name": "Microsoft", + "mpnId": "", + "websiteUrl": "https://microsoft.com", + "privacyUrl": "https://privacy.microsoft.com/privacystatement", + "termsOfUseUrl": "https://www.microsoft.com/legal/terms-of-use" + }, + "description": { + "short": "Bot demonstrating targeted (ephemeral) messages", + "full": "A sample bot that demonstrates how to send targeted messages that are only visible to specific recipients in Microsoft Teams." + }, + "icons": { + "outline": "outline.png", + "color": "color.png" + }, + "accentColor": "#FFFFFF", + "staticTabs": [ + { + "entityId": "conversations", + "scopes": ["personal"] + }, + { + "entityId": "about", + "scopes": ["personal"] + } + ], + "bots": [ + { + "botId": "${{BOT_ID}}", + "scopes": ["personal", "team", "groupChat"], + "isNotificationOnly": false, + "supportsCalling": false, + "supportsVideo": false, + "supportsFiles": false + } + ], + "validDomains": ["${{BOT_DOMAIN}}", "*.botframework.com"], + "webApplicationInfo": { + "id": "${{BOT_ID}}", + "resource": "api://botid-${{BOT_ID}}" + } +} diff --git a/examples/targeted-messages/appPackage/outline.png b/examples/targeted-messages/appPackage/outline.png new file mode 100644 index 000000000..e8cb4b6ba Binary files /dev/null and b/examples/targeted-messages/appPackage/outline.png differ diff --git a/examples/targeted-messages/eslint.config.js b/examples/targeted-messages/eslint.config.js new file mode 100644 index 000000000..5ccf8112f --- /dev/null +++ b/examples/targeted-messages/eslint.config.js @@ -0,0 +1 @@ +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/examples/targeted-messages/package.json b/examples/targeted-messages/package.json new file mode 100644 index 000000000..64a6663ba --- /dev/null +++ b/examples/targeted-messages/package.json @@ -0,0 +1,32 @@ +{ + "name": "@examples/targeted-messages", + "version": "0.0.0", + "private": true, + "license": "MIT", + "main": "dist/index", + "types": "dist/index", + "files": [ + "dist", + "README.md" + ], + "scripts": { + "clean": "npx rimraf ./dist", + "lint": "npx eslint", + "lint:fix": "npx eslint --fix", + "build": "npx tsc", + "start": "node .", + "dev": "tsx watch -r dotenv/config src/index.ts" + }, + "dependencies": { + "@microsoft/teams.apps": "*", + "@microsoft/teams.dev": "*" + }, + "devDependencies": { + "@microsoft/teams.config": "*", + "@types/node": "^22.5.4", + "dotenv": "^16.4.5", + "rimraf": "^6.0.1", + "tsx": "^4.20.6", + "typescript": "^5.4.5" + } +} diff --git a/examples/targeted-messages/src/index.ts b/examples/targeted-messages/src/index.ts new file mode 100644 index 000000000..008885b1d --- /dev/null +++ b/examples/targeted-messages/src/index.ts @@ -0,0 +1,125 @@ +import { MessageActivity } from '@microsoft/teams.api'; +import { App } from '@microsoft/teams.apps'; +import { ConsoleLogger } from '@microsoft/teams.common/logging'; +import { DevtoolsPlugin } from '@microsoft/teams.dev'; + +const app = new App({ + logger: new ConsoleLogger('@examples/targeted-messages', { level: 'debug' }), + plugins: [new DevtoolsPlugin()], +}); + +app.on('message', async ({ send, reply, activity, api }) => { + await reply({ type: 'typing' }); + + const text = activity.text?.toLowerCase() || ''; + + // ============================================ + // Test targeted SEND (create) + // ============================================ + if (text.includes('test send')) { + const targetedMessage = new MessageActivity( + '🔒 [SEND] Targeted message - only YOU can see this!' + ).withRecipient(activity.from, true); + + const result = await send(targetedMessage); + console.log('Targeted SEND result:', result); + return; + } + + // ============================================ + // Test targeted REPLY + // ============================================ + if (text.includes('test reply')) { + const targetedReply = new MessageActivity( + '🔒 [REPLY] Targeted reply - only YOU can see this!' + ).withRecipient(activity.from, true); + + const result = await reply(targetedReply); + console.log('Targeted REPLY result:', result); + return; + } + + // ============================================ + // Test targeted UPDATE + // ============================================ + if (text.includes('test update')) { + // First send a targeted message + const targetedMessage = new MessageActivity( + '🔒 [UPDATE] Original targeted message...' + ).withRecipient(activity.from, true); + + const result = await send(targetedMessage); + console.log('Initial targeted message ID:', result.id); + + // Wait then update + setTimeout(async () => { + try { + const updatedMessage = new MessageActivity( + '🔒 [UPDATE] ✅ UPDATED targeted message! (only you see this)' + ); + + await api.conversations + .activities(activity.conversation.id) + .updateTargeted(result.id, updatedMessage); + console.log('Targeted UPDATE completed'); + } catch (err: any) { + console.error('Targeted UPDATE error:', err?.response?.data || err?.message || err); + } + }, 3000); + return; + } + + // ============================================ + // Test targeted DELETE + // ============================================ + if (text.includes('test delete')) { + // First send a targeted message + const targetedMessage = new MessageActivity( + '🔒 [DELETE] This targeted message will be DELETED in 5 seconds...' + ).withRecipient(activity.from, true); + + const result = await send(targetedMessage); + console.log('Targeted message to delete, ID:', result.id); + + // Wait then delete using the targeted API + setTimeout(async () => { + try { + await api.conversations + .activities(activity.conversation.id) + .deleteTargeted(result.id); + console.log('Targeted DELETE completed'); + } catch (err: any) { + console.error('Targeted DELETE error:', err?.response?.data || err?.message || err); + } + }, 5000); + return; + } + + // ============================================ + // Help / Default + // ============================================ + if (text.includes('help')) { + await reply( + '**Targeted Messages Test Bot**\n\n' + + '**Commands:**\n' + + '- `test send` - Send a targeted message\n' + + '- `test reply` - Reply with a targeted message\n' + + '- `test update` - Send then update a targeted message\n' + + '- `test delete` - Send then delete a targeted message\n\n' + + '💡 *Test in a group chat to verify others don\'t see targeted messages!*' + ); + return; + } + + // Default + await reply('Say "help" for available commands.'); +}); + +app.on('install.add', async ({ send }) => { + await send( + '👋 Hi! I demonstrate targeted messages.\n\n' + + 'Say **help** to see available commands.' + ); +}); + +app.start().catch(console.error); diff --git a/examples/targeted-messages/tsconfig.json b/examples/targeted-messages/tsconfig.json new file mode 100644 index 000000000..9a42fe553 --- /dev/null +++ b/examples/targeted-messages/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@microsoft/teams.config/tsconfig.node.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": ["src/**/*.ts"] +} diff --git a/external/a2a/eslint.config.js b/external/a2a/eslint.config.js index 8a35eba44..3761faea4 100644 --- a/external/a2a/eslint.config.js +++ b/external/a2a/eslint.config.js @@ -1,13 +1,9 @@ -const tseslint = require("typescript-eslint"); -const baseConfig = require("@microsoft/teams.config/eslint.config"); +const tseslint = require('typescript-eslint'); +const baseConfig = require('@microsoft/teams.config/eslint.config').default; -module.exports = (async () => { - const config = await baseConfig; - - return tseslint.config( - { - ignores: ["src/common/schema.ts"], - }, - ...config - ); -})(); +module.exports = tseslint.config( + { + ignores: ['src/common/schema.ts'], + }, + ...baseConfig +); diff --git a/external/a2a/package.json b/external/a2a/package.json index e83e2bd83..775525d8e 100644 --- a/external/a2a/package.json +++ b/external/a2a/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.a2a", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -30,12 +30,10 @@ }, "peerDependencies": { "@a2a-js/sdk": "^0.3.4", - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.common": "2.0.5" + "@microsoft/teams.apps": "*" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/lodash.camelcase": "^4.3.9", "@types/node": "^22.0.2", @@ -45,6 +43,8 @@ "typescript": "^5.4.5" }, "dependencies": { + "@microsoft/teams.ai": "*", + "@microsoft/teams.common": "*", "lodash.camelcase": "^4.3.0" } } diff --git a/external/a2a/src/server/plugin.ts b/external/a2a/src/server/plugin.ts index 314ecb8a9..a36c3cd73 100644 --- a/external/a2a/src/server/plugin.ts +++ b/external/a2a/src/server/plugin.ts @@ -14,10 +14,11 @@ import { A2AExpressApp } from '@a2a-js/sdk/server/express'; import express, { RequestHandler } from 'express'; import { - Dependency, EmitPluginEvent, Event, - HttpPlugin, + ExpressAdapter, + HttpServer, + IHttpServer, IPlugin, Logger, Plugin, @@ -76,8 +77,9 @@ export class A2APlugin implements IPlugin { @Event('custom') protected readonly emit!: EmitPluginEvent; - @Dependency() - protected readonly _httpPlugin!: HttpPlugin; + @HttpServer() + protected readonly httpServer!: IHttpServer; + __eventType!: A2AEvents; public readonly card: AgentCard; @@ -105,6 +107,14 @@ export class A2APlugin implements IPlugin { this.middlewares.push(middleware); } onInit() { + const adapter = this.httpServer.adapter; + if (!(adapter instanceof ExpressAdapter)) { + throw new Error( + 'A2APlugin requires ExpressAdapter. ' + + 'Please use: new App({ httpServerAdapter: new ExpressAdapter() })' + ); + } + const a2aExpressApp = new A2AExpressApp(this._setupRequestHandler()); const expressApp = express(); @@ -122,7 +132,8 @@ export class A2APlugin implements IPlugin { ); this.log.info(`A2A agent set up at ${this.path}/${this.agentCardPath}`); this.log.info(`A2A agent listening at ${this.path}`); - this._httpPlugin.use(expressApp); + + adapter.use(expressApp); } _createLoggingMiddleware(): RequestHandler { diff --git a/external/mcp/eslint.config.js b/external/mcp/eslint.config.js index b1f6d39a4..5ccf8112f 100644 --- a/external/mcp/eslint.config.js +++ b/external/mcp/eslint.config.js @@ -1 +1 @@ -module.exports = require("@microsoft/teams.config/eslint.config"); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/external/mcp/package.json b/external/mcp/package.json index ef3a5fe15..02425368c 100644 --- a/external/mcp/package.json +++ b/external/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.mcp", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -33,23 +33,17 @@ "test": "npx jest" }, "dependencies": { + "@microsoft/teams.ai": "*", + "@microsoft/teams.common": "*", "json-schema-to-zod": "^2.6.0", "zod": "^3.24.2" }, "peerDependencies": { - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", + "@microsoft/teams.apps": "*", "@modelcontextprotocol/sdk": "^1.9.0" }, - "peerDependenciesMeta": { - "@microsoft/teams.dev": { - "optional": true - } - }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.0.2", "jest": "^29.7.0", diff --git a/external/mcp/src/plugin.ts b/external/mcp/src/plugin.ts index 3c763d300..e29b8e977 100644 --- a/external/mcp/src/plugin.ts +++ b/external/mcp/src/plugin.ts @@ -6,20 +6,21 @@ import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolResult } from '@modelcontextprotocol/sdk/types.js'; +import express from 'express'; import { jsonSchemaToZod } from 'json-schema-to-zod'; import { z } from 'zod'; import { IChatPrompt } from '@microsoft/teams.ai'; import { - Dependency, - HttpPlugin, + ExpressAdapter, + HttpServer, + IHttpServer, IPlugin, IPluginStartEvent, Logger, Plugin, } from '@microsoft/teams.apps'; import { ILogger } from '@microsoft/teams.common'; -import { DevtoolsPlugin } from '@microsoft/teams.dev'; import pkg from '../package.json'; @@ -111,11 +112,8 @@ export class McpPlugin implements IPlugin { @Logger() readonly logger!: ILogger; - @Dependency() - readonly httpPlugin!: HttpPlugin; - - @Dependency({ optional: true }) - readonly devtoolsPlugin?: DevtoolsPlugin; + @HttpServer() + readonly httpServer!: IHttpServer; readonly server: McpServer; protected id: number = -1; @@ -191,14 +189,8 @@ export class McpPlugin implements IPlugin { } onInit() { - this.devtoolsPlugin?.addPage({ - name: 'mcp', - displayName: 'MCP', - url: this.inspector, - }); - if (this.transport.type === 'sse') { - return this.onInitSSE(this.httpPlugin, this.transport); + return this.onInitSSE(this.transport); } return this.onInitStdio(this.transport); @@ -219,10 +211,19 @@ export class McpPlugin implements IPlugin { return this.server.connect(transport); } - protected onInitSSE(http: HttpPlugin, options: McpSSETransportOptions) { + protected onInitSSE(options: McpSSETransportOptions) { const path = options.path || '/mcp'; - http.get(path, (_, res) => { + const adapter = this.httpServer.adapter; + if (!(adapter instanceof ExpressAdapter)) { + throw new Error( + 'McpPlugin with SSE transport requires ExpressAdapter. ' + + 'Please use: new App({ httpServerAdapter: new ExpressAdapter() })' + ); + } + + // Register GET endpoint for SSE connections + adapter.get(path, (_: express.Request, res: express.Response) => { this.id++; this.logger.debug('connecting...'); const transport = new SSEServerTransport( @@ -238,7 +239,8 @@ export class McpPlugin implements IPlugin { this.server.connect(transport); }); - http.post(`${path}/:id/messages`, (req, res) => { + // Register POST endpoint for SSE messages + adapter.post(`${path}/:id/messages`, (req: express.Request, res: express.Response) => { const id = +req.params.id; const { transport } = this.connections[id]; diff --git a/external/mcpclient/eslint.config.js b/external/mcpclient/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/external/mcpclient/eslint.config.js +++ b/external/mcpclient/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/external/mcpclient/package.json b/external/mcpclient/package.json index 0b059bb5d..5116104ca 100644 --- a/external/mcpclient/package.json +++ b/external/mcpclient/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.mcpclient", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -28,13 +28,15 @@ "build": "npx tsup", "test": "npx jest" }, + "dependencies": { + "@microsoft/teams.common": "*" + }, "peerDependencies": { - "@modelcontextprotocol/sdk": "^1.13.0", - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.common": "2.0.5" + "@microsoft/teams.ai": "*", + "@modelcontextprotocol/sdk": "^1.13.0" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.0.2", "jest": "^29.7.0", diff --git a/package-lock.json b/package-lock.json index 7cd7c4d86..f9e173df4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,25 +1,28 @@ { "name": "@microsoft/teams.ts", - "version": "2.0.5", + "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@microsoft/teams.ts", - "version": "2.0.5", + "version": "0.0.0", "workspaces": [ "packages/*", "external/*", "examples/*" ], "devDependencies": { - "@changesets/cli": "latest", "@turbo/gen": "^2.5.7", + "nerdbank-gitversioning": "^3.9.50", "turbo": "^2.4.0", "typescript": "^5.4.5" }, "engines": { "node": ">=20" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "4.40.1" } }, "examples/a2a": { @@ -28,12 +31,11 @@ "license": "MIT", "dependencies": { "@a2a-js/sdk": "^0.3.4", - "@microsoft/teams.a2a": "2.0.5", - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.openai": "2.0.5" + "@microsoft/teams.a2a": "*", + "@microsoft/teams.ai": "*", + "@microsoft/teams.apps": "*", + "@microsoft/teams.dev": "*", + "@microsoft/teams.openai": "*" }, "devDependencies": { "@types/node": "^22.5.4", @@ -48,11 +50,11 @@ "version": "0.0.6", "license": "MIT", "dependencies": { - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.openai": "2.0.5", + "@microsoft/teams.ai": "*", + "@microsoft/teams.apps": "*", + "@microsoft/teams.common": "*", + "@microsoft/teams.dev": "*", + "@microsoft/teams.openai": "*", "fuse.js": "^7.1.0" }, "devDependencies": { @@ -69,17 +71,13 @@ "version": "0.0.6", "license": "MIT", "dependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.botbuilder": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.graph": "2.0.5", + "@microsoft/teams.apps": "*", + "@microsoft/teams.botbuilder": "*", + "@microsoft/teams.dev": "*", "botbuilder": "4.23.1" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/node": "^22.0.2", "dotenv": "^16.4.5", "rimraf": "^6.0.1", @@ -93,10 +91,9 @@ "version": "0.0.6", "license": "MIT", "dependencies": { - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.dev": "2.0.5" + "@microsoft/teams.apps": "*", + "@microsoft/teams.cards": "*", + "@microsoft/teams.dev": "*" }, "devDependencies": { "@types/node": "^22.5.4", @@ -112,10 +109,9 @@ "version": "0.0.6", "license": "MIT", "dependencies": { - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.dev": "2.0.5" + "@microsoft/teams.apps": "*", + "@microsoft/teams.cards": "*", + "@microsoft/teams.dev": "*" }, "devDependencies": { "@types/node": "^22.5.4", @@ -131,15 +127,11 @@ "version": "0.0.6", "license": "MIT", "dependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.graph": "2.0.5" + "@microsoft/teams.apps": "*", + "@microsoft/teams.dev": "*" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/node": "^22.5.4", "dotenv": "^16.4.5", "env-cmd": "latest", @@ -153,16 +145,11 @@ "version": "0.0.6", "license": "MIT", "dependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.graph": "2.0.5", - "@microsoft/teams.graph-endpoints": "2.0.5" + "@microsoft/teams.apps": "*", + "@microsoft/teams.graph-endpoints": "*" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/node": "^22.5.4", "dotenv": "^16.4.5", "env-cmd": "latest", @@ -171,22 +158,298 @@ "typescript": "^5.4.5" } }, + "examples/http-adapters": { + "name": "@examples/http-adapters", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9", + "@microsoft/teams.api": "*", + "@microsoft/teams.apps": "*", + "@microsoft/teams.common": "*", + "cors": "^2.8.5", + "express": "^5.0.0", + "hono": "^4.6.14", + "restify": "^11.1.0" + }, + "devDependencies": { + "@microsoft/teams.config": "*", + "@types/cors": "^2.8.17", + "@types/express": "^5.0.0", + "@types/node": "^22.5.4", + "@types/restify": "^8.5.12", + "dotenv": "^16.4.5", + "tsx": "^4.20.6", + "typescript": "^5.4.5" + } + }, + "examples/http-adapters/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "examples/http-adapters/node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "examples/http-adapters/node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "examples/http-adapters/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "examples/http-adapters/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "examples/http-adapters/node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "examples/http-adapters/node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "examples/http-adapters/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "examples/http-adapters/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "examples/http-adapters/node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "examples/http-adapters/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "examples/http-adapters/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "examples/http-adapters/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "examples/http-adapters/node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "examples/http-adapters/node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "examples/http-adapters/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "examples/lights": { "name": "@examples/lights", "version": "0.0.6", "license": "MIT", "dependencies": { - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.graph": "2.0.5", - "@microsoft/teams.openai": "2.0.5" + "@microsoft/teams.ai": "*", + "@microsoft/teams.apps": "*", + "@microsoft/teams.dev": "*", + "@microsoft/teams.openai": "*" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/node": "^22.5.4", "dotenv": "^16.4.5", "rimraf": "^6.0.1", @@ -199,19 +462,14 @@ "version": "0.0.6", "license": "MIT", "dependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.graph": "2.0.5", - "@microsoft/teams.mcp": "2.0.5", - "@microsoft/teams.openai": "2.0.5", - "@modelcontextprotocol/sdk": "^1.9.0", + "@microsoft/teams.apps": "*", + "@microsoft/teams.dev": "*", + "@microsoft/teams.mcp": "*", + "@modelcontextprotocol/sdk": "^1.25.2", "zod": "^3.24.3" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@modelcontextprotocol/inspector": "^0.16.5", "@types/node": "^22.5.4", "cross-env": "^7.0.3", @@ -227,12 +485,12 @@ "version": "0.0.6", "license": "MIT", "dependencies": { - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.mcpclient": "2.0.5", - "@microsoft/teams.openai": "2.0.5", - "@modelcontextprotocol/sdk": "^1.13.0" + "@microsoft/teams.ai": "*", + "@microsoft/teams.apps": "*", + "@microsoft/teams.dev": "*", + "@microsoft/teams.mcpclient": "*", + "@microsoft/teams.openai": "*", + "@modelcontextprotocol/sdk": "^1.25.2" }, "devDependencies": { "@types/node": "^22.5.4", @@ -242,20 +500,15 @@ "typescript": "^5.4.5" } }, - "examples/message-extensions": { - "name": "@examples/message-extensions", + "examples/meetings": { + "name": "@examples/meetings", "version": "0.0.6", "license": "MIT", "dependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.graph": "2.0.5" + "@microsoft/teams.apps": "*", + "@microsoft/teams.cards": "*" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", "@types/node": "^22.5.4", "dotenv": "^16.4.5", "env-cmd": "latest", @@ -264,70 +517,113 @@ "typescript": "^5.4.5" } }, - "examples/tab": { - "name": "@examples/tab", + "examples/message-extensions": { + "name": "@examples/message-extensions", "version": "0.0.6", "license": "MIT", "dependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.client": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", - "@microsoft/teams.graph": "2.0.5", - "@microsoft/teams.graph-endpoints": "2.0.5", - "react": "^19.2.1", - "react-dom": "^19.2.1" + "@microsoft/teams.apps": "*", + "@microsoft/teams.cards": "*", + "@microsoft/teams.dev": "*" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/node": "^22.5.4", - "@vitejs/plugin-react": "^4.3.4", "dotenv": "^16.4.5", - "nodemon": "^3.1.4", + "env-cmd": "latest", "rimraf": "^6.0.1", - "tsup": "^8.4.0", - "typescript": "^5.4.5", - "vite": "^6.4.1" + "tsx": "^4.20.6", + "typescript": "^5.4.5" } }, - "examples/tab/node_modules/react": { - "version": "19.2.1", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz", - "integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==", + "examples/proactive-messaging": { + "name": "@examples/proactive-messaging", + "version": "0.0.6", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@microsoft/teams.api": "*", + "@microsoft/teams.apps": "*", + "@microsoft/teams.cards": "*", + "@microsoft/teams.common": "*" + }, + "devDependencies": { + "@microsoft/teams.config": "*", + "@types/node": "^22.5.4", + "dotenv": "^16.4.5", + "rimraf": "^6.0.1", + "tsx": "^4.20.6", + "typescript": "^5.4.5" } }, - "examples/tab/node_modules/react-dom": { - "version": "19.2.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz", - "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", + "examples/reactions": { + "name": "@examples/reactions", + "version": "0.0.1", "license": "MIT", "dependencies": { - "scheduler": "^0.27.0" + "@microsoft/teams.apps": "*" }, - "peerDependencies": { - "react": "^19.2.1" + "devDependencies": { + "@microsoft/teams.config": "*", + "@types/node": "^22.5.4", + "dotenv": "^16.4.5", + "env-cmd": "latest", + "rimraf": "^6.0.1", + "tsx": "^4.20.6", + "typescript": "^5.4.5" } }, - "examples/tab/node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "license": "MIT" + "examples/tab": { + "name": "@examples/tab", + "version": "0.0.6", + "license": "MIT", + "dependencies": { + "@microsoft/teams.apps": "*", + "@microsoft/teams.client": "*", + "@microsoft/teams.dev": "*", + "@microsoft/teams.graph-endpoints": "*", + "react": "^19.2.2", + "react-dom": "^19.2.2" + }, + "devDependencies": { + "@microsoft/teams.config": "*", + "@types/node": "^22.5.4", + "@vitejs/plugin-react": "^4.3.4", + "dotenv": "^16.4.5", + "nodemon": "^3.1.4", + "rimraf": "^6.0.1", + "tsup": "^8.4.0", + "typescript": "^5.4.5", + "vite": "^6.4.1" + } + }, + "examples/targeted-messages": { + "name": "@examples/targeted-messages", + "version": "0.0.0", + "license": "MIT", + "dependencies": { + "@microsoft/teams.apps": "*", + "@microsoft/teams.dev": "*" + }, + "devDependencies": { + "@microsoft/teams.config": "*", + "@types/node": "^22.5.4", + "dotenv": "^16.4.5", + "rimraf": "^6.0.1", + "tsx": "^4.20.6", + "typescript": "^5.4.5" + } }, "external/a2a": { "name": "@microsoft/teams.a2a", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "dependencies": { + "@microsoft/teams.ai": "*", + "@microsoft/teams.common": "*", "lodash.camelcase": "^4.3.0" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/lodash.camelcase": "^4.3.9", "@types/node": "^22.0.2", @@ -338,21 +634,21 @@ }, "peerDependencies": { "@a2a-js/sdk": "^0.3.4", - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.common": "2.0.5" + "@microsoft/teams.apps": "*" } }, "external/mcp": { "name": "@microsoft/teams.mcp", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "dependencies": { + "@microsoft/teams.ai": "*", + "@microsoft/teams.common": "*", "json-schema-to-zod": "^2.6.0", "zod": "^3.24.2" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.0.2", "jest": "^29.7.0", @@ -362,24 +658,19 @@ "typescript": "^5.4.5" }, "peerDependencies": { - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.dev": "2.0.5", + "@microsoft/teams.apps": "*", "@modelcontextprotocol/sdk": "^1.9.0" - }, - "peerDependenciesMeta": { - "@microsoft/teams.dev": { - "optional": true - } } }, "external/mcpclient": { "name": "@microsoft/teams.mcpclient", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", + "dependencies": { + "@microsoft/teams.common": "*" + }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.0.2", "jest": "^29.7.0", @@ -389,15 +680,13 @@ "typescript": "^5.4.5" }, "peerDependencies": { - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.common": "2.0.5", + "@microsoft/teams.ai": "*", "@modelcontextprotocol/sdk": "^1.13.0" } }, "node_modules/@a2a-js/sdk": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@a2a-js/sdk/-/sdk-0.3.4.tgz", - "integrity": "sha512-WXMk/UspvQFxesvb8hXyfPE8d3ibpiRie24Yw/5ruMqNJcdwxjfZ1G0gj6vYE/I9RAZD145CNzedpZA2cLV2JQ==", + "version": "0.3.10", + "license": "Apache-2.0", "dependencies": { "uuid": "^11.1.0" }, @@ -405,35 +694,39 @@ "node": ">=18" }, "peerDependencies": { + "@bufbuild/protobuf": "^2.10.2", + "@grpc/grpc-js": "^1.11.0", "express": "^4.21.2 || ^5.1.0" }, "peerDependenciesMeta": { + "@bufbuild/protobuf": { + "optional": true + }, + "@grpc/grpc-js": { + "optional": true + }, "express": { "optional": true } } }, "node_modules/@azure-rest/core-client": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-2.3.5.tgz", - "integrity": "sha512-vC8sDkT1xH7jx9erJWQqznMhfPY9k+mrM+4R/rAeb+F+KQCohYYmOEAQmT9CEQxStJ3erjbtpN3GMjAS5tdiYg==", + "version": "2.5.1", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.3.0", - "@azure/core-rest-pipeline": "^1.5.0", - "@azure/core-tracing": "^1.0.1", - "@azure/core-util": "^1.0.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/abort-controller": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "license": "MIT", "dependencies": { "tslib": "^2.6.2" @@ -443,41 +736,35 @@ } }, "node_modules/@azure/core-auth": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz", - "integrity": "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==", + "version": "1.10.1", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-util": "^1.11.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/core-client": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.3.tgz", - "integrity": "sha512-/wGw8fJ4mdpJ1Cum7s1S+VQyXt1ihwKLzfabS1O/RDADnmzVc01dHn44qD0BvGH6KlZNzOMW95tEpKqhkCChPA==", + "version": "1.10.1", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.4.0", - "@azure/core-rest-pipeline": "^1.9.1", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.6.1", - "@azure/logger": "^1.0.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/core-http": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-3.0.5.tgz", - "integrity": "sha512-T8r2q/c3DxNu6mEJfPuJtptUVqwchxzjj32gKcnMi06rdiVONS9rar7kT9T2Am+XvER7uOzpsP79WsqNbdgdWg==", "deprecated": "This package is no longer supported. Please refer to https://github.com/Azure/azure-sdk-for-js/blob/490ce4dfc5b98ba290dee3b33a6d0876c5f138e2/sdk/core/README.md", "license": "MIT", "dependencies": { @@ -502,8 +789,6 @@ }, "node_modules/@azure/core-http/node_modules/@azure/abort-controller": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", - "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", "license": "MIT", "dependencies": { "tslib": "^2.2.0" @@ -514,8 +799,6 @@ }, "node_modules/@azure/core-http/node_modules/@azure/core-tracing": { "version": "1.0.0-preview.13", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", - "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==", "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.0.1", @@ -525,63 +808,71 @@ "node": ">=12.0.0" } }, + "node_modules/@azure/core-http/node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/@azure/core-http/node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.19.1.tgz", - "integrity": "sha512-zHeoI3NCs53lLBbWNzQycjnYKsA1CVKlnzSNuSFcUDwBp8HHVObePxrM7HaX+Ha5Ks639H7chNC9HOaIhNS03w==", + "version": "1.22.2", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.8.0", - "@azure/core-tracing": "^1.0.1", - "@azure/core-util": "^1.11.0", - "@azure/logger": "^1.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/core-tracing": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.2.0.tgz", - "integrity": "sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==", + "version": "1.3.1", "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/core-util": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz", - "integrity": "sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==", + "version": "1.13.1", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/identity": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.9.1.tgz", - "integrity": "sha512-986D7Cf1AOwYqSDtO/FnMAyk/Jc8qpftkGsxuehoh4F85MhQ4fICBGX/44+X1y78lN4Sqib3Bsoaoh/FvOGgmg==", + "version": "4.13.0", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -597,72 +888,42 @@ "tslib": "^2.2.0" }, "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/identity/node_modules/@azure/msal-node": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.5.2.tgz", - "integrity": "sha512-mt97ieL+IpD/7Hj7Q6pGTPk3dBgvhkOV1HYyH+PkOakhbOOCEb9flAteDgBfADRXBsYJZT+ZlEbPJa4IDn9HZw==", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "15.5.2", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@azure/identity/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "node": ">=20.0.0" } }, "node_modules/@azure/logger": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.4.tgz", - "integrity": "sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==", + "version": "1.3.0", "license": "MIT", "dependencies": { + "@typespec/ts-http-runtime": "^0.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@azure/msal-browser": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.11.1.tgz", - "integrity": "sha512-jPxASelqmP/0R1jZuYW8cboba95M9jpUi2ZqzgftddlAIRZA9KL/YaESuT55zu9+BIPS5Eo2kuhy3q2jjU3whg==", + "version": "4.29.0", "license": "MIT", "dependencies": { - "@azure/msal-common": "15.5.2" + "@azure/msal-common": "15.15.0" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.5.2.tgz", - "integrity": "sha512-+G85T6oA6i4ubzjOw4BpWd8QCG2FunYN4jaz96gw3SUd8+89vwuiqLg6mtnm/lkPC95bayD+CwuwFn9wvhQGow==", + "version": "15.15.0", "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-node": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.16.2.tgz", - "integrity": "sha512-An7l1hEr0w1HMMh1LU+rtDtqL7/jw74ORlc9Wnh06v7TU/xpG39/Zdr1ZJu3QpjUfKJ+E0/OXMW8DRSWTlh7qQ==", + "version": "3.8.8", "license": "MIT", "dependencies": { - "@azure/msal-common": "14.16.0", + "@azure/msal-common": "15.15.0", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, @@ -670,19 +931,8 @@ "node": ">=16" } }, - "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { - "version": "14.16.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.0.tgz", - "integrity": "sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/@azure/msal-node/node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "license": "MIT", "bin": { "uuid": "dist/bin/uuid" @@ -690,8 +940,6 @@ }, "node_modules/@azure/openai": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@azure/openai/-/openai-2.0.0.tgz", - "integrity": "sha512-zSNhwarYbqg3P048uKMjEjbge41OnAgmiiE1elCHVsuCCXRyz2BXnHMJkW6WR6ZKQy5NHswJNUNSWsuqancqFA==", "license": "MIT", "dependencies": { "@azure-rest/core-client": "^2.2.0", @@ -702,12 +950,10 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -716,9 +962,7 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "version": "7.29.0", "dev": true, "license": "MIT", "engines": { @@ -726,21 +970,19 @@ } }, "node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "version": "7.29.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -756,25 +998,13 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "version": "7.29.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -784,26 +1014,22 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "version": "7.27.3", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -813,29 +1039,17 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", - "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", + "version": "7.28.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.27.0", + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "engines": { @@ -845,20 +1059,8 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-globals": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, "license": "MIT", "engines": { @@ -866,43 +1068,37 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "version": "7.28.5", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -912,22 +1108,18 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.28.6", "dev": true, "license": "MIT", "engines": { @@ -935,15 +1127,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "version": "7.28.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -953,14 +1143,12 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -968,8 +1156,6 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", "engines": { @@ -978,8 +1164,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -987,8 +1171,6 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "engines": { @@ -996,27 +1178,23 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.28.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1027,8 +1205,6 @@ }, "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", "dev": true, "license": "MIT", @@ -1045,8 +1221,6 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "license": "MIT", "dependencies": { @@ -1058,8 +1232,6 @@ }, "node_modules/@babel/plugin-syntax-bigint": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, "license": "MIT", "dependencies": { @@ -1071,8 +1243,6 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "license": "MIT", "dependencies": { @@ -1084,8 +1254,6 @@ }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "license": "MIT", "dependencies": { @@ -1099,13 +1267,11 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "version": "7.28.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1116,8 +1282,6 @@ }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "license": "MIT", "dependencies": { @@ -1129,8 +1293,6 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "license": "MIT", "dependencies": { @@ -1141,13 +1303,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "version": "7.28.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1158,8 +1318,6 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "license": "MIT", "dependencies": { @@ -1171,8 +1329,6 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1184,8 +1340,6 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "license": "MIT", "dependencies": { @@ -1197,8 +1351,6 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "license": "MIT", "dependencies": { @@ -1210,8 +1362,6 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1223,8 +1373,6 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "license": "MIT", "dependencies": { @@ -1236,8 +1384,6 @@ }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "license": "MIT", "dependencies": { @@ -1252,8 +1398,6 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "license": "MIT", "dependencies": { @@ -1267,13 +1411,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "version": "7.28.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1284,8 +1426,6 @@ }, "node_modules/@babel/plugin-transform-react-jsx-self": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", "dev": true, "license": "MIT", "dependencies": { @@ -1300,8 +1440,6 @@ }, "node_modules/@babel/plugin-transform-react-jsx-source": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", "dev": true, "license": "MIT", "dependencies": { @@ -1315,45 +1453,36 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "version": "7.28.6", "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "version": "7.29.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -1361,9 +1490,7 @@ } }, "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.0", "dev": true, "license": "MIT", "dependencies": { @@ -1376,395 +1503,99 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true, "license": "MIT" }, - "node_modules/@changesets/apply-release-plan": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.12.tgz", - "integrity": "sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ==", - "dev": true, + "node_modules/@codemirror/autocomplete": { + "version": "6.20.0", "license": "MIT", "dependencies": { - "@changesets/config": "^3.1.1", - "@changesets/get-version-range-type": "^0.4.0", - "@changesets/git": "^3.0.4", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "detect-indent": "^6.0.0", - "fs-extra": "^7.0.1", - "lodash.startcase": "^4.4.0", - "outdent": "^0.5.0", - "prettier": "^2.7.1", - "resolve-from": "^5.0.0", - "semver": "^7.5.3" + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0" } }, - "node_modules/@changesets/apply-release-plan/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, + "node_modules/@codemirror/commands": { + "version": "6.10.2", "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.4.0", + "@codemirror/view": "^6.27.0", + "@lezer/common": "^1.1.0" } }, - "node_modules/@changesets/assemble-release-plan": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", - "integrity": "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==", - "dev": true, + "node_modules/@codemirror/lang-javascript": { + "version": "6.2.4", "license": "MIT", "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "semver": "^7.5.3" + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.6.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0", + "@lezer/javascript": "^1.0.0" } }, - "node_modules/@changesets/changelog-git": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", - "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", - "dev": true, + "node_modules/@codemirror/lang-json": { + "version": "6.0.2", "license": "MIT", "dependencies": { - "@changesets/types": "^6.1.0" + "@codemirror/language": "^6.0.0", + "@lezer/json": "^1.0.0" } }, - "node_modules/@changesets/cli": { - "version": "2.29.6", - "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.29.6.tgz", - "integrity": "sha512-6qCcVsIG1KQLhpQ5zE8N0PckIx4+9QlHK3z6/lwKnw7Tir71Bjw8BeOZaxA/4Jt00pcgCnCSWZnyuZf5Il05QQ==", - "dev": true, + "node_modules/@codemirror/language": { + "version": "6.12.2", "license": "MIT", "dependencies": { - "@changesets/apply-release-plan": "^7.0.12", - "@changesets/assemble-release-plan": "^6.0.9", - "@changesets/changelog-git": "^0.2.1", - "@changesets/config": "^3.1.1", - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/get-release-plan": "^4.0.13", - "@changesets/git": "^3.0.4", - "@changesets/logger": "^0.1.1", - "@changesets/pre": "^2.0.2", - "@changesets/read": "^0.6.5", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@changesets/write": "^0.4.0", - "@inquirer/external-editor": "^1.0.0", - "@manypkg/get-packages": "^1.1.3", - "ansi-colors": "^4.1.3", - "ci-info": "^3.7.0", - "enquirer": "^2.4.1", - "fs-extra": "^7.0.1", - "mri": "^1.2.0", - "p-limit": "^2.2.0", - "package-manager-detector": "^0.2.0", - "picocolors": "^1.1.0", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "spawndamnit": "^3.0.1", - "term-size": "^2.1.0" - }, - "bin": { - "changeset": "bin.js" + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.5.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" } }, - "node_modules/@changesets/config": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.1.tgz", - "integrity": "sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==", - "dev": true, + "node_modules/@codemirror/lint": { + "version": "6.9.4", "license": "MIT", "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/logger": "^0.1.1", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1", - "micromatch": "^4.0.8" + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.35.0", + "crelt": "^1.0.5" } }, - "node_modules/@changesets/errors": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", - "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", - "dev": true, - "license": "MIT", - "dependencies": { - "extendable-error": "^0.1.5" - } - }, - "node_modules/@changesets/get-dependents-graph": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.3.tgz", - "integrity": "sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "picocolors": "^1.1.0", - "semver": "^7.5.3" - } - }, - "node_modules/@changesets/get-release-plan": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.13.tgz", - "integrity": "sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/assemble-release-plan": "^6.0.9", - "@changesets/config": "^3.1.1", - "@changesets/pre": "^2.0.2", - "@changesets/read": "^0.6.5", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3" - } - }, - "node_modules/@changesets/get-version-range-type": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", - "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@changesets/git": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", - "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/errors": "^0.2.0", - "@manypkg/get-packages": "^1.1.3", - "is-subdir": "^1.1.1", - "micromatch": "^4.0.8", - "spawndamnit": "^3.0.1" - } - }, - "node_modules/@changesets/logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", - "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^1.1.0" - } - }, - "node_modules/@changesets/parse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.1.tgz", - "integrity": "sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/types": "^6.1.0", - "js-yaml": "^3.13.1" - } - }, - "node_modules/@changesets/pre": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", - "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1" - } - }, - "node_modules/@changesets/read": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.5.tgz", - "integrity": "sha512-UPzNGhsSjHD3Veb0xO/MwvasGe8eMyNrR/sT9gR8Q3DhOQZirgKhhXv/8hVsI0QpPjR004Z9iFxoJU6in3uGMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/git": "^3.0.4", - "@changesets/logger": "^0.1.1", - "@changesets/parse": "^0.4.1", - "@changesets/types": "^6.1.0", - "fs-extra": "^7.0.1", - "p-filter": "^2.1.0", - "picocolors": "^1.1.0" - } - }, - "node_modules/@changesets/should-skip-package": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", - "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3" - } - }, - "node_modules/@changesets/types": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", - "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@changesets/write": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.4.0.tgz", - "integrity": "sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/types": "^6.1.0", - "fs-extra": "^7.0.1", - "human-id": "^4.1.1", - "prettier": "^2.7.1" - } - }, - "node_modules/@changesets/write/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/@codemirror/autocomplete": { - "version": "6.18.6", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.6.tgz", - "integrity": "sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==", - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.17.0", - "@lezer/common": "^1.0.0" - } - }, - "node_modules/@codemirror/commands": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.8.1.tgz", - "integrity": "sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==", - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.4.0", - "@codemirror/view": "^6.27.0", - "@lezer/common": "^1.1.0" - } - }, - "node_modules/@codemirror/lang-javascript": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.3.tgz", - "integrity": "sha512-8PR3vIWg7pSu7ur8A07pGiYHgy3hHj+mRYRCSG8q+mPIrl0F02rgpGv+DsQTHRTc30rydOsf5PZ7yjKFg2Ackw==", - "license": "MIT", - "dependencies": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/language": "^6.6.0", - "@codemirror/lint": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.17.0", - "@lezer/common": "^1.0.0", - "@lezer/javascript": "^1.0.0" - } - }, - "node_modules/@codemirror/lang-json": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.1.tgz", - "integrity": "sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==", - "license": "MIT", - "dependencies": { - "@codemirror/language": "^6.0.0", - "@lezer/json": "^1.0.0" - } - }, - "node_modules/@codemirror/language": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.0.tgz", - "integrity": "sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==", - "license": "MIT", - "dependencies": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.23.0", - "@lezer/common": "^1.1.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0", - "style-mod": "^4.0.0" - } - }, - "node_modules/@codemirror/lint": { - "version": "6.8.5", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.5.tgz", - "integrity": "sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==", - "license": "MIT", - "dependencies": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.35.0", - "crelt": "^1.0.5" - } - }, - "node_modules/@codemirror/search": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.10.tgz", - "integrity": "sha512-RMdPdmsrUf53pb2VwflKGHEe1XVM07hI7vV2ntgw1dmqhimpatSJKva4VA9h4TLUDOD4EIF02201oZurpnEFsg==", + "node_modules/@codemirror/search": { + "version": "6.6.0", "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", + "@codemirror/view": "^6.37.0", "crelt": "^1.0.5" } }, "node_modules/@codemirror/state": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", - "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", + "version": "6.5.4", "license": "MIT", "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } }, "node_modules/@codemirror/view": { - "version": "6.36.6", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.36.6.tgz", - "integrity": "sha512-uxugGLet+Nzp0Jcit8Hn3LypM8ioMLKTsdf8FRoT3HWvZtb9GhaWMe0Cc15rz90Ljab4YFJiAulmIVB74OY0IQ==", + "version": "6.39.15", "license": "MIT", "dependencies": { "@codemirror/state": "^6.5.0", + "crelt": "^1.0.6", "style-mod": "^4.1.0", "w3c-keyname": "^2.2.4" } }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "license": "MIT", "dependencies": { @@ -1776,8 +1607,6 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1787,8 +1616,6 @@ }, "node_modules/@ctrl/tinycolor": { "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", - "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", "license": "MIT", "engines": { "node": ">=10" @@ -1796,14 +1623,10 @@ }, "node_modules/@emotion/hash": { "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", - "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz", - "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==", + "version": "0.27.3", "cpu": [ "ppc64" ], @@ -1818,9 +1641,7 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz", - "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==", + "version": "0.27.3", "cpu": [ "arm" ], @@ -1835,9 +1656,7 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz", - "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==", + "version": "0.27.3", "cpu": [ "arm64" ], @@ -1852,9 +1671,7 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz", - "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==", + "version": "0.27.3", "cpu": [ "x64" ], @@ -1869,9 +1686,7 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz", - "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==", + "version": "0.27.3", "cpu": [ "arm64" ], @@ -1886,9 +1701,7 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz", - "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==", + "version": "0.27.3", "cpu": [ "x64" ], @@ -1903,9 +1716,7 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz", - "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==", + "version": "0.27.3", "cpu": [ "arm64" ], @@ -1920,9 +1731,7 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz", - "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==", + "version": "0.27.3", "cpu": [ "x64" ], @@ -1937,9 +1746,7 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz", - "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==", + "version": "0.27.3", "cpu": [ "arm" ], @@ -1954,9 +1761,7 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz", - "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==", + "version": "0.27.3", "cpu": [ "arm64" ], @@ -1971,9 +1776,7 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz", - "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==", + "version": "0.27.3", "cpu": [ "ia32" ], @@ -1988,9 +1791,7 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz", - "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==", + "version": "0.27.3", "cpu": [ "loong64" ], @@ -2005,9 +1806,7 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz", - "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==", + "version": "0.27.3", "cpu": [ "mips64el" ], @@ -2022,9 +1821,7 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz", - "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==", + "version": "0.27.3", "cpu": [ "ppc64" ], @@ -2039,9 +1836,7 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz", - "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==", + "version": "0.27.3", "cpu": [ "riscv64" ], @@ -2056,9 +1851,7 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz", - "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==", + "version": "0.27.3", "cpu": [ "s390x" ], @@ -2073,9 +1866,7 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz", - "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==", + "version": "0.27.3", "cpu": [ "x64" ], @@ -2090,9 +1881,7 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz", - "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==", + "version": "0.27.3", "cpu": [ "arm64" ], @@ -2107,9 +1896,7 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz", - "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==", + "version": "0.27.3", "cpu": [ "x64" ], @@ -2124,9 +1911,7 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz", - "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==", + "version": "0.27.3", "cpu": [ "arm64" ], @@ -2141,9 +1926,7 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz", - "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==", + "version": "0.27.3", "cpu": [ "x64" ], @@ -2157,10 +1940,23 @@ "node": ">=18" } }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz", - "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==", + "version": "0.27.3", "cpu": [ "x64" ], @@ -2175,9 +1971,7 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz", - "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==", + "version": "0.27.3", "cpu": [ "arm64" ], @@ -2192,9 +1986,7 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz", - "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==", + "version": "0.27.3", "cpu": [ "ia32" ], @@ -2209,9 +2001,7 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz", - "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==", + "version": "0.27.3", "cpu": [ "x64" ], @@ -2226,9 +2016,7 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz", - "integrity": "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==", + "version": "4.9.1", "dev": true, "license": "MIT", "dependencies": { @@ -2246,8 +2034,6 @@ }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2258,9 +2044,7 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", "dev": true, "license": "MIT", "engines": { @@ -2268,13 +2052,11 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "version": "0.21.1", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.6", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -2282,44 +2064,19 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@eslint/config-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "version": "0.4.2", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "version": "0.17.0", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2330,20 +2087,18 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "version": "3.3.4", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", + "ajv": "^6.14.0", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.3", "strip-json-comments": "^3.1.1" }, "engines": { @@ -2353,78 +2108,19 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "engines": { + "node": ">=18" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@eslint/js": { - "version": "9.34.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.34.0.tgz", - "integrity": "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==", + "version": "9.39.3", "dev": true, "license": "MIT", "engines": { @@ -2435,9 +2131,7 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "version": "2.1.7", "dev": true, "license": "Apache-2.0", "engines": { @@ -2445,13 +2139,11 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "version": "0.4.1", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.2", + "@eslint/core": "^0.17.0", "levn": "^0.4.1" }, "engines": { @@ -2486,6 +2178,10 @@ "resolved": "examples/echo", "link": true }, + "node_modules/@examples/http-adapters": { + "resolved": "examples/http-adapters", + "link": true + }, "node_modules/@examples/lights": { "resolved": "examples/lights", "link": true @@ -2498,49 +2194,58 @@ "resolved": "examples/mcpclient", "link": true }, + "node_modules/@examples/meetings": { + "resolved": "examples/meetings", + "link": true + }, "node_modules/@examples/message-extensions": { "resolved": "examples/message-extensions", "link": true }, + "node_modules/@examples/proactive-messaging": { + "resolved": "examples/proactive-messaging", + "link": true + }, + "node_modules/@examples/reactions": { + "resolved": "examples/reactions", + "link": true + }, "node_modules/@examples/tab": { "resolved": "examples/tab", "link": true }, + "node_modules/@examples/targeted-messages": { + "resolved": "examples/targeted-messages", + "link": true + }, "node_modules/@floating-ui/core": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", - "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "version": "1.7.4", "license": "MIT", "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "node_modules/@floating-ui/devtools": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@floating-ui/devtools/-/devtools-0.2.1.tgz", - "integrity": "sha512-8PHJLbD6VhBh+LJ1uty/Bz30qs02NXCE5u8WpOhSewlYXUWl03GNXknr9AS2yaAWJEQaY27x7eByJs44gODBcw==", + "version": "0.2.3", + "license": "MIT", "peerDependencies": { - "@floating-ui/dom": ">=1.5.4" + "@floating-ui/dom": "^1.0.0" } }, "node_modules/@floating-ui/dom": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", - "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "version": "1.7.5", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.3", + "@floating-ui/core": "^1.7.4", "@floating-ui/utils": "^0.2.10" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", - "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "version": "2.1.7", "dev": true, "license": "MIT", "dependencies": { - "@floating-ui/dom": "^1.7.4" + "@floating-ui/dom": "^1.7.5" }, "peerDependencies": { "react": ">=16.8.0", @@ -2549,1513 +2254,1408 @@ }, "node_modules/@floating-ui/utils": { "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", "license": "MIT" }, "node_modules/@fluentui/keyboard-keys": { "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@fluentui/keyboard-keys/-/keyboard-keys-9.0.8.tgz", - "integrity": "sha512-iUSJUUHAyTosnXK8O2Ilbfxma+ZyZPMua5vB028Ys96z80v+LFwntoehlFsdH3rMuPsA8GaC1RE7LMezwPBPdw==", "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.1" } }, "node_modules/@fluentui/priority-overflow": { - "version": "9.1.15", - "resolved": "https://registry.npmjs.org/@fluentui/priority-overflow/-/priority-overflow-9.1.15.tgz", - "integrity": "sha512-/3jPBBq64hRdA416grVj+ZeMBUIaKZk2S5HiRg7CKCAV1JuyF84Do0rQI6ns8Vb9XOGuc4kurMcL/UEftoEVrg==", + "version": "9.3.0", "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.1" } }, "node_modules/@fluentui/react-accordion": { - "version": "9.6.8", - "resolved": "https://registry.npmjs.org/@fluentui/react-accordion/-/react-accordion-9.6.8.tgz", - "integrity": "sha512-KE3YNGPTsN7tbnAfgbs7THAFfURj+yvO2GgEIVr++2xTgHXR7GEwM7RrbE1ZbJZM7gbeGE5rCg006OBfE4qbuQ==", + "version": "9.9.1", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.14.6", - "@fluentui/react-context-selector": "^9.1.76", + "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-context-selector": "^9.2.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-motion": "^9.7.2", - "@fluentui/react-motion-components-preview": "^0.4.9", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-motion": "^9.12.0", + "@fluentui/react-motion-components-preview": "^0.15.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-alert": { - "version": "9.0.0-beta.124", - "resolved": "https://registry.npmjs.org/@fluentui/react-alert/-/react-alert-9.0.0-beta.124.tgz", - "integrity": "sha512-yFBo3B5H9hnoaXxlkuz8wRz04DEyQ+ElYA/p5p+Vojf19Zuta8DmFZZ6JtWdtxcdnnQ4LvAfC5OYYlzdReozPA==", + "version": "9.0.0-beta.134", "license": "MIT", "dependencies": { - "@fluentui/react-avatar": "^9.6.29", - "@fluentui/react-button": "^9.3.83", + "@fluentui/react-avatar": "^9.10.1", + "@fluentui/react-button": "^9.8.2", "@fluentui/react-icons": "^2.0.239", - "@fluentui/react-jsx-runtime": "^9.0.39", - "@fluentui/react-tabster": "^9.21.5", - "@fluentui/react-theme": "^9.1.19", - "@fluentui/react-utilities": "^9.18.10", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-aria": { - "version": "9.14.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-aria/-/react-aria-9.14.6.tgz", - "integrity": "sha512-3vaEzujXdQxhYFzRXnkDNDImbMS0FXa8pq9WPo0JiKThsQp1QQQzdQbFsY7vfHd9aWjjWyCrRDMH25H37ZZ06w==", + "version": "9.17.10", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-utilities": "^9.19.0", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-utilities": "^9.26.2", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-avatar": { - "version": "9.7.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-avatar/-/react-avatar-9.7.6.tgz", - "integrity": "sha512-T4W+CaGjdkWgfiI7Me+wtFj2ewZFH+GpZbSexatqDjoq5ywrFOZf+aADtaHuocHcH7hx/U3AXMvTTQyzoDMuRg==", + "version": "9.10.1", "license": "MIT", "dependencies": { - "@fluentui/react-badge": "^9.2.54", - "@fluentui/react-context-selector": "^9.1.76", + "@fluentui/react-badge": "^9.4.15", + "@fluentui/react-context-selector": "^9.2.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-popover": "^9.10.6", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-tooltip": "^9.6.6", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-popover": "^9.13.2", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-tooltip": "^9.9.2", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-badge": { - "version": "9.2.54", - "resolved": "https://registry.npmjs.org/@fluentui/react-badge/-/react-badge-9.2.54.tgz", - "integrity": "sha512-2PU0UA0VDz/XwbYKmMmPQKg4ykYHoUsgs3oZIqdwMPM3zxuhclsFEFx2xj4nxpMKiGCTBSBTM0fdOEQwRrbluQ==", + "version": "9.4.15", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-breadcrumb": { - "version": "9.1.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-breadcrumb/-/react-breadcrumb-9.1.6.tgz", - "integrity": "sha512-61oH9e/6kBRhnDeSStWe0AMS/9I9nkSzTFEKHEWJDnZYPFIhvlzn56TcAtuzVUYgHV1Jsk5PRLd9aQtJL1ENYw==", + "version": "9.3.17", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.14.6", - "@fluentui/react-button": "^9.4.6", + "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-button": "^9.8.2", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-link": "^9.4.6", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-link": "^9.7.4", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-button": { - "version": "9.4.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-button/-/react-button-9.4.6.tgz", - "integrity": "sha512-1G92nGpWOYQ7vR+3g0Y0RLeAlqpZnpHVhXpQG504+yDGIAsn76I1zt+XcD9/2uaDmoH4tXiHS1SPtShujYVXjA==", + "version": "9.8.2", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.14.6", + "@fluentui/react-aria": "^9.17.10", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-card": { - "version": "9.2.5", - "resolved": "https://registry.npmjs.org/@fluentui/react-card/-/react-card-9.2.5.tgz", - "integrity": "sha512-ODgwhKt+GL0TbLLRb3kHuf4ftCdcat3uNdN6mcVrqsL3+elJONvd7OA02jFbU/WFVR3IKOx6dUjRYNQYol0CiA==", + "version": "9.5.11", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-text": "^9.4.36", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-text": "^9.6.15", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-carousel": { - "version": "9.6.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-carousel/-/react-carousel-9.6.6.tgz", - "integrity": "sha512-/08DyIdg+wn72D+ShnOUQXHqMgAsFUIlCMmyBvNlMImFIDxE6NjVXy+5Yes5mpsJYGWetmCAcECf+SQdgDsU1w==", + "version": "9.9.3", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.14.6", - "@fluentui/react-button": "^9.4.6", - "@fluentui/react-context-selector": "^9.1.76", + "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-button": "^9.8.2", + "@fluentui/react-context-selector": "^9.2.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-tooltip": "^9.6.6", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-tooltip": "^9.9.2", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "embla-carousel": "^8.5.1", "embla-carousel-autoplay": "^8.5.1", "embla-carousel-fade": "^8.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-checkbox": { - "version": "9.3.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-checkbox/-/react-checkbox-9.3.6.tgz", - "integrity": "sha512-70HiPwnR5Ed59bulKs733xTFtm9JHQCJlaJc+l9LR6jpiZucvMqNGDfpYDqvFTbCm+FCrvo6gxmKfADAHxANWw==", + "version": "9.5.15", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.2.6", + "@fluentui/react-field": "^9.4.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-label": "^9.1.87", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-label": "^9.3.15", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-color-picker": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@fluentui/react-color-picker/-/react-color-picker-9.0.4.tgz", - "integrity": "sha512-srbVlDDo3iRcjBMH55MPKiDchIN9SWwZfvE4gpJ1PE80Bs8Frjzk1m1iRO7ZkEtedhEqvVzaWYN5BvAQE8S5qg==", + "version": "9.2.15", "license": "MIT", "dependencies": { "@ctrl/tinycolor": "^3.3.4", - "@fluentui/react-context-selector": "^9.1.76", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-combobox": { - "version": "9.14.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-combobox/-/react-combobox-9.14.6.tgz", - "integrity": "sha512-JGkc5wW+NNlMs1P+UIMLWCzYux5SMgFMLjXuXEFP52hX8ka9Nk7l8WSTW58LRsccT5Mf6JXDiSs4CK5D6VXBOA==", + "version": "9.16.16", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.14.6", - "@fluentui/react-context-selector": "^9.1.76", - "@fluentui/react-field": "^9.2.6", + "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-field": "^9.4.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-portal": "^9.5.6", - "@fluentui/react-positioning": "^9.16.7", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-portal": "^9.8.11", + "@fluentui/react-positioning": "^9.21.0", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-components": { - "version": "9.63.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-components/-/react-components-9.63.0.tgz", - "integrity": "sha512-2Wka+gKv70FbSWp/FUASfNZ4QctBUIl87O44B41VEcX7/ucOsHhF4yVB4KS8dgxnkL30M9mX8COu5c2bORDq4A==", - "license": "MIT", - "dependencies": { - "@fluentui/react-accordion": "^9.6.8", - "@fluentui/react-alert": "9.0.0-beta.124", - "@fluentui/react-aria": "^9.14.6", - "@fluentui/react-avatar": "^9.7.6", - "@fluentui/react-badge": "^9.2.54", - "@fluentui/react-breadcrumb": "^9.1.6", - "@fluentui/react-button": "^9.4.6", - "@fluentui/react-card": "^9.2.5", - "@fluentui/react-carousel": "^9.6.6", - "@fluentui/react-checkbox": "^9.3.6", - "@fluentui/react-color-picker": "^9.0.4", - "@fluentui/react-combobox": "^9.14.6", - "@fluentui/react-dialog": "^9.12.8", - "@fluentui/react-divider": "^9.2.86", - "@fluentui/react-drawer": "^9.7.8", - "@fluentui/react-field": "^9.2.6", - "@fluentui/react-image": "^9.1.84", - "@fluentui/react-infobutton": "9.0.0-beta.102", - "@fluentui/react-infolabel": "^9.2.0", - "@fluentui/react-input": "^9.5.6", - "@fluentui/react-label": "^9.1.87", - "@fluentui/react-link": "^9.4.6", - "@fluentui/react-list": "^9.1.6", - "@fluentui/react-menu": "^9.16.6", - "@fluentui/react-message-bar": "^9.4.7", - "@fluentui/react-motion": "^9.7.2", - "@fluentui/react-overflow": "^9.3.6", - "@fluentui/react-persona": "^9.3.6", - "@fluentui/react-popover": "^9.10.6", - "@fluentui/react-portal": "^9.5.6", - "@fluentui/react-positioning": "^9.16.7", - "@fluentui/react-progress": "^9.2.6", - "@fluentui/react-provider": "^9.20.6", - "@fluentui/react-radio": "^9.3.6", - "@fluentui/react-rating": "^9.1.6", - "@fluentui/react-search": "^9.1.6", - "@fluentui/react-select": "^9.2.6", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-skeleton": "^9.2.6", - "@fluentui/react-slider": "^9.3.7", - "@fluentui/react-spinbutton": "^9.3.6", - "@fluentui/react-spinner": "^9.5.11", - "@fluentui/react-swatch-picker": "^9.2.6", - "@fluentui/react-switch": "^9.2.6", - "@fluentui/react-table": "^9.16.6", - "@fluentui/react-tabs": "^9.7.6", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-tag-picker": "^9.5.6", - "@fluentui/react-tags": "^9.5.4", - "@fluentui/react-teaching-popover": "^9.4.5", - "@fluentui/react-text": "^9.4.36", - "@fluentui/react-textarea": "^9.4.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-toast": "^9.4.8", - "@fluentui/react-toolbar": "^9.4.5", - "@fluentui/react-tooltip": "^9.6.6", - "@fluentui/react-tree": "^9.10.9", - "@fluentui/react-utilities": "^9.19.0", - "@fluentui/react-virtualizer": "9.0.0-alpha.96", - "@griffel/react": "^1.5.22", + "version": "9.73.1", + "license": "MIT", + "dependencies": { + "@fluentui/react-accordion": "^9.9.1", + "@fluentui/react-alert": "9.0.0-beta.134", + "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-avatar": "^9.10.1", + "@fluentui/react-badge": "^9.4.15", + "@fluentui/react-breadcrumb": "^9.3.17", + "@fluentui/react-button": "^9.8.2", + "@fluentui/react-card": "^9.5.11", + "@fluentui/react-carousel": "^9.9.3", + "@fluentui/react-checkbox": "^9.5.15", + "@fluentui/react-color-picker": "^9.2.15", + "@fluentui/react-combobox": "^9.16.16", + "@fluentui/react-dialog": "^9.17.1", + "@fluentui/react-divider": "^9.6.2", + "@fluentui/react-drawer": "^9.11.4", + "@fluentui/react-field": "^9.4.15", + "@fluentui/react-image": "^9.3.15", + "@fluentui/react-infobutton": "9.0.0-beta.111", + "@fluentui/react-infolabel": "^9.4.16", + "@fluentui/react-input": "^9.7.15", + "@fluentui/react-label": "^9.3.15", + "@fluentui/react-link": "^9.7.4", + "@fluentui/react-list": "^9.6.10", + "@fluentui/react-menu": "^9.21.2", + "@fluentui/react-message-bar": "^9.6.19", + "@fluentui/react-motion": "^9.12.0", + "@fluentui/react-nav": "^9.3.19", + "@fluentui/react-overflow": "^9.7.1", + "@fluentui/react-persona": "^9.6.1", + "@fluentui/react-popover": "^9.13.2", + "@fluentui/react-portal": "^9.8.11", + "@fluentui/react-positioning": "^9.21.0", + "@fluentui/react-progress": "^9.4.15", + "@fluentui/react-provider": "^9.22.15", + "@fluentui/react-radio": "^9.5.15", + "@fluentui/react-rating": "^9.3.15", + "@fluentui/react-search": "^9.3.15", + "@fluentui/react-select": "^9.4.15", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-skeleton": "^9.4.15", + "@fluentui/react-slider": "^9.5.15", + "@fluentui/react-spinbutton": "^9.5.15", + "@fluentui/react-spinner": "^9.7.15", + "@fluentui/react-swatch-picker": "^9.4.15", + "@fluentui/react-switch": "^9.5.4", + "@fluentui/react-table": "^9.19.9", + "@fluentui/react-tabs": "^9.11.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tag-picker": "^9.8.0", + "@fluentui/react-tags": "^9.7.16", + "@fluentui/react-teaching-popover": "^9.6.17", + "@fluentui/react-text": "^9.6.15", + "@fluentui/react-textarea": "^9.6.15", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-toast": "^9.7.13", + "@fluentui/react-toolbar": "^9.7.3", + "@fluentui/react-tooltip": "^9.9.2", + "@fluentui/react-tree": "^9.15.11", + "@fluentui/react-utilities": "^9.26.2", + "@fluentui/react-virtualizer": "9.0.0-alpha.111", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-context-selector": { - "version": "9.1.76", - "resolved": "https://registry.npmjs.org/@fluentui/react-context-selector/-/react-context-selector-9.1.76.tgz", - "integrity": "sha512-GmkHiLuMBzYOVvPkXNhMJTusx9hf43+VizFjAhSfZWOnNwLjiekjDocs7S2XD0f3MmcVx+aB2tRdTDHxGAF/1A==", + "version": "9.2.15", "license": "MIT", "dependencies": { - "@fluentui/react-utilities": "^9.19.0", + "@fluentui/react-utilities": "^9.26.2", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0", - "scheduler": ">=0.19.0 <=0.23.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0", + "scheduler": ">=0.19.0" } }, "node_modules/@fluentui/react-dialog": { - "version": "9.12.8", - "resolved": "https://registry.npmjs.org/@fluentui/react-dialog/-/react-dialog-9.12.8.tgz", - "integrity": "sha512-bfZehsH5ejXc8qO5SZdu50siusz3VhpP1imCVSz92cwsyowjOaGX8DAjfbvb+QfNT/0RYqqdveCXTLPVC7SFWQ==", + "version": "9.17.1", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.14.6", - "@fluentui/react-context-selector": "^9.1.76", + "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-context-selector": "^9.2.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-motion": "^9.7.2", - "@fluentui/react-motion-components-preview": "^0.4.9", - "@fluentui/react-portal": "^9.5.6", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-motion": "^9.12.0", + "@fluentui/react-motion-components-preview": "^0.15.1", + "@fluentui/react-portal": "^9.8.11", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-divider": { - "version": "9.2.86", - "resolved": "https://registry.npmjs.org/@fluentui/react-divider/-/react-divider-9.2.86.tgz", - "integrity": "sha512-8hzwDVdW7CkumW8XU16lsrrg6s0tNAIWdsFC4Utfb/BL2xgfJRdg/0q6Dzw12uhQHtssC3pKNQV0mp4ia0oqww==", + "version": "9.6.2", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-drawer": { - "version": "9.7.8", - "resolved": "https://registry.npmjs.org/@fluentui/react-drawer/-/react-drawer-9.7.8.tgz", - "integrity": "sha512-s9epUHmw/MrkVEpjzZJcdwjYSx2dVM7Uf9deHA//+dgHCM0Yybmn6vWJ+OArNkzdpYHLBuG3Cwk07tnQqGJx2Q==", - "license": "MIT", - "dependencies": { - "@fluentui/react-dialog": "^9.12.8", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-motion": "^9.7.2", - "@fluentui/react-portal": "^9.5.6", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "version": "9.11.4", + "license": "MIT", + "dependencies": { + "@fluentui/react-dialog": "^9.17.1", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-motion": "^9.12.0", + "@fluentui/react-motion-components-preview": "^0.15.1", + "@fluentui/react-portal": "^9.8.11", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-field": { - "version": "9.2.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-field/-/react-field-9.2.6.tgz", - "integrity": "sha512-C+x+96pRgpx1ib08krazPdYn7+lgD7kDGNlvadmUPM05Zm68Zm2mytMjZ/iy50N/iydozmbLG/i930LVUAF7/g==", + "version": "9.4.15", "license": "MIT", "dependencies": { - "@fluentui/react-context-selector": "^9.1.76", + "@fluentui/react-context-selector": "^9.2.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-label": "^9.1.87", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-label": "^9.3.15", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-icons": { - "version": "2.0.298", - "resolved": "https://registry.npmjs.org/@fluentui/react-icons/-/react-icons-2.0.298.tgz", - "integrity": "sha512-4bLyZsLtdpS1634ptlBQeoEDlsg//61s8Lp8RlM+TyBgXaIONS9KIlRiujlrGJyuksDujq2V+uEfpqAGrkAHtQ==", + "version": "2.0.319", "license": "MIT", "dependencies": { "@griffel/react": "^1.0.0", "tslib": "^2.1.0" }, "peerDependencies": { - "react": ">=16.8.0 <19.0.0" + "react": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-image": { - "version": "9.1.84", - "resolved": "https://registry.npmjs.org/@fluentui/react-image/-/react-image-9.1.84.tgz", - "integrity": "sha512-+8X9IPtNi+RLsSJEIODUfnnalPXLJpfqSyyjrVcm/xjEasCm77F1kMSzCGiHbFYvz7hq5g5I4B/OH4TjL+fcqg==", + "version": "9.3.15", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-infobutton": { - "version": "9.0.0-beta.102", - "resolved": "https://registry.npmjs.org/@fluentui/react-infobutton/-/react-infobutton-9.0.0-beta.102.tgz", - "integrity": "sha512-3kA4F0Vga8Ds6JGlBajLCCDOo/LmPuS786Wg7ui4ZTDYVIMzy1yp2XuVcZniifBFvEp0HQCUoDPWUV0VI3FfzQ==", + "version": "9.0.0-beta.111", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.237", - "@fluentui/react-jsx-runtime": "^9.0.36", - "@fluentui/react-label": "^9.1.68", - "@fluentui/react-popover": "^9.9.6", - "@fluentui/react-tabster": "^9.21.0", - "@fluentui/react-theme": "^9.1.19", - "@fluentui/react-utilities": "^9.18.7", - "@griffel/react": "^1.5.14", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-label": "^9.3.15", + "@fluentui/react-popover": "^9.13.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-infolabel": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-infolabel/-/react-infolabel-9.2.0.tgz", - "integrity": "sha512-lNxcGj2kcpykdoOW9HSielq7o30RI2vI5LTy4pgd5OQ7/1ffik6+ioKPjylnIV6nIPgv035x4Pf/8s9B6m0+oA==", + "version": "9.4.16", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-label": "^9.1.87", - "@fluentui/react-popover": "^9.10.6", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-label": "^9.3.15", + "@fluentui/react-popover": "^9.13.2", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.8.0 <20.0.0", + "@types/react-dom": ">=16.8.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-input": { - "version": "9.5.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-input/-/react-input-9.5.6.tgz", - "integrity": "sha512-qegsdTawoewipYPYKfuYm21p5VZ59Yl33ofQiGoUgY03r/ddylHenWIOLdFyuUuPXBv2m/ESMCL1MZaiDUPDFg==", + "version": "9.7.15", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.2.6", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-field": "^9.4.15", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-jsx-runtime": { - "version": "9.0.54", - "resolved": "https://registry.npmjs.org/@fluentui/react-jsx-runtime/-/react-jsx-runtime-9.0.54.tgz", - "integrity": "sha512-zSkP9X/bAFg17QUDBs4bnbDUgeQSpSBVbH4nKYa3cZb78vV3e3m3nyADBvb97NYkywyd7CfIXq8iTpDWVEoWTw==", + "version": "9.4.1", "license": "MIT", "dependencies": { - "@fluentui/react-utilities": "^9.19.0", - "@swc/helpers": "^0.5.1", - "react-is": "^17.0.2" + "@fluentui/react-utilities": "^9.26.2", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "react": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "react": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-label": { - "version": "9.1.87", - "resolved": "https://registry.npmjs.org/@fluentui/react-label/-/react-label-9.1.87.tgz", - "integrity": "sha512-vfUppmSWkpwXztHU21oGcduYQ9jldkPrFpl+/zWmbiOia5CKTMqJtHqLJMMe/W1uoNKqoNU37uVp3bZgIWUHJg==", + "version": "9.3.15", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-link": { - "version": "9.4.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-link/-/react-link-9.4.6.tgz", - "integrity": "sha512-PuOyp8JObLWzvUsK8PKjqITtwdcRxonEUxOztvv3HPAyE11EtgdvPKEhm5cQPmXN/EA/D2/Dk80PHLeNRzVaZQ==", + "version": "9.7.4", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-list": { - "version": "9.1.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-list/-/react-list-9.1.6.tgz", - "integrity": "sha512-Sgl0wVQnJrKFRh4AERtB3eyJERDkSBhH4dGz+KaPaltItWe/0g2/VOqNSOk9oaG3rka7BYSeU6pLUf5AwkqMgA==", + "version": "9.6.10", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-checkbox": "^9.3.6", - "@fluentui/react-context-selector": "^9.1.76", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-checkbox": "^9.5.15", + "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.8.0 <20.0.0", + "@types/react-dom": ">=16.8.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-menu": { - "version": "9.16.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-menu/-/react-menu-9.16.6.tgz", - "integrity": "sha512-qiVoje/i8Pj0joZN/uaJd6r0H9qZTgjAEgsnJc32HEXQuX3HDGkxdxiCES+h24a8Alu09ELwVJAzdbWvedCqug==", + "version": "9.21.2", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.14.6", - "@fluentui/react-context-selector": "^9.1.76", + "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-context-selector": "^9.2.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-portal": "^9.5.6", - "@fluentui/react-positioning": "^9.16.7", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-portal": "^9.8.11", + "@fluentui/react-positioning": "^9.21.0", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-message-bar": { - "version": "9.4.7", - "resolved": "https://registry.npmjs.org/@fluentui/react-message-bar/-/react-message-bar-9.4.7.tgz", - "integrity": "sha512-9XevlyC5Kr7oVBMo8Dd9ddw8Fmgq/yLN19zz+jyHzPGZMWU+BC40LM/w8l11WdgqN6ij5LZewq9pElMRMJIKkw==", + "version": "9.6.19", "license": "MIT", "dependencies": { - "@fluentui/react-button": "^9.4.6", + "@fluentui/react-button": "^9.8.2", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-link": "^9.4.6", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", - "@swc/helpers": "^0.5.1", - "react-transition-group": "^4.4.1" + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-link": "^9.7.4", + "@fluentui/react-motion": "^9.12.0", + "@fluentui/react-motion-components-preview": "^0.15.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.8.0 <20.0.0", + "@types/react-dom": ">=16.8.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-motion": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@fluentui/react-motion/-/react-motion-9.7.2.tgz", - "integrity": "sha512-xUDkTNPsXKZIlk+Xr+uozdEmKfZ3iNE7dXUAPOgX5rntdMS50JZf4ggyaKdSJsuOVQNqWAoEcCNYLISroDw07g==", + "version": "9.12.0", "license": "MIT", "dependencies": { - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-utilities": "^9.19.0", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-utilities": "^9.26.2", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.8.0 <20.0.0", + "@types/react-dom": ">=16.8.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-motion-components-preview": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/@fluentui/react-motion-components-preview/-/react-motion-components-preview-0.4.9.tgz", - "integrity": "sha512-sMtCqgmPHclfo6EqeIZmtXqJt+1fJn0Bo7ORsayXRJvjrmf8buDFnCJCjzYPNUR3npy9GFedMqmIkC6ovKkV0w==", + "version": "0.15.1", "license": "MIT", "dependencies": { "@fluentui/react-motion": "*", + "@fluentui/react-utilities": "*", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, - "node_modules/@fluentui/react-overflow": { - "version": "9.3.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-overflow/-/react-overflow-9.3.6.tgz", - "integrity": "sha512-yyYX+6jLDyWwZg2G3r4gTxziaT70U9pdRUO1oEVE6Sv1xvMsQGfRQth4khl6OihB1fAFv4mAyx7NTX94D8RYhw==", + "node_modules/@fluentui/react-nav": { + "version": "9.3.19", "license": "MIT", "dependencies": { - "@fluentui/priority-overflow": "^9.1.15", - "@fluentui/react-context-selector": "^9.1.76", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-button": "^9.8.2", + "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-divider": "^9.6.2", + "@fluentui/react-drawer": "^9.11.4", + "@fluentui/react-icons": "^2.0.245", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-motion": "^9.12.0", + "@fluentui/react-motion-components-preview": "^0.15.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-tooltip": "^9.9.2", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, - "node_modules/@fluentui/react-persona": { - "version": "9.3.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-persona/-/react-persona-9.3.6.tgz", - "integrity": "sha512-EJZk6ZANrWoZ+lGvjW+xXuj5AGu5uNT6LiBo1H3SM6ug/eldz32Pa+UXYPU6sVEW0T8+wUCvPZmhgMnahELSew==", - "license": "MIT", - "dependencies": { - "@fluentui/react-avatar": "^9.7.6", - "@fluentui/react-badge": "^9.2.54", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "node_modules/@fluentui/react-overflow": { + "version": "9.7.1", + "license": "MIT", + "dependencies": { + "@fluentui/priority-overflow": "^9.3.0", + "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, - "node_modules/@fluentui/react-popover": { - "version": "9.10.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-popover/-/react-popover-9.10.6.tgz", - "integrity": "sha512-ddYAbytBGukB2EgcjcMV7q7A8Yh6tmWk8Eg9m1O0rAnB/8xlkuG8BLAN98S4kAGsmrxX2GMb1R3NBBFr+yMdGA==", + "node_modules/@fluentui/react-persona": { + "version": "9.6.1", "license": "MIT", "dependencies": { - "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.14.6", - "@fluentui/react-context-selector": "^9.1.76", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-portal": "^9.5.6", - "@fluentui/react-positioning": "^9.16.7", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-avatar": "^9.10.1", + "@fluentui/react-badge": "^9.4.15", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" + } + }, + "node_modules/@fluentui/react-popover": { + "version": "9.13.2", + "license": "MIT", + "dependencies": { + "@fluentui/keyboard-keys": "^9.0.8", + "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-portal": "^9.8.11", + "@fluentui/react-positioning": "^9.21.0", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", + "@swc/helpers": "^0.5.1" + }, + "peerDependencies": { + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-portal": { - "version": "9.5.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-portal/-/react-portal-9.5.6.tgz", - "integrity": "sha512-mAZ5sVf+2TiG5BKOo7Vv88+UeBZEeVGnTZcI6U2iggB7LLzPQdl3Bw+w8QUMBO9PHS/QtzliTqeGpt2QbtMyxw==", + "version": "9.8.11", "license": "MIT", "dependencies": { - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", - "@swc/helpers": "^0.5.1", - "use-disposable": "^1.0.1" + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", + "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-positioning": { - "version": "9.16.7", - "resolved": "https://registry.npmjs.org/@fluentui/react-positioning/-/react-positioning-9.16.7.tgz", - "integrity": "sha512-31i2VdDegR5NsHiQxPP7pWQz4u8lkQq9T1rUFHUUtT7OLr3vOcKf0dGWIeMfZ3LzIv+aCX/P3d2bwEiydCeXuA==", + "version": "9.21.0", "license": "MIT", "dependencies": { - "@floating-ui/devtools": "0.2.1", + "@floating-ui/devtools": "^0.2.3", "@floating-ui/dom": "^1.6.12", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", - "@swc/helpers": "^0.5.1" + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", + "@swc/helpers": "^0.5.1", + "use-sync-external-store": "^1.2.0" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-progress": { - "version": "9.2.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-progress/-/react-progress-9.2.6.tgz", - "integrity": "sha512-I3zTci64PskUGMS/2tnR3nw5hKsBKu5S7PEiCySUoy+fGSFLKGWaUC0G68EdmFCIwa4AIHG66dUyyTfr/Hjfzg==", + "version": "9.4.15", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.2.6", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-field": "^9.4.15", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-provider": { - "version": "9.20.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-provider/-/react-provider-9.20.6.tgz", - "integrity": "sha512-yxMWLP1SZMKVLSuE4Z4617DpbzcvItjOvQl/MOiaQHdC6zfq6X+1Ud4thH49o42KIUoIeWsCBSsEyaDAdYBUvg==", + "version": "9.22.15", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", "@griffel/core": "^1.16.0", - "@griffel/react": "^1.5.22", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-radio": { - "version": "9.3.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-radio/-/react-radio-9.3.6.tgz", - "integrity": "sha512-cOZzd8lN1NCVwKnkepTi9B58mEJdds2wJH8veqLv9cbNceD4Bju53xTr2UG9nIXugwdV85tptYU/o0a4oakIRA==", - "license": "MIT", - "dependencies": { - "@fluentui/react-field": "^9.2.6", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-label": "^9.1.87", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "version": "9.5.15", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.4.15", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-label": "^9.3.15", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-rating": { - "version": "9.1.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-rating/-/react-rating-9.1.6.tgz", - "integrity": "sha512-uFyp+/iY9Y4ORdtljYBRDfDBZL/wdCmEHwFyNFXKSdFPePeZhkCaKZq7RH+6KCGHY4KTFqDer4IaBgxBaC2oHg==", + "version": "9.3.15", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.8.0 <20.0.0", + "@types/react-dom": ">=16.8.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-search": { - "version": "9.1.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-search/-/react-search-9.1.6.tgz", - "integrity": "sha512-3iu+axBpXuSg2wywOVj9mCqwWEiAtIseLQVFTvY8/q93/fXkHWwXEV1pgfTzPlXNWy19CLV+cuXF0v4D2+JmDA==", + "version": "9.3.15", "license": "MIT", "dependencies": { "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-input": "^9.5.6", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-input": "^9.7.15", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-select": { - "version": "9.2.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-select/-/react-select-9.2.6.tgz", - "integrity": "sha512-Yeb/EGOhNrCAseTj6eBgJ0QtWiyibloXepYbyZ3QryXhPeZBLR32yhKVvzGB+ScB4hdY45k/Tam8BdfofstAqw==", + "version": "9.4.15", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.2.6", + "@fluentui/react-field": "^9.4.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-shared-contexts": { - "version": "9.23.1", - "resolved": "https://registry.npmjs.org/@fluentui/react-shared-contexts/-/react-shared-contexts-9.23.1.tgz", - "integrity": "sha512-mP+7talxLz7n0G36o7Asdvst+JPzUbqbnoMKUWRVB5YwzlOXumEgaQDgL1BkRUJYaDGOjIiSTUjHOEkBt7iSdg==", + "version": "9.26.2", "license": "MIT", "dependencies": { - "@fluentui/react-theme": "^9.1.24", + "@fluentui/react-theme": "^9.2.1", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "react": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "react": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-skeleton": { - "version": "9.2.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-skeleton/-/react-skeleton-9.2.6.tgz", - "integrity": "sha512-qAb0Td07EqCmyJAK53TYDfWs3NWedqAC7YRt2RVfhaQobI60+etMkXhGDwGDZwryQIFMYlNm6mSV4M5qkC4gCA==", + "version": "9.4.15", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.2.6", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-field": "^9.4.15", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-slider": { - "version": "9.3.7", - "resolved": "https://registry.npmjs.org/@fluentui/react-slider/-/react-slider-9.3.7.tgz", - "integrity": "sha512-PY4Z9KujrxyRZaLgdY47BlGj3LCmIiCRJE/96DSDz7iPbwfVluH0HJbBsw+MfW70c0CwyPD5VSHtPIi0pnGnKw==", - "license": "MIT", - "dependencies": { - "@fluentui/react-field": "^9.2.6", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "version": "9.5.15", + "license": "MIT", + "dependencies": { + "@fluentui/react-field": "^9.4.15", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-spinbutton": { - "version": "9.3.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinbutton/-/react-spinbutton-9.3.6.tgz", - "integrity": "sha512-XVK1AOjKS47MBEKDDKzgePc3DfIr2f1LI+OgmbcAlhBUgyy2FGeixqdAvbJTnRehO6kRRzFjSmMLnb6c6m/W/w==", + "version": "9.5.15", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-field": "^9.2.6", + "@fluentui/react-field": "^9.4.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-spinner": { - "version": "9.5.11", - "resolved": "https://registry.npmjs.org/@fluentui/react-spinner/-/react-spinner-9.5.11.tgz", - "integrity": "sha512-q0mJLG7LfWSRqa2fO+Qvxw/noZWjk3HM4wurbddTOClezTcBlMXlYlad7rueu9TpzM5caGsWcMF791/gNYLHmQ==", + "version": "9.7.15", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-label": "^9.1.87", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-label": "^9.3.15", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-swatch-picker": { - "version": "9.2.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-swatch-picker/-/react-swatch-picker-9.2.6.tgz", - "integrity": "sha512-s9rGkiONRxc8lmc19vbKgrkGtFzKCRv1+Cov5esIG/uJnvmTctzOLjgFj+NeWehvQgrtv8t7Bs7AszlQzfEP5A==", + "version": "9.4.15", "license": "MIT", "dependencies": { - "@fluentui/react-context-selector": "^9.1.76", - "@fluentui/react-field": "^9.2.6", + "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-field": "^9.4.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.8.0 <20.0.0", + "@types/react-dom": ">=16.8.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-switch": { - "version": "9.2.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-switch/-/react-switch-9.2.6.tgz", - "integrity": "sha512-stFoqh/ahYmY3LPVIi3voGMPm/wcMMEepkWL8ZLYU5ZKP/knJ2Yy5peW1uVo+5d6PbLUvan9tsSB53IN/2utpA==", + "version": "9.5.4", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.2.6", + "@fluentui/react-field": "^9.4.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-label": "^9.1.87", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-label": "^9.3.15", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-table": { - "version": "9.16.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-table/-/react-table-9.16.6.tgz", - "integrity": "sha512-u/skqMkdw16Lnje4CevcU1xoSspwTWRLoHXvIiWQyjSkd/mHkspflNJy/wK2aoEO5F7pPak0u72IBxMg+0KIvQ==", + "version": "9.19.9", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.14.6", - "@fluentui/react-avatar": "^9.7.6", - "@fluentui/react-checkbox": "^9.3.6", - "@fluentui/react-context-selector": "^9.1.76", + "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-avatar": "^9.10.1", + "@fluentui/react-checkbox": "^9.5.15", + "@fluentui/react-context-selector": "^9.2.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-radio": "^9.3.6", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-radio": "^9.5.15", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-tabs": { - "version": "9.7.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabs/-/react-tabs-9.7.6.tgz", - "integrity": "sha512-N8wey1p/bGnHNZd8L/AVU7GOiI3bodbAlL9x9L8grncPMX/WWnwTGMui7A3Ge3u2IQ3rR8XEXz/dVxFpTdv+dg==", - "license": "MIT", - "dependencies": { - "@fluentui/react-context-selector": "^9.1.76", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "version": "9.11.2", + "license": "MIT", + "dependencies": { + "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-tabster": { - "version": "9.24.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-tabster/-/react-tabster-9.24.6.tgz", - "integrity": "sha512-d0i4Yey8UE+zf+dM/wYtblRwRhxuE9uWdwsxWD5tdvDY3KZxIa9NsNW7xBRA1Az5dhvWw83fJJBd88DosX2sYw==", + "version": "9.26.13", "license": "MIT", "dependencies": { - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "keyborg": "^2.6.0", - "tabster": "^8.5.0" + "tabster": "^8.5.5" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-tag-picker": { - "version": "9.5.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-tag-picker/-/react-tag-picker-9.5.6.tgz", - "integrity": "sha512-DO65MbrWXz7YFc44TSCLGaowtnnje6UMqczCYrQVwzmQlxf00RqgbB3CVjKvW0Z3r89aNLtX9b+mYOQL4ForVg==", + "version": "9.8.0", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.14.6", - "@fluentui/react-combobox": "^9.14.6", - "@fluentui/react-context-selector": "^9.1.76", - "@fluentui/react-field": "^9.2.6", + "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-combobox": "^9.16.16", + "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-field": "^9.4.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-portal": "^9.5.6", - "@fluentui/react-positioning": "^9.16.7", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-tags": "^9.5.4", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-portal": "^9.8.11", + "@fluentui/react-positioning": "^9.21.0", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-tags": "^9.7.16", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-tags": { - "version": "9.5.4", - "resolved": "https://registry.npmjs.org/@fluentui/react-tags/-/react-tags-9.5.4.tgz", - "integrity": "sha512-xmrhhmNa/hwW4p6gTjsFbctcohsiBJS96SfA/cQQ/pRpNKpjwiAZvppF3R4dBYo1Apnt9VCdAmEYhu7qmjq69A==", + "version": "9.7.16", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.14.6", - "@fluentui/react-avatar": "^9.7.6", + "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-avatar": "^9.10.1", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-teaching-popover": { - "version": "9.4.5", - "resolved": "https://registry.npmjs.org/@fluentui/react-teaching-popover/-/react-teaching-popover-9.4.5.tgz", - "integrity": "sha512-axKj4EQuoDsGSK0sEdOAEuwg3ew7Maxu4xKF2Z2jOOf0J7+6lKiZilTzt3gf5XLHUzFMU2bTM7VVAN8O8Et04A==", + "version": "9.6.17", "license": "MIT", "dependencies": { - "@fluentui/react-aria": "^9.14.6", - "@fluentui/react-button": "^9.4.6", - "@fluentui/react-context-selector": "^9.1.76", + "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-button": "^9.8.2", + "@fluentui/react-context-selector": "^9.2.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-popover": "^9.10.6", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-popover": "^9.13.2", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1", "use-sync-external-store": "^1.2.0" }, "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "@types/react": ">=16.8.0 <20.0.0", + "@types/react-dom": ">=16.8.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.8.0 <20.0.0" } }, "node_modules/@fluentui/react-text": { - "version": "9.4.36", - "resolved": "https://registry.npmjs.org/@fluentui/react-text/-/react-text-9.4.36.tgz", - "integrity": "sha512-oLSGz6uksooCQrc+FXvWwAZCP+ucn2h12vZFyWSAOVODDtQMjtycol03p408BEHnPBQbrYaQCFpd3Id5eLuxBg==", + "version": "9.6.15", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-textarea": { - "version": "9.4.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-textarea/-/react-textarea-9.4.6.tgz", - "integrity": "sha512-zdpeCSnVJihbPXHeAYHa1MiO7dJba3Ugtyu7TqJkmiy0Lr5OfeTkX2nLchOPKiEDjQFfSviqDNYZERwO2NGD1g==", + "version": "9.6.15", "license": "MIT", "dependencies": { - "@fluentui/react-field": "^9.2.6", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-field": "^9.4.15", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-theme": { - "version": "9.1.24", - "resolved": "https://registry.npmjs.org/@fluentui/react-theme/-/react-theme-9.1.24.tgz", - "integrity": "sha512-OhVKYD7CMYHxzJEn4PtIszledj8hbQJNWBMfIZsp4Sytdp9vCi0txIQUx4BhS1WqtQPhNGCF16eW9Q3NRrnIrQ==", + "version": "9.2.1", "license": "MIT", "dependencies": { - "@fluentui/tokens": "1.0.0-alpha.21", + "@fluentui/tokens": "1.0.0-alpha.23", "@swc/helpers": "^0.5.1" } }, "node_modules/@fluentui/react-toast": { - "version": "9.4.8", - "resolved": "https://registry.npmjs.org/@fluentui/react-toast/-/react-toast-9.4.8.tgz", - "integrity": "sha512-1welldVf/M/c7msCwB8a0yFgKjIF/aUxAgjTHza9jEmxBl45oCzPZY7PVApCY2sSx+iRn8XjSKRkYSPgHUYzKA==", + "version": "9.7.13", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.14.6", + "@fluentui/react-aria": "^9.17.10", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-motion": "^9.7.2", - "@fluentui/react-motion-components-preview": "^0.4.9", - "@fluentui/react-portal": "^9.5.6", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-motion": "^9.12.0", + "@fluentui/react-motion-components-preview": "^0.15.1", + "@fluentui/react-portal": "^9.8.11", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-toolbar": { - "version": "9.4.5", - "resolved": "https://registry.npmjs.org/@fluentui/react-toolbar/-/react-toolbar-9.4.5.tgz", - "integrity": "sha512-/Za5QHVqcF1bLW7FIRebl17TI+MCdoVqvHoaE7xodRmAA0a5MWcs3aqtumaeQjZBnGh9HsFYmxTKdh0KEu4LVg==", - "license": "MIT", - "dependencies": { - "@fluentui/react-button": "^9.4.6", - "@fluentui/react-context-selector": "^9.1.76", - "@fluentui/react-divider": "^9.2.86", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-radio": "^9.3.6", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "version": "9.7.3", + "license": "MIT", + "dependencies": { + "@fluentui/react-button": "^9.8.2", + "@fluentui/react-context-selector": "^9.2.15", + "@fluentui/react-divider": "^9.6.2", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-radio": "^9.5.15", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-tooltip": { - "version": "9.6.6", - "resolved": "https://registry.npmjs.org/@fluentui/react-tooltip/-/react-tooltip-9.6.6.tgz", - "integrity": "sha512-4EHxH5CvzPQjOjl9opldAhSAVSOoUo4ei412RoCRASzoaVBJwQ81r2MaVlf9P84G6WOUUXttRbUQ+0jWV5WoKg==", + "version": "9.9.2", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-portal": "^9.5.6", - "@fluentui/react-positioning": "^9.16.7", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-portal": "^9.8.11", + "@fluentui/react-positioning": "^9.21.0", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-tree": { - "version": "9.10.9", - "resolved": "https://registry.npmjs.org/@fluentui/react-tree/-/react-tree-9.10.9.tgz", - "integrity": "sha512-Pj/eSXVVw3kGae7Jl3ZBaRqjSOm9JytzgA13eYdHpx58YpqGsYOU6G5CFwx28pTQKeIZIfsIgTDPhD+S5LcVOQ==", + "version": "9.15.11", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-aria": "^9.14.6", - "@fluentui/react-avatar": "^9.7.6", - "@fluentui/react-button": "^9.4.6", - "@fluentui/react-checkbox": "^9.3.6", - "@fluentui/react-context-selector": "^9.1.76", + "@fluentui/react-aria": "^9.17.10", + "@fluentui/react-avatar": "^9.10.1", + "@fluentui/react-button": "^9.8.2", + "@fluentui/react-checkbox": "^9.5.15", + "@fluentui/react-context-selector": "^9.2.15", "@fluentui/react-icons": "^2.0.245", - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-motion": "^9.7.2", - "@fluentui/react-motion-components-preview": "^0.4.9", - "@fluentui/react-radio": "^9.3.6", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-tabster": "^9.24.6", - "@fluentui/react-theme": "^9.1.24", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-motion": "^9.12.0", + "@fluentui/react-motion-components-preview": "^0.15.1", + "@fluentui/react-radio": "^9.5.15", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-tabster": "^9.26.13", + "@fluentui/react-theme": "^9.2.1", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-utilities": { - "version": "9.19.0", - "resolved": "https://registry.npmjs.org/@fluentui/react-utilities/-/react-utilities-9.19.0.tgz", - "integrity": "sha512-66Kdpr4xZsov6KSqbPDmKR5CB96RUPZuWihMC3RYHj9uH+oxd81k2Jyrb6rM058xjVKDFSFVLUZlsp1Mgts38w==", + "version": "9.26.2", "license": "MIT", "dependencies": { "@fluentui/keyboard-keys": "^9.0.8", - "@fluentui/react-shared-contexts": "^9.23.1", + "@fluentui/react-shared-contexts": "^9.26.2", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "react": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "react": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/react-virtualizer": { - "version": "9.0.0-alpha.96", - "resolved": "https://registry.npmjs.org/@fluentui/react-virtualizer/-/react-virtualizer-9.0.0-alpha.96.tgz", - "integrity": "sha512-0o9RSTAAIoJ4xdM2g8hF5u98Up0OHRknRhMolZHZDoqXEvhJ5GroGtp+NPfU7LxU+dxHrZLx9gQ6wVWe/35ZzQ==", + "version": "9.0.0-alpha.111", "license": "MIT", "dependencies": { - "@fluentui/react-jsx-runtime": "^9.0.54", - "@fluentui/react-shared-contexts": "^9.23.1", - "@fluentui/react-utilities": "^9.19.0", - "@griffel/react": "^1.5.22", + "@fluentui/react-jsx-runtime": "^9.4.1", + "@fluentui/react-shared-contexts": "^9.26.2", + "@fluentui/react-utilities": "^9.26.2", + "@griffel/react": "^1.5.32", "@swc/helpers": "^0.5.1" }, "peerDependencies": { - "@types/react": ">=16.14.0 <19.0.0", - "@types/react-dom": ">=16.9.0 <19.0.0", - "react": ">=16.14.0 <19.0.0", - "react-dom": ">=16.14.0 <19.0.0" + "@types/react": ">=16.14.0 <20.0.0", + "@types/react-dom": ">=16.9.0 <20.0.0", + "react": ">=16.14.0 <20.0.0", + "react-dom": ">=16.14.0 <20.0.0" } }, "node_modules/@fluentui/tokens": { - "version": "1.0.0-alpha.21", - "resolved": "https://registry.npmjs.org/@fluentui/tokens/-/tokens-1.0.0-alpha.21.tgz", - "integrity": "sha512-xQ1T56sNgDFGl+kJdIwhz67mHng8vcwO7Dvx5Uja4t+NRULQBgMcJ4reUo4FGF3TjufHj08pP0/OnKQgnOaSVg==", + "version": "1.0.0-alpha.23", "license": "MIT", "dependencies": { "@swc/helpers": "^0.5.1" @@ -4063,15 +3663,11 @@ }, "node_modules/@glideapps/ts-necessities": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.4.0.tgz", - "integrity": "sha512-mDC+qosuNa4lxR3ioMBb6CD0XLRsQBplU+zRPUYiMLXKeVPZ6UYphdNG/EGReig0YyfnVlBKZEXl1wzTotYmPA==", "dev": true, "license": "MIT" }, "node_modules/@griffel/core": { "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@griffel/core/-/core-1.19.2.tgz", - "integrity": "sha512-WkB/QQkjy9dE4vrNYGhQvRRUHFkYVOuaznVOMNTDT4pS9aTJ9XPrMTXXlkpcwaf0D3vNKoerj4zAwnU2lBzbOg==", "license": "MIT", "dependencies": { "@emotion/hash": "^0.9.0", @@ -4083,9 +3679,7 @@ } }, "node_modules/@griffel/react": { - "version": "1.5.30", - "resolved": "https://registry.npmjs.org/@griffel/react/-/react-1.5.30.tgz", - "integrity": "sha512-1q4ojbEVFY5YA0j1NamP0WWF4BKh+GHsVugltDYeEgEaVbH3odJ7tJabuhQgY+7Nhka0pyEFWSiHJev0K3FSew==", + "version": "1.5.32", "license": "MIT", "dependencies": { "@griffel/core": "^1.19.2", @@ -4097,17 +3691,25 @@ }, "node_modules/@griffel/style-types": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@griffel/style-types/-/style-types-1.3.0.tgz", - "integrity": "sha512-bHwD3sUE84Xwv4dH011gOKe1jul77M1S6ZFN9Tnq8pvZ48UMdY//vtES6fv7GRS5wXYT4iqxQPBluAiYAfkpmw==", "license": "MIT", "dependencies": { "csstype": "^3.1.3" } }, + "node_modules/@hono/node-server": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.11.tgz", + "integrity": "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4115,37 +3717,19 @@ } }, "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "version": "0.16.7", "dev": true, "license": "Apache-2.0", "dependencies": { "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" + "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4157,9 +3741,7 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", - "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "version": "0.4.3", "dev": true, "license": "Apache-2.0", "engines": { @@ -4170,15 +3752,24 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@inquirer/external-editor": { + "node_modules/@inquirer/ansi": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", - "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", "dev": true, "license": "MIT", "dependencies": { - "chardet": "^2.1.0", - "iconv-lite": "^0.7.0" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { "node": ">=18" @@ -4192,170 +3783,295 @@ } } }, - "node_modules/@inquirer/external-editor/node_modules/chardet": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", - "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", + "node_modules/@inquirer/confirm": { + "version": "5.1.21", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } }, - "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "node_modules/@inquirer/core": { + "version": "10.3.2", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "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" }, "engines": { - "node": ">=0.10.0" + "node": ">=18" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@inquirer/figures": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz", - "integrity": "sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==", + "node_modules/@inquirer/editor": { + "version": "4.2.23", "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" + }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "node_modules/@inquirer/expand": { + "version": "4.0.23", "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, "engines": { - "node": "20 || >=22" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "@isaacs/balanced-match": "^4.0.1" + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" }, "engines": { - "node": "20 || >=22" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@inquirer/figures": { + "version": "1.0.15", "dev": true, - "license": "ISC", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.3.1", + "dev": true, + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/@inquirer/number": { + "version": "3.0.23", "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/@inquirer/password": { + "version": "4.0.23", "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/@inquirer/prompts": { + "version": "7.10.1", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.3.2", + "@inquirer/confirm": "^5.1.21", + "@inquirer/editor": "^4.2.23", + "@inquirer/expand": "^4.0.23", + "@inquirer/input": "^4.3.1", + "@inquirer/number": "^3.0.23", + "@inquirer/password": "^4.0.23", + "@inquirer/rawlist": "^4.1.11", + "@inquirer/search": "^3.2.2", + "@inquirer/select": "^4.4.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", "dev": true, "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/@inquirer/search": { + "version": "3.2.2", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@inquirer/select": { + "version": "4.4.2", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "license": "ISC", "dependencies": { @@ -4369,38 +4085,108 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.2", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { @@ -4447,8 +4233,6 @@ }, "node_modules/@jest/environment": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "license": "MIT", "dependencies": { @@ -4463,8 +4247,6 @@ }, "node_modules/@jest/expect": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4477,8 +4259,6 @@ }, "node_modules/@jest/expect-utils": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "license": "MIT", "dependencies": { @@ -4490,8 +4270,6 @@ }, "node_modules/@jest/fake-timers": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4508,8 +4286,6 @@ }, "node_modules/@jest/globals": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4524,8 +4300,6 @@ }, "node_modules/@jest/reporters": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, "license": "MIT", "dependencies": { @@ -4568,8 +4342,6 @@ }, "node_modules/@jest/schemas": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "license": "MIT", "dependencies": { @@ -4581,8 +4353,6 @@ }, "node_modules/@jest/source-map": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, "license": "MIT", "dependencies": { @@ -4596,8 +4366,6 @@ }, "node_modules/@jest/test-result": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, "license": "MIT", "dependencies": { @@ -4612,8 +4380,6 @@ }, "node_modules/@jest/test-sequencer": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, "license": "MIT", "dependencies": { @@ -4628,8 +4394,6 @@ }, "node_modules/@jest/transform": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "license": "MIT", "dependencies": { @@ -4655,8 +4419,6 @@ }, "node_modules/@jest/types": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "license": "MIT", "dependencies": { @@ -4673,8 +4435,6 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { @@ -4684,8 +4444,6 @@ }, "node_modules/@jridgewell/remapping": { "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4695,8 +4453,6 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", "engines": { @@ -4704,16 +4460,12 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.5", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { @@ -4722,24 +4474,18 @@ } }, "node_modules/@lezer/common": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", - "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", + "version": "1.5.1", "license": "MIT" }, "node_modules/@lezer/highlight": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", - "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", + "version": "1.2.3", "license": "MIT", "dependencies": { - "@lezer/common": "^1.0.0" + "@lezer/common": "^1.3.0" } }, "node_modules/@lezer/javascript": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.1.tgz", - "integrity": "sha512-ATOImjeVJuvgm3JQ/bpo2Tmv55HSScE2MTPnKRMRIPx2cLhHGyX2VnqpHhtIV1tVzIjZDbcWQm+NCTF40ggZVw==", + "version": "1.5.4", "license": "MIT", "dependencies": { "@lezer/common": "^1.2.0", @@ -4749,8 +4495,6 @@ }, "node_modules/@lezer/json": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.3.tgz", - "integrity": "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==", "license": "MIT", "dependencies": { "@lezer/common": "^1.2.0", @@ -4759,96 +4503,18 @@ } }, "node_modules/@lezer/lr": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", - "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", + "version": "1.4.8", "license": "MIT", "dependencies": { "@lezer/common": "^1.0.0" } }, - "node_modules/@manypkg/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.5.5", - "@types/node": "^12.7.1", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0" - } - }, - "node_modules/@manypkg/find-root/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@manypkg/find-root/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@manypkg/get-packages": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", - "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.5.5", - "@changesets/types": "^4.0.1", - "@manypkg/find-root": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "^11.0.0", - "read-yaml-file": "^1.1.0" - } - }, - "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", - "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@manypkg/get-packages/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, "node_modules/@marijn/find-cluster-break": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", - "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", "license": "MIT" }, "node_modules/@mark.probst/typescript-json-schema": { "version": "0.55.0", - "resolved": "https://registry.npmjs.org/@mark.probst/typescript-json-schema/-/typescript-json-schema-0.55.0.tgz", - "integrity": "sha512-jI48mSnRgFQxXiE/UTUCVCpX8lK3wCFKLF1Ss2aEreboKNuLQGt3e0/YFqWVHe/WENxOaqiJvwOz+L/SrN2+qQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -4867,15 +4533,11 @@ }, "node_modules/@mark.probst/typescript-json-schema/node_modules/@types/node": { "version": "16.18.126", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz", - "integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==", "dev": true, "license": "MIT" }, "node_modules/@mark.probst/typescript-json-schema/node_modules/typescript": { "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4887,9 +4549,7 @@ } }, "node_modules/@microsoft/teams-js": { - "version": "2.36.0", - "resolved": "https://registry.npmjs.org/@microsoft/teams-js/-/teams-js-2.36.0.tgz", - "integrity": "sha512-Ufib7QLYxyYS1BB9Za3Mh71+v34b9LOWGjaUlILwjEY9ux5Pez1zmgE1OMobnqUaMf53E8H4SoOnWQOVenOdHQ==", + "version": "2.49.0", "license": "MIT", "peer": true, "dependencies": { @@ -4975,8 +4635,6 @@ }, "node_modules/@modelcontextprotocol/inspector": { "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/inspector/-/inspector-0.16.8.tgz", - "integrity": "sha512-7kk6uOGY9ySgCFsRuRplWzvjiEwulG876pfnjQxqaBJAcUlp3N1yrOt7YQMBZsxvop+RGw50IehiPuGs+7oh+w==", "dev": true, "license": "MIT", "workspaces": [ @@ -5006,8 +4664,6 @@ }, "node_modules/@modelcontextprotocol/inspector-cli": { "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/inspector-cli/-/inspector-cli-0.16.8.tgz", - "integrity": "sha512-u8x8Dbb8Dos34M7N8p4e4AF++Bi1D+lq+dkRCvLi5Qub/dI75Z7YTIXBezA4LbIISly+Ecn05fdofzZwqyOvpg==", "dev": true, "license": "MIT", "dependencies": { @@ -5021,8 +4677,6 @@ }, "node_modules/@modelcontextprotocol/inspector-cli/node_modules/commander": { "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true, "license": "MIT", "engines": { @@ -5031,8 +4685,6 @@ }, "node_modules/@modelcontextprotocol/inspector-client": { "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/inspector-client/-/inspector-client-0.16.8.tgz", - "integrity": "sha512-4sTk/jUnQ1lDv9kbx1nN45SsoApDxW8hjKLKcHnHh9nfRVEN9SW+ylUjNvVCDP74xSNpD8v5p6NJyVWtZYfPWA==", "dev": true, "license": "MIT", "dependencies": { @@ -5066,44 +4718,39 @@ "mcp-inspector-client": "bin/start.js" } }, - "node_modules/@modelcontextprotocol/inspector-client/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@modelcontextprotocol/inspector-client/node_modules/react": { + "version": "18.3.1", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "loose-envify": "^1.1.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@modelcontextprotocol/inspector-client/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "node_modules/@modelcontextprotocol/inspector-client/node_modules/react-dom": { + "version": "18.3.1", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } }, - "node_modules/@modelcontextprotocol/inspector-client/node_modules/pkce-challenge": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-4.1.0.tgz", - "integrity": "sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==", + "node_modules/@modelcontextprotocol/inspector-client/node_modules/scheduler": { + "version": "0.23.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=16.20.0" + "dependencies": { + "loose-envify": "^1.1.0" } }, "node_modules/@modelcontextprotocol/inspector-server": { "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/inspector-server/-/inspector-server-0.16.8.tgz", - "integrity": "sha512-plv0SiPgQAT0/LjC0MmGsoo/sdpS6V4TpOUAxO4J3DnvnLLaInnNh9hiU1SlGgCjsRv0nN9TvX9pWRqVnZH9kw==", "dev": true, "license": "MIT", "dependencies": { @@ -5119,627 +4766,622 @@ "mcp-inspector-server": "build/index.js" } }, - "node_modules/@modelcontextprotocol/inspector/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@modelcontextprotocol/inspector/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/accepts": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "node": ">= 0.6" } }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.24.3", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.24.3.tgz", - "integrity": "sha512-YgSHW29fuzKKAHTGe9zjNoo+yF8KaQPzDC2W9Pv41E7/57IfY+AMGJ/aDFlgTLcVVELoggKE4syABCE75u3NCw==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/body-parser": { + "version": "2.2.2", + "dev": true, "license": "MIT", "dependencies": { - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1", + "bytes": "^3.1.2", "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.5", - "eventsource": "^3.0.2", - "eventsource-parser": "^3.0.0", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "jose": "^6.1.1", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.25 || ^4.0", - "zod-to-json-schema": "^3.25.0" + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { "node": ">=18" }, - "peerDependencies": { - "@cfworker/json-schema": "^4.1.1", - "zod": "^3.25 || ^4.0" - }, - "peerDependenciesMeta": { - "@cfworker/json-schema": { - "optional": true - }, - "zod": { - "optional": false - } - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/jose": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", - "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", - "license": "MIT", "funding": { - "url": "https://github.com/sponsors/panva" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/content-disposition": { + "version": "1.0.1", "dev": true, "license": "MIT", "engines": { - "node": "^14.21.3 || >=16" + "node": ">=18" }, "funding": { - "url": "https://paulmillr.com/funding/" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/cookie": { + "version": "0.7.2", "dev": true, "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, "engines": { - "node": ">= 8" + "node": ">= 0.6" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/cookie-signature": { + "version": "1.2.2", "dev": true, "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=6.6.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/express": { + "version": "5.2.1", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", - "license": "Apache-2.0", - "engines": { - "node": ">=8.0.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@paralleldrive/cuid2": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", - "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/finalhandler": { + "version": "2.1.1", "dev": true, "license": "MIT", "dependencies": { - "@noble/hashes": "^1.1.5" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/fresh": { + "version": "2.0.0", "dev": true, "license": "MIT", - "optional": true, "engines": { - "node": ">=14" + "node": ">= 0.8" } }, - "node_modules/@radix-ui/number": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", - "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", - "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/media-typer": { + "version": "1.1.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", - "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/merge-descriptors": { + "version": "2.0.0", "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=18" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@radix-ui/react-checkbox": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", - "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/mime-db": { + "version": "1.54.0", "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">= 0.6" } }, - "node_modules/@radix-ui/react-collection": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", - "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/mime-types": { + "version": "3.0.2", "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3" + "mime-db": "^1.54.0" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=18" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/negotiator": { + "version": "1.0.0", "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">= 0.6" } }, - "node_modules/@radix-ui/react-context": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", - "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/send": { + "version": "1.2.1", "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", - "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/serve-static": { + "version": "2.2.1", "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">= 18" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@radix-ui/react-direction": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", - "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "node_modules/@modelcontextprotocol/inspector-server/node_modules/type-is": { + "version": "2.0.1", "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">= 0.6" } }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", - "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", - "dev": true, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.27.1", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-escape-keydown": "1.1.1" + "@hono/node-server": "^1.19.9", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" }, "peerDependenciesMeta": { - "@types/react": { + "@cfworker/json-schema": { "optional": true }, - "@types/react-dom": { - "optional": true + "zod": { + "optional": false } } }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", - "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", - "dev": true, + "node_modules/@modelcontextprotocol/sdk/node_modules/accepts": { + "version": "2.0.0", "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">= 0.6" } }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", - "dev": true, + "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { + "version": "8.18.0", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-icons": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.2.tgz", - "integrity": "sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "react": "^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@radix-ui/react-id": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", - "dev": true, + "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.2.2", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=18" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@radix-ui/react-label": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz", - "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", - "dev": true, + "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { + "version": "1.0.1", "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">=18" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@radix-ui/react-popover": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", - "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", - "dev": true, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie": { + "version": "0.7.2", "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">= 0.6" } }, - "node_modules/@radix-ui/react-popper": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", - "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", - "dev": true, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { + "version": "1.2.2", "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-rect": "1.1.1", - "@radix-ui/react-use-size": "1.1.1", - "@radix-ui/rect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "engines": { + "node": ">=6.6.0" } }, - "node_modules/@radix-ui/react-portal": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", - "dev": true, + "node_modules/@modelcontextprotocol/sdk/node_modules/express": { + "version": "5.2.1", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-layout-effect": "1.1.1" + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">= 18" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@radix-ui/react-presence": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", - "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", - "dev": true, + "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { + "version": "2.1.1", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": ">= 18.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", - "dev": true, + "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { + "version": "2.0.0", "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } + "engines": { + "node": ">= 0.8" + } }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", - "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/media-typer": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/merge-descriptors": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-db": { + "version": "1.54.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-types": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/negotiator": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/pkce-challenge": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/send": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { + "version": "2.2.1", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@netflix/nerror": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@netflix/nerror/-/nerror-1.1.3.tgz", + "integrity": "sha512-b+MGNyP9/LXkapreJzNUzcvuzZslj/RGgdVVJ16P2wSlYatfLycPObImqVJSmNAdyeShvNeM/pl3sVZsObFueg==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "extsprintf": "^1.4.0", + "lodash": "^4.17.15" + } + }, + "node_modules/@netflix/nerror/node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@paralleldrive/cuid2": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.5" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.3.3", "dev": true, "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -5756,34 +5398,15 @@ } } }, - "node_modules/@radix-ui/react-select": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", - "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -5800,10 +5423,8 @@ } } }, - "node_modules/@radix-ui/react-slot": { + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "dev": true, "license": "MIT", "dependencies": { @@ -5819,51 +5440,53 @@ } } }, - "node_modules/@radix-ui/react-switch": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", - "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" - }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { "optional": true } } }, - "node_modules/@radix-ui/react-tabs": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", - "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", "dev": true, "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", @@ -5880,25 +5503,47 @@ } } }, - "node_modules/@radix-ui/react-toast": { - "version": "1.2.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz", - "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==", + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3" + "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -5915,25 +5560,28 @@ } } }, - "node_modules/@radix-ui/react-tooltip": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", - "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-visually-hidden": "1.2.3" + "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -5950,12 +5598,21 @@ } } }, - "node_modules/@radix-ui/react-use-callback-ref": { + "node_modules/@radix-ui/react-icons": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/@radix-ui/react-id": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", "dev": true, "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -5966,70 +5623,93 @@ } } }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "node_modules/@radix-ui/react-label": { + "version": "2.1.8", "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-primitive": "2.1.4" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", - "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "node_modules/@radix-ui/react-popover": { + "version": "1.1.15", "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.1" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", "dev": true, "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -6040,223 +5720,1043 @@ } } }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", - "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", "dev": true, "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", - "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/rect": "1.1.1" + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", - "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", "dev": true, "license": "MIT", "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-visually-hidden": { + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast": { + "version": "1.2.15", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@redocly/ajv": { + "version": "8.11.2", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js-replace": "^1.0.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@redocly/ajv/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/@redocly/config": { + "version": "0.22.0", + "license": "MIT" + }, + "node_modules/@redocly/openapi-core": { + "version": "1.34.11", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.34.11.tgz", + "integrity": "sha512-V09ayfnb5GyysmvARbt+voFZAjGcf7hSYxOYxSkCc4fbH/DTfq5YWoec8cflvmHHqyIFbqvmGKmYFzqhr9zxDg==", + "license": "MIT", + "dependencies": { + "@redocly/ajv": "8.11.2", + "@redocly/config": "0.22.0", + "colorette": "1.4.0", + "https-proxy-agent": "7.0.6", + "js-levenshtein": "1.1.6", + "js-yaml": "4.1.1", + "minimatch": "5.1.9", + "pluralize": "8.0.0", + "yaml-ast-parser": "0.0.43" + }, + "engines": { + "node": ">=18.17.0", + "npm": ">=9.5.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.40.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.1.tgz", + "integrity": "sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "dev": true, + "license": "MIT" }, - "node_modules/@radix-ui/rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", - "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "node_modules/@sinclair/typebox": { + "version": "0.27.10", "dev": true, "license": "MIT" }, - "node_modules/@redocly/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==", - "license": "MIT", + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js-replace": "^1.0.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "type-detect": "4.0.8" } }, - "node_modules/@redocly/config": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.22.2.tgz", - "integrity": "sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==", - "license": "MIT" - }, - "node_modules/@redocly/openapi-core": { - "version": "1.34.2", - "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.34.2.tgz", - "integrity": "sha512-glfkQFJizLdq2fBkNvc2FJW0sxDb5exd0wIXhFk+WHaFLMREBC3CxRo2Zq7uJIdfV9U3YTceMbXJklpDfmmwFQ==", - "license": "MIT", + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@redocly/ajv": "^8.11.2", - "@redocly/config": "^0.22.0", - "colorette": "^1.2.0", - "https-proxy-agent": "^7.0.5", - "js-levenshtein": "^1.1.6", - "js-yaml": "^4.1.0", - "minimatch": "^5.0.1", - "pluralize": "^8.0.0", - "yaml-ast-parser": "0.0.43" - }, - "engines": { - "node": ">=18.17.0", - "npm": ">=9.5.0" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@redocly/openapi-core/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/@redocly/openapi-core/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "node_modules/@stylistic/eslint-plugin": { + "version": "4.4.1", + "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "@typescript-eslint/utils": "^8.32.1", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.2" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0" } }, - "node_modules/@redocly/openapi-core/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", + "node_modules/@swc/helpers": { + "version": "0.5.19", + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" + "tslib": "^2.8.0" } }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", - "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "node_modules/@tsconfig/node10": { + "version": "1.0.12", "dev": true, "license": "MIT" }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", - "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@turbo/gen": { + "version": "2.8.20", + "resolved": "https://registry.npmjs.org/@turbo/gen/-/gen-2.8.20.tgz", + "integrity": "sha512-SazKn5Pc9mitpc3uc6Pmf+QhkNtvF5t6Ro0V1cuc0QFhblbfw4KwWqFnnfTEmGzgDtb2CZJB3BK8LFMBX52eLg==", "dev": true, "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0||^4.0.0" + "@inquirer/prompts": "^7.10.1", + "esbuild": "^0.25.0" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "bin": { + "gen": "dist/cli.js" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", - "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "node_modules/@turbo/gen/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">=18" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.1.tgz", - "integrity": "sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==", + "node_modules/@turbo/gen/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", "cpu": [ "arm" ], @@ -6265,12 +6765,15 @@ "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.1.tgz", - "integrity": "sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==", + "node_modules/@turbo/gen/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ "arm64" ], @@ -6279,82 +6782,100 @@ "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.1.tgz", - "integrity": "sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==", + "node_modules/@turbo/gen/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" - ] + "android" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.1.tgz", - "integrity": "sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==", + "node_modules/@turbo/gen/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.1.tgz", - "integrity": "sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==", + "node_modules/@turbo/gen/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "freebsd" - ] + "darwin" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.1.tgz", - "integrity": "sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==", + "node_modules/@turbo/gen/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "freebsd" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.1.tgz", - "integrity": "sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==", + "node_modules/@turbo/gen/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", "cpu": [ - "arm" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" - ] + "freebsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.1.tgz", - "integrity": "sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==", + "node_modules/@turbo/gen/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", "cpu": [ "arm" ], @@ -6363,12 +6884,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.1.tgz", - "integrity": "sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==", + "node_modules/@turbo/gen/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", "cpu": [ "arm64" ], @@ -6377,26 +6901,32 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.1.tgz", - "integrity": "sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==", + "node_modules/@turbo/gen/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", "cpu": [ - "arm64" + "ia32" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.1.tgz", - "integrity": "sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==", + "node_modules/@turbo/gen/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", "cpu": [ "loong64" ], @@ -6405,40 +6935,49 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.1.tgz", - "integrity": "sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==", + "node_modules/@turbo/gen/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", "cpu": [ - "ppc64" + "mips64el" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.1.tgz", - "integrity": "sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==", + "node_modules/@turbo/gen/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", "cpu": [ - "riscv64" + "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.1.tgz", - "integrity": "sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==", + "node_modules/@turbo/gen/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" ], @@ -6447,12 +6986,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.1.tgz", - "integrity": "sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==", + "node_modules/@turbo/gen/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" ], @@ -6461,12 +7003,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.1.tgz", - "integrity": "sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==", + "node_modules/@turbo/gen/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" ], @@ -6475,54 +7020,66 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.1.tgz", - "integrity": "sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==", + "node_modules/@turbo/gen/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" - ] + "netbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.1.tgz", - "integrity": "sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==", + "node_modules/@turbo/gen/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" - ] + "netbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.1.tgz", - "integrity": "sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==", + "node_modules/@turbo/gen/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", "cpu": [ - "ia32" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" - ] + "openbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.1.tgz", - "integrity": "sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==", + "node_modules/@turbo/gen/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" ], @@ -6530,293 +7087,141 @@ "license": "MIT", "optional": true, "os": [ - "win32" - ] - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "dev": true, - "license": "MIT", + "openbsd" + ], "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@stylistic/eslint-plugin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-4.2.0.tgz", - "integrity": "sha512-8hXezgz7jexGHdo5WN6JBEIPHCSFyyU4vgbxevu4YLVS5vl+sxqAAGyXSzfNDyR6xMNSH5H1x67nsXcYMOHtZA==", + "node_modules/@turbo/gen/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^8.23.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", - "estraverse": "^5.3.0", - "picomatch": "^4.0.2" - }, + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "peerDependencies": { - "eslint": ">=9.0.0" - } - }, - "node_modules/@swc/helpers": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", - "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@turbo/gen": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/@turbo/gen/-/gen-2.5.7.tgz", - "integrity": "sha512-DA94TPpF0bB5jFmzBBuVLvcL4qlBVKrCfjrE1sxZdf8xlH84U0K88tpGyuTdQIwpBRNg7VWBcVHqvoEkHHlSQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@turbo/workspaces": "2.5.7", - "commander": "^10.0.0", - "fs-extra": "^10.1.0", - "inquirer": "^8.2.7", - "minimatch": "^9.0.0", - "node-plop": "0.32.1", - "picocolors": "1.0.1", - "proxy-agent": "^6.5.0", - "ts-node": "^10.9.2", - "update-check": "^1.5.4", - "validate-npm-package-name": "^5.0.0" - }, - "bin": { - "gen": "dist/cli.js" + "node": ">=18" } }, - "node_modules/@turbo/gen/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/@turbo/gen/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=12" - } - }, - "node_modules/@turbo/gen/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node": ">=18" } }, - "node_modules/@turbo/gen/node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true, - "license": "ISC" - }, - "node_modules/@turbo/gen/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/@turbo/gen/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@turbo/workspaces": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/@turbo/workspaces/-/workspaces-2.5.7.tgz", - "integrity": "sha512-H3VsFpo7sU+SZ83LffnhJEczePsggxXskVmdMpn4H2HORKYwk672+E0cpSstwbXtNxcMH/nmfAjHOI8WOAZl1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "^10.0.0", - "execa": "5.1.1", - "fast-glob": "^3.2.12", - "fs-extra": "^10.1.0", - "gradient-string": "^2.0.0", - "inquirer": "^8.2.7", - "js-yaml": "^4.1.0", - "ora": "4.1.1", - "picocolors": "1.0.1", - "semver": "7.6.2", - "update-check": "^1.5.4" - }, - "bin": { - "workspaces": "dist/cli.js" + "node": ">=18" } }, - "node_modules/@turbo/workspaces/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/@turbo/workspaces/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/@turbo/gen/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@turbo/workspaces/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "node_modules/@turbo/gen/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@turbo/workspaces/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/@turbo/gen/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@turbo/workspaces/node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true, - "license": "ISC" - }, - "node_modules/@turbo/workspaces/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "license": "ISC", "bin": { - "semver": "bin/semver.js" + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@turbo/workspaces/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/@types/babel__core": { "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "license": "MIT", "dependencies": { @@ -6829,8 +7234,6 @@ }, "node_modules/@types/babel__generator": { "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, "license": "MIT", "dependencies": { @@ -6839,8 +7242,6 @@ }, "node_modules/@types/babel__template": { "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "license": "MIT", "dependencies": { @@ -6849,29 +7250,35 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "version": "7.28.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "version": "1.19.6", + "dev": true, "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" } }, + "node_modules/@types/bunyan": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.11.tgz", + "integrity": "sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/connect": { "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -6879,15 +7286,11 @@ }, "node_modules/@types/cookiejar": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", - "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", "dev": true, "license": "MIT" }, "node_modules/@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "version": "2.8.19", "dev": true, "license": "MIT", "dependencies": { @@ -6896,44 +7299,34 @@ }, "node_modules/@types/debug": { "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "license": "MIT", "dependencies": { "@types/ms": "*" } }, "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "version": "1.0.8", "license": "MIT" }, "node_modules/@types/estree-jsx": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", "license": "MIT", "dependencies": { "@types/estree": "*" } }, "node_modules/@types/express": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.1.tgz", - "integrity": "sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ==", + "version": "5.0.6", "dev": true, "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "*" + "@types/serve-static": "^2" } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", - "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "version": "5.1.1", "dev": true, "license": "MIT", "dependencies": { @@ -6943,10 +7336,18 @@ "@types/send": "*" } }, + "node_modules/@types/formidable": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-1.2.8.tgz", + "integrity": "sha512-6psvrUy5VDYb+yaPJReF1WrRsz+FBwyJutK9Twz1Efa27tm07bARNIkK2B8ZPWq80dXqpKfrxTO96xrtPp+AuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6955,41 +7356,23 @@ }, "node_modules/@types/hast": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "license": "MIT", "dependencies": { "@types/unist": "*" } }, "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "license": "MIT" - }, - "node_modules/@types/inquirer": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.9.tgz", - "integrity": "sha512-/mWx5136gts2Z2e5izdoRCo46lPp5TMs9R15GTSsgg/XnZyxDWVqoVU3R9lWnccKpqwsJLvRoxbCjoJtZB7DSw==", + "version": "2.0.5", "dev": true, - "license": "MIT", - "dependencies": { - "@types/through": "*", - "rxjs": "^7.2.0" - } + "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true, "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "license": "MIT", "dependencies": { @@ -6998,8 +7381,6 @@ }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7008,8 +7389,6 @@ }, "node_modules/@types/jest": { "version": "29.5.14", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", - "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7019,22 +7398,16 @@ }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, "license": "MIT" }, "node_modules/@types/jsonwebtoken": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz", - "integrity": "sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==", + "version": "9.0.10", "license": "MIT", "dependencies": { "@types/ms": "*", @@ -7042,16 +7415,12 @@ } }, "node_modules/@types/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", + "version": "4.17.24", "dev": true, "license": "MIT" }, "node_modules/@types/lodash.camelcase": { "version": "4.3.9", - "resolved": "https://registry.npmjs.org/@types/lodash.camelcase/-/lodash.camelcase-4.3.9.tgz", - "integrity": "sha512-ys9/hGBfsKxzmFI8hckII40V0ASQ83UM2pxfQRghHAwekhH4/jWtjz/3/9YDy7ZpUd/H0k2STSqmPR28dnj7Zg==", "dev": true, "license": "MIT", "dependencies": { @@ -7060,8 +7429,6 @@ }, "node_modules/@types/mdast": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", "dependencies": { "@types/unist": "*" @@ -7069,74 +7436,52 @@ }, "node_modules/@types/methods": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", - "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", "dev": true, "license": "MIT" }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, "node_modules/@types/ms": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", "license": "MIT" }, "node_modules/@types/node": { - "version": "22.15.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.3.tgz", - "integrity": "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==", + "version": "22.19.12", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", + "version": "2.6.13", "license": "MIT", "dependencies": { "@types/node": "*", - "form-data": "^4.0.0" + "form-data": "^4.0.4" } }, "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "version": "15.7.15", "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.9.18", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "version": "6.14.0", + "dev": true, "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.20", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz", - "integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==", + "version": "18.3.28", "license": "MIT", "dependencies": { "@types/prop-types": "*", - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/react-dom": { - "version": "18.3.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.6.tgz", - "integrity": "sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw==", + "version": "18.3.7", "license": "MIT", "peerDependencies": { "@types/react": "^18.0.0" @@ -7144,43 +7489,56 @@ }, "node_modules/@types/resolve": { "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true, "license": "MIT" }, + "node_modules/@types/restify": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/restify/-/restify-8.5.12.tgz", + "integrity": "sha512-tW9y4O/B0gNIhin/88PzLTPgolkzOOrFK0IfgdiiYjGgjXI+PDTwp7QThhQy0p0l5FuNy59NW2PXU3Qx3r5cOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bunyan": "*", + "@types/formidable": "^1", + "@types/node": "*", + "@types/spdy": "*" + } + }, "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "version": "1.2.1", + "dev": true, "license": "MIT", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "version": "2.2.0", + "dev": true, "license": "MIT", "dependencies": { "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" + "@types/node": "*" + } + }, + "node_modules/@types/spdy": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/@types/spdy/-/spdy-3.4.9.tgz", + "integrity": "sha512-ZYGzQrZX6j4GEy9x9+e4bjWOPOiZqFPm/3GnZ9xS0SMJqs+FbNiF6hBzr8EjSF2Z6TFY/PzUWOswUiRcZxW3FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, "node_modules/@types/stack-utils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true, "license": "MIT" }, "node_modules/@types/superagent": { "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", - "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7192,8 +7550,6 @@ }, "node_modules/@types/supertest": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz", - "integrity": "sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==", "dev": true, "license": "MIT", "dependencies": { @@ -7201,27 +7557,8 @@ "@types/superagent": "^8.1.0" } }, - "node_modules/@types/through": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz", - "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/tinycolor2": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", - "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/tunnel": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz", - "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -7229,23 +7566,18 @@ }, "node_modules/@types/unist": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "license": "MIT" }, "node_modules/@types/ws": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz", - "integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==", + "version": "8.18.1", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "version": "17.0.35", "dev": true, "license": "MIT", "dependencies": { @@ -7254,27 +7586,22 @@ }, "node_modules/@types/yargs-parser": { "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.31.1.tgz", - "integrity": "sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==", + "version": "8.56.1", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.31.1", - "@typescript-eslint/type-utils": "8.31.1", - "@typescript-eslint/utils": "8.31.1", - "@typescript-eslint/visitor-keys": "8.31.1", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/type-utils": "8.56.1", + "@typescript-eslint/utils": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7284,23 +7611,29 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "@typescript-eslint/parser": "^8.56.1", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.1.tgz", - "integrity": "sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==", + "version": "8.56.1", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.31.1", - "@typescript-eslint/types": "8.31.1", - "@typescript-eslint/typescript-estree": "8.31.1", - "@typescript-eslint/visitor-keys": "8.31.1", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7310,39 +7643,71 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.56.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.56.1", + "@typescript-eslint/types": "^8.56.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.1.tgz", - "integrity": "sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==", + "version": "8.56.1", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.31.1", - "@typescript-eslint/visitor-keys": "8.31.1" + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.56.1", + "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.31.1.tgz", - "integrity": "sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==", + "version": "8.56.1", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.31.1", - "@typescript-eslint/utils": "8.31.1", - "debug": "^4.3.4", - "ts-api-utils": "^2.0.1" + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/utils": "8.56.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7352,14 +7717,12 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.1.tgz", - "integrity": "sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==", + "version": "8.56.1", "dev": true, "license": "MIT", "engines": { @@ -7371,20 +7734,19 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.1.tgz", - "integrity": "sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==", + "version": "8.56.1", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.31.1", - "@typescript-eslint/visitor-keys": "8.31.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" + "@typescript-eslint/project-service": "8.56.1", + "@typescript-eslint/tsconfig-utils": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7394,20 +7756,62 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "5.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "10.2.4", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.4", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.31.1.tgz", - "integrity": "sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==", + "version": "8.56.1", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.31.1", - "@typescript-eslint/types": "8.31.1", - "@typescript-eslint/typescript-estree": "8.31.1" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7417,19 +7821,17 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.1.tgz", - "integrity": "sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==", + "version": "8.56.1", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.31.1", - "eslint-visitor-keys": "^4.2.0" + "@typescript-eslint/types": "8.56.1", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7439,427 +7841,378 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.3", + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@uiw/codemirror-theme-abcdef": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-abcdef/-/codemirror-theme-abcdef-4.23.11.tgz", - "integrity": "sha512-+36gOHUdBAzhf3PaAs4vVV1253LFiINBn3K7qEoD4XqTpeHzQEVlokEBksEYsQ0FzanTzDA5iW2yJifCSPG/MQ==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-abyss": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-abyss/-/codemirror-theme-abyss-4.23.11.tgz", - "integrity": "sha512-aDH+p2SWG+C3x6IqeHw49cnM92V0VGne4ZKCZG0EdBHCdHFtAym3yLIGuvCJPWiVWfPe5GzXltdPj0KHeWfO3Q==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-androidstudio": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-androidstudio/-/codemirror-theme-androidstudio-4.23.11.tgz", - "integrity": "sha512-M08kw4jBCWqghqnVXvdI1AwOByJ0XvhhfMvNK5n4Pd57akSvc7W81iO2JNhAdkhWtRA4QLVjAsYM5429xvY1yg==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-andromeda": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-andromeda/-/codemirror-theme-andromeda-4.23.11.tgz", - "integrity": "sha512-OqNtzdF3r/pXk0Bgc03ju4/x5r0a6ARLb5WTGYjptSTOdKXV2j5RYp/z+6XOV7zJiclBgMFoLoe0OfqV3fkuhg==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-atomone": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-atomone/-/codemirror-theme-atomone-4.23.11.tgz", - "integrity": "sha512-l7+Hu4KM5F8byDkHpWHDmqH+yp1bKSvlAOqyeAZ9ivLcb9P6bBmA8cW+J3Koo2D3p9CJt1r/rUoenRec6QdsWg==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-aura": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-aura/-/codemirror-theme-aura-4.23.11.tgz", - "integrity": "sha512-6FjmHsOSL3nRZIajrBuo/+AivJ4EtYL53Ov+nuIZKIKOXSct2WoKCbghLR/BuB/rQ1Nix+zJjnBmmio1a1xWMA==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-basic": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-basic/-/codemirror-theme-basic-4.23.11.tgz", - "integrity": "sha512-7gUyRD94dJFS+axqSuRycStCkJEbjmw1OwZBiP0aly7SpE7kH02EhnHXsLxF2Bn/HTAzWJqUwMzpX5pTz6blfg==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-bbedit": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-bbedit/-/codemirror-theme-bbedit-4.23.11.tgz", - "integrity": "sha512-m5A+BRrlk/JQiNk7MJF0ZbhIeH1RFR/Ds7bcBZvX2aCPGgYoacvydwc5TnWhvfTBPmWvih6BCI5CctbmKg3ESQ==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-bespin": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-bespin/-/codemirror-theme-bespin-4.23.11.tgz", - "integrity": "sha512-dUiAlvFWFDTGEo4YXIHpRWuKA4XlHWfJKqDTHb1Pvd9Mv3Vn9zlxqK00dCRtvetjwIAuWzR+6KlOjyyEasFTKw==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-console": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-console/-/codemirror-theme-console-4.23.11.tgz", - "integrity": "sha512-mj+w3m0bcAk/0ScqAWdneenEK175Ids8+yKi39R0ZGYW2N0wBQqLIUClWOPPsl/eZuci9RwXcsV9QynGCGnEsA==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" } }, "node_modules/@uiw/codemirror-theme-copilot": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-copilot/-/codemirror-theme-copilot-4.23.11.tgz", - "integrity": "sha512-m6vvsWHbji0s25ly3L35BdjSMys4DL3dzb4wbVtYa7m79heA3h2YNiWFIkOjbyPtoOh4RUGB6tBT8z0J/5PmTA==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-darcula": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-darcula/-/codemirror-theme-darcula-4.23.11.tgz", - "integrity": "sha512-H+vgtteL6CSlcfTd8LOGdthuVS05wLVWQEFxRZrXpnaOxYk4fEkY2XGI6rGX6snnBsKROXm2Kdd/Asxlxbpfgw==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-dracula": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-dracula/-/codemirror-theme-dracula-4.23.11.tgz", - "integrity": "sha512-OdiDo4AN3/1WeJGtQIJEifgxAINR7hzrafy223eh8I5/g0iuRQy8Cd2D9tAEB9qeKWHKJijuPRWpBeSL/ktK3w==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-duotone": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-duotone/-/codemirror-theme-duotone-4.23.11.tgz", - "integrity": "sha512-pQKxnfwcK/zi+4QxEnwnxk19jRh3e67diORkbdG26feIr+UuaRe3RJnbpDdX2mXoQEtmUpGJsS9IGhGnZop30g==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-eclipse": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-eclipse/-/codemirror-theme-eclipse-4.23.11.tgz", - "integrity": "sha512-VCOTzuMZfS2oOPcvpYSmGh5mKN+cgUR2yLEo/hTgdysnOgIyVzBiLM4QC5uHG+MuiFLKttWIvTToSNVB+CFccw==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-github": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-github/-/codemirror-theme-github-4.23.11.tgz", - "integrity": "sha512-it/FjMR6OgHlE8dz5R8x+bLpnRcfonNCPFbuaNFr8ouKbdill6djSY5+SsUePHgmmlsX0mi5wTbUAW8U7dVDCQ==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-gruvbox-dark": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-gruvbox-dark/-/codemirror-theme-gruvbox-dark-4.23.11.tgz", - "integrity": "sha512-QvK6N5jkzFwoDllCfa0sExWTvLwU77/XyG8JbvDC7BZmkNGWcl5hGU7Cf2QxDrJfbnYAgoJoz3oNp8/YNg5OFg==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-kimbie": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-kimbie/-/codemirror-theme-kimbie-4.23.11.tgz", - "integrity": "sha512-heso7a0YDMbQrof0i2CJblthIVLV4hIfuaNkk/KeTbSmizkQp2Jp2QIJaR1HNSjOCz0r6/j8ThwbVNDb3nv3lg==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-material": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-material/-/codemirror-theme-material-4.23.11.tgz", - "integrity": "sha512-5dF54PiozGFyxNrxJTKtdl0wdqdDeianA5KYW7UQjJndGtmt8eQBJBZ8YvLmHf5z54I42CqbpaWKJtipajDyHg==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-monokai": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-monokai/-/codemirror-theme-monokai-4.23.11.tgz", - "integrity": "sha512-HtxFcsVSG1LEP7t+FlZsM+D5jYG3ylrao8o1+GnzlQvM2l7RMVnRyCcHabvxhGKi2y+FYZ/SMbE5joljo32QyA==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-monokai-dimmed": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-monokai-dimmed/-/codemirror-theme-monokai-dimmed-4.23.11.tgz", - "integrity": "sha512-RG2sysUs0cEe5S1BQthpGn0qwty5mbQVNGVlg+PKcdaPbiMT/TKupC9lTHL/+u9uGhT/MRWno0PCPGvBOJfg3g==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-noctis-lilac": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-noctis-lilac/-/codemirror-theme-noctis-lilac-4.23.11.tgz", - "integrity": "sha512-cZeKxm53NbrJCKg8w6stmT9CXILWbysDdrUrSqv7enqe60wwvUsqRuMPwkOuLoznLHNfgPrPIZojP06K8hRk1Q==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-nord": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-nord/-/codemirror-theme-nord-4.23.11.tgz", - "integrity": "sha512-bbeXuRGmj5Jp1p7rSv7fhb5EDc06hmElSHV6BdqKEuIMn9G9b2kMAxyF5guDmlIDgAXaSHTKm9lqj199WuGatA==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-okaidia": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-okaidia/-/codemirror-theme-okaidia-4.23.11.tgz", - "integrity": "sha512-9vRxdGOuc8wzFzEckIVlTaMTFb0MkhLir/dtXTgp/ZYhslPuqkyOK+VWqbLxON1xTvVNpsJd9sVskU2MycI9Hw==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-quietlight": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-quietlight/-/codemirror-theme-quietlight-4.23.11.tgz", - "integrity": "sha512-dvxXUKyh3XFNSnQRwAore524mG98jqXh1XNjnhyUj5QJfN9AoXt1vExlZb0fsxCOoEkCdmjKed7scdmugJADMw==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-red": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-red/-/codemirror-theme-red-4.23.11.tgz", - "integrity": "sha512-8dCMRnU96GNr7vKOIQQB24jyzbYCZOS5YNLem6UzCE1fEXP3fk0ZuGjSQ34WF1pw3KgbiglKSgK4aZEDg2PHYA==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-solarized": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-solarized/-/codemirror-theme-solarized-4.23.11.tgz", - "integrity": "sha512-AKbimVNu3tSqYNmAXYfU6fjmpULg/sRuaMrptLHYp3+sxuE0oMrushKFOGG+Se94Kf+9jS16IXls1fqc3OXaHA==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-sublime": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-sublime/-/codemirror-theme-sublime-4.23.11.tgz", - "integrity": "sha512-lYv/zqw00eMq1MTk1uIi674+q39mm3Lc8XfLTsnbPNmdcDBdugkDqlgEs4oxgruWFDFkuAE6unbE4gcKMy6QxQ==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-tokyo-night": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-tokyo-night/-/codemirror-theme-tokyo-night-4.23.11.tgz", - "integrity": "sha512-npnHmOT3TTzUjM+0Q8I2cmZ+cyYoVpetTfBnsoS9/sJrNAlCxXGd6HWpLtOVXBhCRjTRtwP7y207jaIgYM9fAQ==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-tokyo-night-day": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-tokyo-night-day/-/codemirror-theme-tokyo-night-day-4.23.11.tgz", - "integrity": "sha512-9Jvimv1vSdug3Cq6oOimTVvU/ewwUcrt2c+LX9zif4bSK9BnheU3y0yeQAasbbPZwX5iaPFIbzG1COeFia9oag==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-tokyo-night-storm": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-tokyo-night-storm/-/codemirror-theme-tokyo-night-storm-4.23.11.tgz", - "integrity": "sha512-fMcdk0AbiGDroz5xopZX4LGMTjvlwDfda+t8wDyOG4/b7J+fKDAZ2LjXLIlJnh8AWSyOy31j+CNlscvYH9AbNw==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-tomorrow-night-blue": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-tomorrow-night-blue/-/codemirror-theme-tomorrow-night-blue-4.23.11.tgz", - "integrity": "sha512-exN2u5j3ZKxmoA0ntX4B7mGRxAhOCcMufsBYWBWYjgaHt6J0gEFkb9F7Do5Cj69Sg9wQylxu5JKVOA8RjYFLRQ==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-vscode": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-vscode/-/codemirror-theme-vscode-4.23.11.tgz", - "integrity": "sha512-d7NlVntrRG4/2IIs9NMHcTa1d2bEvEg3NP2SKDK4rBZDogpv0+9c6giutx06BySYBLm9M+i3H+sf42Rexy8ncg==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-white": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-white/-/codemirror-theme-white-4.23.11.tgz", - "integrity": "sha512-In9OQM/MEPrzkymqyK2w0ebpffgjKawVXIiDT2RrB1hw455K3y3geexYsggo9ShjwnqrCaZ3pmQikE13BiDH3Q==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-theme-xcode": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-xcode/-/codemirror-theme-xcode-4.23.11.tgz", - "integrity": "sha512-mFcPQDR/ZiOeJKrT82mp6Fa30VEypuXxSvU5AxC8worUkqglBOq3kNaT9e53raM6v4SvykqlbozhzmGU2fYXAw==", + "version": "4.25.5", "license": "MIT", "dependencies": { - "@uiw/codemirror-themes": "4.23.11" + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" } }, "node_modules/@uiw/codemirror-themes": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-themes/-/codemirror-themes-4.23.11.tgz", - "integrity": "sha512-90joUOau/3E6KNdA5ePr/t8LVBA/426wIsOuwaZohsDM5a5gsYfdMWGYfClnLMkpfHJUDYYMO+b2JPhJf9mzHw==", + "version": "4.25.5", "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", @@ -7876,47 +8229,45 @@ } }, "node_modules/@uiw/codemirror-themes-all": { - "version": "4.23.11", - "resolved": "https://registry.npmjs.org/@uiw/codemirror-themes-all/-/codemirror-themes-all-4.23.11.tgz", - "integrity": "sha512-KmIFryWBkAjavOo0LQ/wt2V+UchDs06WA9tRwMZ7I4Eqi5I/ws5BLyNa6ElEt9cetdvwTtOBCeiGh3o4ig3UhQ==", - "license": "MIT", - "dependencies": { - "@uiw/codemirror-theme-abcdef": "4.23.11", - "@uiw/codemirror-theme-abyss": "4.23.11", - "@uiw/codemirror-theme-androidstudio": "4.23.11", - "@uiw/codemirror-theme-andromeda": "4.23.11", - "@uiw/codemirror-theme-atomone": "4.23.11", - "@uiw/codemirror-theme-aura": "4.23.11", - "@uiw/codemirror-theme-basic": "4.23.11", - "@uiw/codemirror-theme-bbedit": "4.23.11", - "@uiw/codemirror-theme-bespin": "4.23.11", - "@uiw/codemirror-theme-console": "4.23.11", - "@uiw/codemirror-theme-copilot": "4.23.11", - "@uiw/codemirror-theme-darcula": "4.23.11", - "@uiw/codemirror-theme-dracula": "4.23.11", - "@uiw/codemirror-theme-duotone": "4.23.11", - "@uiw/codemirror-theme-eclipse": "4.23.11", - "@uiw/codemirror-theme-github": "4.23.11", - "@uiw/codemirror-theme-gruvbox-dark": "4.23.11", - "@uiw/codemirror-theme-kimbie": "4.23.11", - "@uiw/codemirror-theme-material": "4.23.11", - "@uiw/codemirror-theme-monokai": "4.23.11", - "@uiw/codemirror-theme-monokai-dimmed": "4.23.11", - "@uiw/codemirror-theme-noctis-lilac": "4.23.11", - "@uiw/codemirror-theme-nord": "4.23.11", - "@uiw/codemirror-theme-okaidia": "4.23.11", - "@uiw/codemirror-theme-quietlight": "4.23.11", - "@uiw/codemirror-theme-red": "4.23.11", - "@uiw/codemirror-theme-solarized": "4.23.11", - "@uiw/codemirror-theme-sublime": "4.23.11", - "@uiw/codemirror-theme-tokyo-night": "4.23.11", - "@uiw/codemirror-theme-tokyo-night-day": "4.23.11", - "@uiw/codemirror-theme-tokyo-night-storm": "4.23.11", - "@uiw/codemirror-theme-tomorrow-night-blue": "4.23.11", - "@uiw/codemirror-theme-vscode": "4.23.11", - "@uiw/codemirror-theme-white": "4.23.11", - "@uiw/codemirror-theme-xcode": "4.23.11", - "@uiw/codemirror-themes": "4.23.11" + "version": "4.25.5", + "license": "MIT", + "dependencies": { + "@uiw/codemirror-theme-abcdef": "4.25.5", + "@uiw/codemirror-theme-abyss": "4.25.5", + "@uiw/codemirror-theme-androidstudio": "4.25.5", + "@uiw/codemirror-theme-andromeda": "4.25.5", + "@uiw/codemirror-theme-atomone": "4.25.5", + "@uiw/codemirror-theme-aura": "4.25.5", + "@uiw/codemirror-theme-basic": "4.25.5", + "@uiw/codemirror-theme-bbedit": "4.25.5", + "@uiw/codemirror-theme-bespin": "4.25.5", + "@uiw/codemirror-theme-console": "4.25.5", + "@uiw/codemirror-theme-copilot": "4.25.5", + "@uiw/codemirror-theme-darcula": "4.25.5", + "@uiw/codemirror-theme-dracula": "4.25.5", + "@uiw/codemirror-theme-duotone": "4.25.5", + "@uiw/codemirror-theme-eclipse": "4.25.5", + "@uiw/codemirror-theme-github": "4.25.5", + "@uiw/codemirror-theme-gruvbox-dark": "4.25.5", + "@uiw/codemirror-theme-kimbie": "4.25.5", + "@uiw/codemirror-theme-material": "4.25.5", + "@uiw/codemirror-theme-monokai": "4.25.5", + "@uiw/codemirror-theme-monokai-dimmed": "4.25.5", + "@uiw/codemirror-theme-noctis-lilac": "4.25.5", + "@uiw/codemirror-theme-nord": "4.25.5", + "@uiw/codemirror-theme-okaidia": "4.25.5", + "@uiw/codemirror-theme-quietlight": "4.25.5", + "@uiw/codemirror-theme-red": "4.25.5", + "@uiw/codemirror-theme-solarized": "4.25.5", + "@uiw/codemirror-theme-sublime": "4.25.5", + "@uiw/codemirror-theme-tokyo-night": "4.25.5", + "@uiw/codemirror-theme-tokyo-night-day": "4.25.5", + "@uiw/codemirror-theme-tokyo-night-storm": "4.25.5", + "@uiw/codemirror-theme-tomorrow-night-blue": "4.25.5", + "@uiw/codemirror-theme-vscode": "4.25.5", + "@uiw/codemirror-theme-white": "4.25.5", + "@uiw/codemirror-theme-xcode": "4.25.5", + "@uiw/codemirror-themes": "4.25.5" }, "funding": { "url": "https://jaywcjlove.github.io/#/sponsor" @@ -7924,14 +8275,10 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "license": "ISC" }, "node_modules/@vitejs/plugin-react": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", - "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", "dev": true, "license": "MIT", "dependencies": { @@ -7951,8 +8298,6 @@ }, "node_modules/@vitejs/plugin-react/node_modules/react-refresh": { "version": "0.17.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", "dev": true, "license": "MIT", "engines": { @@ -7961,8 +8306,6 @@ }, "node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" @@ -7972,22 +8315,19 @@ } }, "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "version": "1.3.8", "license": "MIT", + "peer": true, "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", "dev": true, "license": "MIT", "bin": { @@ -7999,8 +8339,6 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -8008,9 +8346,7 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "version": "8.3.5", "dev": true, "license": "MIT", "dependencies": { @@ -8022,14 +8358,10 @@ }, "node_modules/adaptivecards": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/adaptivecards/-/adaptivecards-1.2.3.tgz", - "integrity": "sha512-amQ5OSW3OpIkrxVKLjxVBPk/T49yuOtnqs1z5ZPfZr0+OpTovzmiHbyoAGDIsu5SNYHwOZFp/3LGOnRaALFa/g==", "license": "MIT" }, "node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "version": "7.1.4", "license": "MIT", "engines": { "node": ">= 14" @@ -8037,8 +8369,6 @@ }, "node_modules/agentkeepalive": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", "license": "MIT", "peer": true, "dependencies": { @@ -8049,15 +8379,14 @@ } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "6.14.0", + "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { "type": "github", @@ -8066,8 +8395,6 @@ }, "node_modules/ajv-formats": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -8081,10 +8408,26 @@ } } }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.18.0", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, "node_modules/ansi-colors": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "license": "MIT", "engines": { "node": ">=6" @@ -8092,8 +8435,6 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8108,8 +8449,6 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -8117,8 +8456,6 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -8132,15 +8469,11 @@ }, "node_modules/any-promise": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true, "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "license": "ISC", "dependencies": { @@ -8153,8 +8486,6 @@ }, "node_modules/anymatch/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -8166,25 +8497,15 @@ }, "node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true, "license": "MIT" }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "license": "Python-2.0" }, "node_modules/aria-hidden": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", - "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", "dev": true, "license": "MIT", "dependencies": { @@ -8196,8 +8517,6 @@ }, "node_modules/array-back": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, "license": "MIT", "engines": { @@ -8206,8 +8525,6 @@ }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { @@ -8223,23 +8540,22 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "version": "3.1.9", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8248,20 +8564,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/array.prototype.findlastindex": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8282,8 +8586,6 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { @@ -8301,8 +8603,6 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { @@ -8320,8 +8620,6 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8342,15 +8640,20 @@ }, "node_modules/asap": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true, "license": "MIT" }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, "node_modules/asn1.js": { "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "license": "MIT", "dependencies": { "bn.js": "^4.0.0", @@ -8359,35 +8662,20 @@ } }, "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", "license": "MIT" }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dev": true, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, "engines": { - "node": ">=4" + "node": ">=0.8" } }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, "node_modules/async-function": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { @@ -8396,14 +8684,19 @@ }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" @@ -8416,20 +8709,16 @@ } }, "node_modules/axios": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.0.tgz", - "integrity": "sha512-oXTDccv8PcfjZmPGlWsPSwtOJCZ/b6W5jAMCNcfwJbCzDckwG0jrYJFaWH1yvivfCXjVzV/SPDEhMB3Q+DSurg==", + "version": "1.13.5", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "node_modules/babel-jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "license": "MIT", "dependencies": { @@ -8450,8 +8739,6 @@ }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8467,8 +8754,6 @@ }, "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8482,20 +8767,8 @@ "node": ">=8" } }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/babel-plugin-jest-hoist": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, "license": "MIT", "dependencies": { @@ -8509,9 +8782,7 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "version": "1.2.0", "dev": true, "license": "MIT", "dependencies": { @@ -8532,13 +8803,11 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, "license": "MIT", "dependencies": { @@ -8554,8 +8823,6 @@ }, "node_modules/bail": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "license": "MIT", "funding": { "type": "github", @@ -8564,14 +8831,10 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -8590,50 +8853,33 @@ }, "node_modules/base64url": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/baseline-browser-mapping": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.29.tgz", - "integrity": "sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==", + "version": "2.10.0", "dev": true, "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", - "dev": true, - "license": "MIT", + "baseline-browser-mapping": "dist/cli.cjs" + }, "engines": { - "node": ">=10.0.0" + "node": ">=6.0.0" } }, - "node_modules/better-path-resolve": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", - "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", - "dev": true, - "license": "MIT", + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", "dependencies": { - "is-windows": "^1.0.0" - }, - "engines": { - "node": ">=4" + "tweetnacl": "^0.14.3" } }, "node_modules/binary-extensions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "license": "MIT", "engines": { @@ -8643,108 +8889,87 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, + "node_modules/bn.js": { + "version": "5.2.3", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.4", "license": "MIT", + "peer": true, "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", "license": "MIT", + "peer": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "ms": "2.0.0" } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", "license": "MIT", + "peer": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/bn.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", - "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", - "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", "license": "MIT", + "peer": true + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.14.2", + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" + "side-channel": "^1.1.0" }, "engines": { - "node": ">=18" + "node": ">=0.6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "node_modules/body-parser/node_modules/raw-body": { + "version": "2.5.3", "license": "MIT", + "peer": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">= 0.8" } }, "node_modules/botbuilder": { "version": "4.23.1", - "resolved": "https://registry.npmjs.org/botbuilder/-/botbuilder-4.23.1.tgz", - "integrity": "sha512-0yCkRfeeeDXPic1bo9xX9Dj/SyUDB0nNAoxxSOpBxSbClztV+Mupx2rTtExMcUKRUbSUWIKYWHL9htkT2ya5JA==", "license": "MIT", "dependencies": { "@azure/core-http": "^3.0.4", @@ -8765,8 +8990,6 @@ }, "node_modules/botbuilder-core": { "version": "4.23.1", - "resolved": "https://registry.npmjs.org/botbuilder-core/-/botbuilder-core-4.23.1.tgz", - "integrity": "sha512-lgWZ5Z8jl6MuVGxooq9eaJK/Jdqu5opJ3K3kQ/yFxG/C7VNte93BHeYviERESUMvcCNOhMRIiTrKyVYfKO4NDw==", "license": "MIT", "dependencies": { "botbuilder-dialogs-adaptive-runtime-core": "4.23.1-preview", @@ -8779,8 +9002,6 @@ }, "node_modules/botbuilder-core/node_modules/uuid": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -8792,8 +9013,6 @@ }, "node_modules/botbuilder-dialogs-adaptive-runtime-core": { "version": "4.23.1-preview", - "resolved": "https://registry.npmjs.org/botbuilder-dialogs-adaptive-runtime-core/-/botbuilder-dialogs-adaptive-runtime-core-4.23.1-preview.tgz", - "integrity": "sha512-6au9eGmEIpscP+cLYZ2G71azlj1E8rwL3WpAqfBG2RlWZCOuWH9uFNh2V9lg/KrDC2ks3O2YFk0tCym40i0XLQ==", "license": "MIT", "dependencies": { "dependency-graph": "^1.0.0" @@ -8801,49 +9020,63 @@ }, "node_modules/botbuilder-stdlib": { "version": "4.23.1-internal", - "resolved": "https://registry.npmjs.org/botbuilder-stdlib/-/botbuilder-stdlib-4.23.1-internal.tgz", - "integrity": "sha512-ChtEcnSRCDRgFuMN6ji24fHqtMERdDUP/WENX6iZQwtQUEUb12G3PcYWuaOEQhllSae6qfo3QsDW0kjGsrBX+Q==", "license": "MIT" }, - "node_modules/botbuilder/node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "node_modules/botbuilder/node_modules/@azure/msal-common": { + "version": "14.16.1", "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, "engines": { - "node": ">=14.14" + "node": ">=0.8.0" } }, - "node_modules/botbuilder/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/botbuilder/node_modules/@azure/msal-node": { + "version": "2.16.3", "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "@azure/msal-common": "14.16.1", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=16" } }, - "node_modules/botbuilder/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/botbuilder/node_modules/@azure/msal-node/node_modules/uuid": { + "version": "8.3.2", "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/botbuilder/node_modules/entities": { + "version": "4.5.0", + "license": "BSD-2-Clause", "engines": { - "node": ">= 10.0.0" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/botbuilder/node_modules/htmlparser2": { + "version": "9.1.0", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" } }, "node_modules/botbuilder/node_modules/uuid": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -8855,8 +9088,6 @@ }, "node_modules/botframework-connector": { "version": "4.23.1", - "resolved": "https://registry.npmjs.org/botframework-connector/-/botframework-connector-4.23.1.tgz", - "integrity": "sha512-UqOdVndOGNN1dgtLEKDD1rObPPI32tPwyrtU8WDuVukaPSL7KYp6z1SjudZ9ywDcrt5z+Rkbz2kGzaSidCVZWA==", "license": "MIT", "dependencies": { "@azure/core-http": "^3.0.4", @@ -8881,19 +9112,59 @@ "zod": "^3.23.8" } }, + "node_modules/botframework-connector/node_modules/@azure/msal-common": { + "version": "14.16.1", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/botframework-connector/node_modules/@azure/msal-node": { + "version": "2.16.3", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "14.16.1", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/botframework-connector/node_modules/@types/jsonwebtoken": { "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz", - "integrity": "sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==", "license": "MIT", "dependencies": { "@types/node": "*" } }, + "node_modules/botframework-connector/node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/botframework-connector/node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/botframework-schema": { "version": "4.23.1", - "resolved": "https://registry.npmjs.org/botframework-schema/-/botframework-schema-4.23.1.tgz", - "integrity": "sha512-J/cjL9IFewO3Q2yuV+QGtWyzVFPgKCp/3adY5/+0MrBQasJS5IIGm45W4CV/uYuoAstOIpYJ9nQPzvNWbDN16g==", "license": "MIT", "dependencies": { "adaptivecards": "1.2.3", @@ -8903,8 +9174,6 @@ }, "node_modules/botframework-schema/node_modules/uuid": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -8916,8 +9185,6 @@ }, "node_modules/botframework-streaming": { "version": "4.23.1", - "resolved": "https://registry.npmjs.org/botframework-streaming/-/botframework-streaming-4.23.1.tgz", - "integrity": "sha512-/BjIu2BR8y/HOdJ+Wdr1nZUvW2W53G8whH65msvM95kmjEyqskeEWP62xDpZLA1OM3sLD9APNix69BX1awcbdw==", "license": "MIT", "dependencies": { "@types/node": "18.19.47", @@ -8928,23 +9195,24 @@ }, "node_modules/botframework-streaming/node_modules/@types/node": { "version": "18.19.47", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.47.tgz", - "integrity": "sha512-1f7dB3BL/bpd9tnDJrrHb66Y+cVrhxSOTGorRNdHwYTUlTay3HuTDPKo9a/4vX9pMQkhYBcAbL4jQdNlhCFP9A==", "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/botframework-streaming/node_modules/@types/ws": { + "version": "6.0.4", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/botframework-streaming/node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "license": "MIT" }, "node_modules/botframework-streaming/node_modules/uuid": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -8956,8 +9224,6 @@ }, "node_modules/botframework-streaming/node_modules/ws": { "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", "engines": { "node": ">=8.3.0" @@ -8976,18 +9242,16 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "1.1.12", + "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { @@ -8999,21 +9263,15 @@ }, "node_modules/brorand": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "license": "MIT" }, "node_modules/browser-or-node": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-3.0.0.tgz", - "integrity": "sha512-iczIdVJzGEYhP5DqQxYM9Hh7Ztpqqi+CXZpSmX8ALFs9ecXkQIeqRyM6TfxEfMVpwhl3dSuDvxdzzo9sUOIVBQ==", "dev": true, "license": "MIT" }, "node_modules/browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "license": "MIT", "dependencies": { "buffer-xor": "^1.0.3", @@ -9026,8 +9284,6 @@ }, "node_modules/browserify-cipher": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "license": "MIT", "dependencies": { "browserify-aes": "^1.0.4", @@ -9037,8 +9293,6 @@ }, "node_modules/browserify-des": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", @@ -9049,8 +9303,6 @@ }, "node_modules/browserify-rsa": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", - "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "license": "MIT", "dependencies": { "bn.js": "^5.2.1", @@ -9062,72 +9314,25 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", - "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "version": "4.2.5", "license": "ISC", "dependencies": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", + "bn.js": "^5.2.2", + "browserify-rsa": "^4.1.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.5", - "hash-base": "~3.0", + "elliptic": "^6.6.1", "inherits": "^2.0.4", - "parse-asn1": "^5.1.7", + "parse-asn1": "^5.1.9", "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 0.12" - } - }, - "node_modules/browserify-sign/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/browserify-sign/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "node": ">= 0.10" } }, - "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, "node_modules/browserslist": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", - "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "version": "4.28.1", "dev": true, "funding": [ { @@ -9145,11 +9350,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.25", - "caniuse-lite": "^1.0.30001754", - "electron-to-chromium": "^1.5.249", + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", - "update-browserslist-db": "^1.1.4" + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -9160,8 +9365,6 @@ }, "node_modules/bs-logger": { "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "license": "MIT", "dependencies": { @@ -9173,8 +9376,6 @@ }, "node_modules/bser": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9183,8 +9384,6 @@ }, "node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -9207,33 +9406,23 @@ }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", "license": "BSD-3-Clause" }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, "license": "MIT" }, "node_modules/buffer-xor": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "license": "MIT" }, "node_modules/builtin-status-codes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "license": "MIT" }, "node_modules/bundle-name": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "license": "MIT", "dependencies": { "run-applescript": "^7.0.0" @@ -9247,8 +9436,6 @@ }, "node_modules/bundle-require": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", - "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", "dev": true, "license": "MIT", "dependencies": { @@ -9263,8 +9450,6 @@ }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -9272,8 +9457,6 @@ }, "node_modules/cac": { "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, "license": "MIT", "engines": { @@ -9282,8 +9465,6 @@ }, "node_modules/call-bind": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", @@ -9300,8 +9481,6 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -9313,8 +9492,6 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -9329,8 +9506,6 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { @@ -9339,8 +9514,6 @@ }, "node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", "engines": { @@ -9348,9 +9521,7 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001755", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001755.tgz", - "integrity": "sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==", + "version": "1.0.30001774", "dev": true, "funding": [ { @@ -9370,8 +9541,6 @@ }, "node_modules/ccount": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "license": "MIT", "funding": { "type": "github", @@ -9380,8 +9549,6 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -9397,8 +9564,6 @@ }, "node_modules/chalk-template": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", "dev": true, "license": "MIT", "dependencies": { @@ -9411,16 +9576,8 @@ "url": "https://github.com/chalk/chalk-template?sponsor=1" } }, - "node_modules/change-case": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", - "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", - "license": "MIT" - }, "node_modules/char-regex": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, "license": "MIT", "engines": { @@ -9429,8 +9586,6 @@ }, "node_modules/character-entities": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "license": "MIT", "funding": { "type": "github", @@ -9439,8 +9594,6 @@ }, "node_modules/character-entities-html4": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "license": "MIT", "funding": { "type": "github", @@ -9449,8 +9602,6 @@ }, "node_modules/character-entities-legacy": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", "license": "MIT", "funding": { "type": "github", @@ -9459,56 +9610,33 @@ }, "node_modules/character-reference-invalid": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/chardet": { + "version": "2.1.1", "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } + "license": "MIT" }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/chokidar": { + "version": "4.0.3", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 6" + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/ci-info": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -9522,13 +9650,12 @@ } }, "node_modules/cipher-base": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", - "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "version": "1.0.7", "license": "MIT", "dependencies": { "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" }, "engines": { "node": ">= 0.10" @@ -9536,15 +9663,11 @@ }, "node_modules/cjs-module-lexer": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", "dev": true, "license": "MIT" }, "node_modules/class-variance-authority": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9554,46 +9677,16 @@ "url": "https://polar.sh/cva" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "version": "4.1.0", "dev": true, "license": "ISC", "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -9606,8 +9699,6 @@ }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -9621,20 +9712,8 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, "node_modules/clsx": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "dev": true, "license": "MIT", "engines": { @@ -9643,8 +9722,6 @@ }, "node_modules/cmdk": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz", - "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", "dev": true, "license": "MIT", "dependencies": { @@ -9660,8 +9737,6 @@ }, "node_modules/co": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, "license": "MIT", "engines": { @@ -9670,9 +9745,7 @@ } }, "node_modules/codemirror": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", - "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", + "version": "6.0.2", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.0.0", @@ -9685,23 +9758,17 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "version": "1.0.3", "dev": true, "license": "MIT" }, "node_modules/collection-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collection-utils/-/collection-utils-1.0.1.tgz", - "integrity": "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==", "dev": true, "license": "Apache-2.0" }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -9712,20 +9779,14 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/colorette": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -9736,8 +9797,6 @@ }, "node_modules/comma-separated-tokens": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "license": "MIT", "funding": { "type": "github", @@ -9746,8 +9805,6 @@ }, "node_modules/command-line-args": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, "license": "MIT", "dependencies": { @@ -9762,8 +9819,6 @@ }, "node_modules/command-line-usage": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz", - "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9778,8 +9833,6 @@ }, "node_modules/command-line-usage/node_modules/array-back": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "dev": true, "license": "MIT", "engines": { @@ -9788,8 +9841,6 @@ }, "node_modules/command-line-usage/node_modules/typical": { "version": "7.3.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.3.0.tgz", - "integrity": "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==", "dev": true, "license": "MIT", "engines": { @@ -9797,19 +9848,15 @@ } }, "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "version": "4.1.1", "dev": true, "license": "MIT", "engines": { - "node": ">=14" + "node": ">= 6" } }, "node_modules/component-emitter": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", "dev": true, "license": "MIT", "funding": { @@ -9818,15 +9865,11 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "license": "MIT" }, "node_modules/concurrently": { "version": "9.2.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", - "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", "dev": true, "license": "MIT", "dependencies": { @@ -9848,10 +9891,16 @@ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, + "node_modules/concurrently/node_modules/rxjs": { + "version": "7.8.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/concurrently/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9864,10 +9913,13 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/confbox": { + "version": "0.1.8", + "dev": true, + "license": "MIT" + }, "node_modules/consola": { "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", "dev": true, "license": "MIT", "engines": { @@ -9875,10 +9927,9 @@ } }, "node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "version": "0.5.4", "license": "MIT", + "peer": true, "dependencies": { "safe-buffer": "5.2.1" }, @@ -9888,8 +9939,6 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9897,46 +9946,36 @@ }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "version": "1.1.1", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "version": "1.0.7", "license": "MIT", - "engines": { - "node": ">=6.6.0" - } + "peer": true }, "node_modules/cookiejar": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "dev": true, "license": "MIT" }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "license": "MIT" }, "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "version": "2.8.6", "license": "MIT", "dependencies": { "object-assign": "^4", @@ -9944,12 +9983,14 @@ }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/create-ecdh": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "license": "MIT", "dependencies": { "bn.js": "^4.1.0", @@ -9957,15 +9998,11 @@ } }, "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", "license": "MIT" }, "node_modules/create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", @@ -9977,8 +10014,6 @@ }, "node_modules/create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", @@ -9991,8 +10026,6 @@ }, "node_modules/create-jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10013,21 +10046,15 @@ }, "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, "license": "MIT" }, "node_modules/crelt": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", "license": "MIT" }, "node_modules/cross-env": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, "license": "MIT", "dependencies": { @@ -10045,17 +10072,31 @@ }, "node_modules/cross-fetch": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", - "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" } }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/cross-spawn": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -10068,8 +10109,6 @@ }, "node_modules/crypto-browserify": { "version": "3.12.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", - "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", "license": "MIT", "dependencies": { "browserify-cipher": "^1.0.1", @@ -10093,25 +10132,64 @@ } }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "version": "3.2.3", + "license": "MIT" + }, + "node_modules/csv": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/csv/-/csv-6.5.1.tgz", + "integrity": "sha512-oZwQSayvtn3nGrLUl8epnbfSCsvhOmCKeMHEOVmZ/3YCTG+x26nhgrP1vB3Kjs4lUJF6jcsjjIEn2gYbbq5+Gw==", + "license": "MIT", + "dependencies": { + "csv-generate": "^4.5.1", + "csv-parse": "^6.2.1", + "csv-stringify": "^6.7.0", + "stream-transform": "^3.4.1" + }, + "engines": { + "node": ">= 0.1.90" + } + }, + "node_modules/csv-generate": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-4.5.1.tgz", + "integrity": "sha512-nWVtFBfyK+YX1fHtKkMqzULc6sH5ise6baD64SmYTq3GEDSErVZ5xzyMa0hNP/a9PGJTTTyQTU69xpjcuCx2IA==", + "license": "MIT" + }, + "node_modules/csv-parse": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-6.2.1.tgz", + "integrity": "sha512-LRLMV+UCyfMokp8Wb411duBf1gaBKJfOfBWU9eHMJ+b+cJYZsNu3AFmjJf3+yPGd59Exz1TsMjaSFyxnYB9+IQ==", "license": "MIT" }, + "node_modules/csv-stringify": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.7.0.tgz", + "integrity": "sha512-UdtziYp5HuTz7e5j8Nvq+a/3HQo+2/aJZ9xntNTpmRRIg/3YYqDVgiS9fvAhtNbnyfbv2ZBe0bqCHqzhE7FqWQ==", + "license": "MIT" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "version": "4.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">= 14" + "node": ">= 12" } }, "node_modules/data-view-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10128,8 +10206,6 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10146,8 +10222,6 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10164,8 +10238,6 @@ }, "node_modules/date-fns": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", - "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", "license": "MIT", "funding": { "type": "github", @@ -10173,15 +10245,11 @@ } }, "node_modules/dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "version": "1.11.19", "license": "MIT" }, "node_modules/debug": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -10196,9 +10264,7 @@ } }, "node_modules/decode-named-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz", - "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", + "version": "1.3.0", "license": "MIT", "dependencies": { "character-entities": "^2.0.0" @@ -10209,9 +10275,7 @@ } }, "node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "version": "1.7.1", "dev": true, "license": "MIT", "peerDependencies": { @@ -10223,27 +10287,13 @@ } } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, "license": "MIT", "engines": { @@ -10251,9 +10301,7 @@ } }, "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "version": "5.5.0", "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", @@ -10267,9 +10315,7 @@ } }, "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "version": "5.0.1", "license": "MIT", "engines": { "node": ">=18" @@ -10278,23 +10324,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -10310,8 +10341,6 @@ }, "node_modules/define-lazy-prop": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "license": "MIT", "engines": { "node": ">=12" @@ -10322,8 +10351,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -10338,104 +10365,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/del": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/del/-/del-8.0.1.tgz", - "integrity": "sha512-gPqh0mKTPvaUZGAuHbrBUYKZWBNAeHG7TU3QH5EhVwPMyKvmfJaNXhcD2jTcXsJRRcffuho4vaYweu80dRrMGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "globby": "^14.0.2", - "is-glob": "^4.0.3", - "is-path-cwd": "^3.0.0", - "is-path-inside": "^4.0.0", - "p-map": "^7.0.2", - "presentable-error": "^0.0.1", - "slash": "^5.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/del/node_modules/globby": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", - "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/del/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/del/node_modules/path-type": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", - "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/del/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "license": "MIT", "engines": { "node": ">=0.4.0" @@ -10443,8 +10374,6 @@ }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -10452,8 +10381,6 @@ }, "node_modules/dependency-graph": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", - "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", "license": "MIT", "engines": { "node": ">=4" @@ -10461,8 +10388,6 @@ }, "node_modules/dequal": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "license": "MIT", "engines": { "node": ">=6" @@ -10470,8 +10395,6 @@ }, "node_modules/des.js": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "license": "MIT", "dependencies": { "inherits": "^2.0.1", @@ -10480,45 +10403,34 @@ }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/detect-newline": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT" + }, "node_modules/detect-node-es": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", "dev": true, "license": "MIT" }, "node_modules/devlop": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "license": "MIT", "dependencies": { "dequal": "^2.0.0" @@ -10530,8 +10442,6 @@ }, "node_modules/dezalgo": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, "license": "ISC", "dependencies": { @@ -10540,9 +10450,7 @@ } }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -10551,8 +10459,6 @@ }, "node_modules/diff-sequences": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "license": "MIT", "engines": { @@ -10561,8 +10467,6 @@ }, "node_modules/diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "license": "MIT", "dependencies": { "bn.js": "^4.1.0", @@ -10571,28 +10475,11 @@ } }, "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", "license": "MIT" }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10602,20 +10489,8 @@ "node": ">=0.10.0" } }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, "node_modules/dom-serializer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", @@ -10626,10 +10501,18 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/domelementtype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "funding": [ { "type": "github", @@ -10640,8 +10523,6 @@ }, "node_modules/domhandler": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" @@ -10655,8 +10536,6 @@ }, "node_modules/domutils": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", @@ -10668,22 +10547,32 @@ } }, "node_modules/dotenv": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", - "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "version": "16.6.1", "dev": true, "license": "BSD-2-Clause", - "engines": { - "node": ">=12" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dtrace-provider": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "hasInstallScript": true, + "license": "BSD-2-Clause", + "optional": true, + "dependencies": { + "nan": "^2.14.0" }, - "funding": { - "url": "https://dotenvx.com" + "engines": { + "node": ">=0.10" } }, "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -10694,17 +10583,18 @@ "node": ">= 0.4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" @@ -10712,37 +10602,15 @@ }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/electron-to-chromium": { - "version": "1.5.255", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.255.tgz", - "integrity": "sha512-Z9oIp4HrFF/cZkDPMpz2XSuVpc1THDpT4dlmATFlJUIBVCy9Vap5/rIXsASP1CscBacBqhabwh8vLctqBwEerQ==", + "version": "1.5.302", "dev": true, "license": "ISC" }, "node_modules/elliptic": { "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "license": "MIT", "dependencies": { "bn.js": "^4.11.9", @@ -10755,21 +10623,15 @@ } }, "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", "license": "MIT" }, "node_modules/embla-carousel": { "version": "8.6.0", - "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", - "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", "license": "MIT" }, "node_modules/embla-carousel-autoplay": { "version": "8.6.0", - "resolved": "https://registry.npmjs.org/embla-carousel-autoplay/-/embla-carousel-autoplay-8.6.0.tgz", - "integrity": "sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==", "license": "MIT", "peerDependencies": { "embla-carousel": "8.6.0" @@ -10777,8 +10639,6 @@ }, "node_modules/embla-carousel-fade": { "version": "8.6.0", - "resolved": "https://registry.npmjs.org/embla-carousel-fade/-/embla-carousel-fade-8.6.0.tgz", - "integrity": "sha512-qaYsx5mwCz72ZrjlsXgs1nKejSrW+UhkbOMwLgfRT7w2LtdEB03nPRI06GHuHv5ac2USvbEiX2/nAHctcDwvpg==", "license": "MIT", "peerDependencies": { "embla-carousel": "8.6.0" @@ -10786,8 +10646,6 @@ }, "node_modules/emittery": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "license": "MIT", "engines": { @@ -10799,37 +10657,17 @@ }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "version": "7.0.1", "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -10839,36 +10677,41 @@ } }, "node_modules/env-cmd": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", - "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-11.0.0.tgz", + "integrity": "sha512-gnG7H1PlwPqsGhFJNTv68lsDGyQdK+U9DwLVitcj1+wGq7LeOBgUzZd2puZ710bHcH9NfNeGWe2sbw7pdvAqDw==", "dev": true, "license": "MIT", "dependencies": { - "commander": "^4.0.0", - "cross-spawn": "^7.0.0" + "@commander-js/extra-typings": "^13.1.0", + "commander": "^13.1.0", + "cross-spawn": "^7.0.6" }, "bin": { "env-cmd": "bin/env-cmd.js" }, "engines": { - "node": ">=8.0.0" + "node": ">=20.10.0" + } + }, + "node_modules/env-cmd/node_modules/@commander-js/extra-typings": { + "version": "13.1.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "commander": "~13.1.0" } }, "node_modules/env-cmd/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "version": "13.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=18" } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", "dev": true, "license": "MIT", "dependencies": { @@ -10876,9 +10719,7 @@ } }, "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "version": "1.24.1", "dev": true, "license": "MIT", "dependencies": { @@ -10886,18 +10727,18 @@ "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", @@ -10909,21 +10750,24 @@ "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", + "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", + "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", + "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", @@ -10932,7 +10776,7 @@ "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -10943,8 +10787,6 @@ }, "node_modules/es-define-property": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10952,8 +10794,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10961,8 +10801,6 @@ }, "node_modules/es-object-atoms": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -10973,8 +10811,6 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -10988,8 +10824,6 @@ }, "node_modules/es-shim-unscopables": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { @@ -11001,8 +10835,6 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { @@ -11018,9 +10850,7 @@ } }, "node_modules/esbuild": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz", - "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==", + "version": "0.27.3", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -11031,37 +10861,36 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.3", - "@esbuild/android-arm": "0.25.3", - "@esbuild/android-arm64": "0.25.3", - "@esbuild/android-x64": "0.25.3", - "@esbuild/darwin-arm64": "0.25.3", - "@esbuild/darwin-x64": "0.25.3", - "@esbuild/freebsd-arm64": "0.25.3", - "@esbuild/freebsd-x64": "0.25.3", - "@esbuild/linux-arm": "0.25.3", - "@esbuild/linux-arm64": "0.25.3", - "@esbuild/linux-ia32": "0.25.3", - "@esbuild/linux-loong64": "0.25.3", - "@esbuild/linux-mips64el": "0.25.3", - "@esbuild/linux-ppc64": "0.25.3", - "@esbuild/linux-riscv64": "0.25.3", - "@esbuild/linux-s390x": "0.25.3", - "@esbuild/linux-x64": "0.25.3", - "@esbuild/netbsd-arm64": "0.25.3", - "@esbuild/netbsd-x64": "0.25.3", - "@esbuild/openbsd-arm64": "0.25.3", - "@esbuild/openbsd-x64": "0.25.3", - "@esbuild/sunos-x64": "0.25.3", - "@esbuild/win32-arm64": "0.25.3", - "@esbuild/win32-ia32": "0.25.3", - "@esbuild/win32-x64": "0.25.3" + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" } }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -11069,14 +10898,15 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, + "node_modules/escape-regexp-component": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-regexp-component/-/escape-regexp-component-1.0.2.tgz", + "integrity": "sha512-B0yxafj1D1ZTNEHkFoQxz4iboZSfaZHhaNhIug7GcUCL4ZUrVSJZTmWUAkPOFaYDfi3RNT9XM082TuGE6jpmiQ==" + }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { @@ -11086,59 +10916,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint": { - "version": "9.34.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.34.0.tgz", - "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", + "version": "9.39.3", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.34.0", - "@eslint/plugin-kit": "^0.3.5", + "@eslint/js": "9.39.3", + "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", @@ -11182,8 +10976,6 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { @@ -11194,8 +10986,6 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11203,9 +10993,7 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "version": "2.12.1", "dev": true, "license": "MIT", "dependencies": { @@ -11222,8 +11010,6 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11231,30 +11017,28 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "version": "2.32.0", "dev": true, "license": "MIT", "dependencies": { "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", + "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", + "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "engines": { @@ -11264,54 +11048,16 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-react-compiler": { "version": "19.0.0-beta-ebf51a3-20250411", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-compiler/-/eslint-plugin-react-compiler-19.0.0-beta-ebf51a3-20250411.tgz", - "integrity": "sha512-R7ncuwbCPFAoeMlS56DGGSJFxmRtlWafYH/iWyep5Ks0RaPqTCL4k5gA87axUBBcITsaIgUGkbqAxDxl8Xfm5A==", "dev": true, "license": "MIT", "dependencies": { @@ -11331,8 +11077,6 @@ }, "node_modules/eslint-plugin-react-hooks": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", "dev": true, "license": "MIT", "engines": { @@ -11343,9 +11087,7 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", - "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "version": "0.4.26", "dev": true, "license": "MIT", "peerDependencies": { @@ -11354,8 +11096,6 @@ }, "node_modules/eslint-scope": { "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -11371,8 +11111,6 @@ }, "node_modules/eslint-visitor-keys": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -11382,123 +11120,8 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -11515,8 +11138,6 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "license": "BSD-2-Clause", "bin": { @@ -11528,9 +11149,7 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.7.0", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -11542,8 +11161,6 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -11555,8 +11172,6 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -11565,8 +11180,6 @@ }, "node_modules/estree-util-is-identifier-name": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", "license": "MIT", "funding": { "type": "opencollective", @@ -11575,15 +11188,11 @@ }, "node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -11592,8 +11201,6 @@ }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -11601,8 +11208,6 @@ }, "node_modules/event-target-shim": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "license": "MIT", "engines": { "node": ">=6" @@ -11610,18 +11215,13 @@ }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/eventsource": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.6.tgz", - "integrity": "sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==", + "version": "3.0.7", "license": "MIT", "dependencies": { "eventsource-parser": "^3.0.1" @@ -11631,9 +11231,7 @@ } }, "node_modules/eventsource-parser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", - "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", + "version": "3.0.6", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -11641,18 +11239,23 @@ }, "node_modules/evp_bytestokey": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "license": "MIT", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, + "node_modules/ewma": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ewma/-/ewma-2.0.1.tgz", + "integrity": "sha512-MYYK17A76cuuyvkR7MnqLW4iFYPEi5Isl2qb8rXiWpLiwFS9dxW/rncuNnjjgSENuVqZQkIuR4+DChVL4g1lnw==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, "node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { @@ -11673,10 +11276,13 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, "node_modules/exit": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -11684,57 +11290,58 @@ }, "node_modules/expect": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.0", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">= 18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.22.1", + "license": "MIT", + "peer": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" }, "funding": { "type": "opencollective", @@ -11742,10 +11349,13 @@ } }, "node_modules/express-rate-limit": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", - "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.1.tgz", + "integrity": "sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==", "license": "MIT", + "dependencies": { + "ip-address": "10.1.0" + }, "engines": { "node": ">= 16" }, @@ -11753,83 +11363,102 @@ "url": "https://github.com/sponsors/express-rate-limit" }, "peerDependencies": { - "express": "^4.11 || 5 || ^5.0.0-beta.1" + "express": ">= 4.11" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/extendable-error": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", - "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" + "node_modules/express/node_modules/cookie": { + "version": "0.7.2", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", "license": "MIT", + "peer": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" + "ms": "2.0.0" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/express/node_modules/qs": { + "version": "6.14.2", + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "is-glob": "^4.0.1" + "side-channel": "^1.1.0" }, "engines": { - "node": ">= 6" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/extend": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, + "node_modules/fast-querystring": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", + "license": "MIT", + "dependencies": { + "fast-decode-uri-component": "^1.0.1" + } + }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/fast-safe-stringify": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "dev": true, "license": "MIT" }, "node_modules/fast-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { "type": "github", @@ -11842,20 +11471,8 @@ ], "license": "BSD-3-Clause" }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/fb-watchman": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11863,11 +11480,12 @@ } }, "node_modules/fdir": { - "version": "6.4.4", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", - "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "version": "6.5.0", "dev": true, "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -11879,8 +11497,6 @@ }, "node_modules/fetch-blob": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "dev": true, "funding": [ { @@ -11901,46 +11517,8 @@ "node": "^12.20 || >= 14.13" } }, - "node_modules/fetch-blob/node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/file-entry-cache": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11950,33 +11528,8 @@ "node": ">=16.0.0" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/filename-reserved-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", "license": "MIT", "engines": { "node": ">=4" @@ -11984,8 +11537,6 @@ }, "node_modules/filenamify": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", - "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", "license": "MIT", "dependencies": { "filename-reserved-regex": "^2.0.0", @@ -12001,8 +11552,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -12013,26 +11562,51 @@ } }, "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "version": "1.3.2", "license": "MIT", + "peer": true, "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "license": "MIT", + "peer": true + }, + "node_modules/find-my-way": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.5.0.tgz", + "integrity": "sha512-VW2RfnmscZO5KgBY5XVyKREMW5nMZcxDy+buTOsL+zIPnBlbKm+00sgzoQzq1EVh4aALZLfKdwv6atBGcjvjrQ==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-querystring": "^1.0.0", + "safe-regex2": "^5.0.0" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/find-replace": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12043,23 +11617,32 @@ } }, "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fix-dts-default-cjs-exports": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "rollup": "^4.34.8" } }, "node_modules/flat-cache": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { @@ -12071,16 +11654,14 @@ } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.15.11", "funding": [ { "type": "individual", @@ -12099,8 +11680,6 @@ }, "node_modules/for-each": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "license": "MIT", "dependencies": { "is-callable": "^1.2.7" @@ -12112,40 +11691,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "version": "4.0.5", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -12160,36 +11707,11 @@ }, "node_modules/form-data-encoder": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", "license": "MIT", "peer": true }, - "node_modules/form-data/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/form-data/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/formdata-node": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", "license": "MIT", "peer": true, "dependencies": { @@ -12200,10 +11722,16 @@ "node": ">= 12.20" } }, + "node_modules/formdata-node/node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/formdata-polyfill": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dev": true, "license": "MIT", "dependencies": { @@ -12215,8 +11743,6 @@ }, "node_modules/formidable": { "version": "3.5.4", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", - "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", "dev": true, "license": "MIT", "dependencies": { @@ -12233,48 +11759,38 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "version": "0.5.2", "license": "MIT", + "peer": true, "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, "node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, + "version": "11.3.3", "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=14.14" } }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -12288,8 +11804,6 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12297,8 +11811,6 @@ }, "node_modules/function.prototype.name": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12318,8 +11830,6 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { @@ -12328,17 +11838,21 @@ }, "node_modules/fuse.js": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz", - "integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==", "license": "Apache-2.0", "engines": { "node": ">=10" } }, + "node_modules/generator-function": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", "engines": { @@ -12347,8 +11861,6 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -12356,8 +11868,6 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -12380,8 +11890,6 @@ }, "node_modules/get-nonce": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", "dev": true, "license": "MIT", "engines": { @@ -12390,8 +11898,6 @@ }, "node_modules/get-package-type": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "license": "MIT", "engines": { @@ -12400,8 +11906,6 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -12413,8 +11917,6 @@ }, "node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { @@ -12426,8 +11928,6 @@ }, "node_modules/get-symbol-description": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { @@ -12443,9 +11943,7 @@ } }, "node_modules/get-tsconfig": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.11.0.tgz", - "integrity": "sha512-sNsqf7XKQ38IawiVGPOoAlqZo1DMrO7TU+ZcZwi7yLl7/7S0JwmoBMKz/IkUPhSoXM0Ng3vT0yB1iCe5XavDeQ==", + "version": "4.13.6", "dev": true, "license": "MIT", "dependencies": { @@ -12455,25 +11953,17 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/get-uri": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", - "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", - "dev": true, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "license": "MIT", "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" + "assert-plus": "^1.0.0" } }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", @@ -12494,8 +11984,6 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -12505,34 +11993,8 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "version": "15.15.0", "dev": true, "license": "MIT", "engines": { @@ -12544,8 +12006,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12559,31 +12019,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -12594,45 +12031,25 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "node_modules/gradient-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/gradient-string/-/gradient-string-2.0.2.tgz", - "integrity": "sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "tinygradient": "^1.1.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/graphql": { "version": "0.11.7", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.11.7.tgz", - "integrity": "sha512-x7uDjyz8Jx+QPbpCFCMQ8lltnQa4p4vSYHx6ADe8rVYRTdsyhCJbvSty5DAsLVmU6cGakl+r8HQYolKHxk/tiw==", + "deprecated": "No longer supported; please update to a newer version. Details: https://github.com/graphql/graphql-js#version-support", "dev": true, "license": "MIT", "dependencies": { "iterall": "1.1.3" } }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "license": "MIT" + }, "node_modules/handlebars": { "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "license": "MIT", "dependencies": { "minimist": "^1.2.5", @@ -12650,19 +12067,8 @@ "uglify-js": "^3.1.4" } }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/has-bigints": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", "engines": { @@ -12674,8 +12080,6 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -12684,8 +12088,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -12696,8 +12098,6 @@ }, "node_modules/has-proto": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12712,8 +12112,6 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -12724,8 +12122,6 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -12739,8 +12135,6 @@ }, "node_modules/hash-base": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", "license": "MIT", "dependencies": { "inherits": "^2.0.4", @@ -12752,8 +12146,6 @@ }, "node_modules/hash.js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -12762,8 +12154,6 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -12774,8 +12164,6 @@ }, "node_modules/hast-util-to-jsx-runtime": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", - "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -12801,8 +12189,6 @@ }, "node_modules/hast-util-whitespace": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0" @@ -12814,15 +12200,11 @@ }, "node_modules/hermes-estree": { "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", - "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", "dev": true, "license": "MIT" }, "node_modules/hermes-parser": { "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", - "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", "dev": true, "license": "MIT", "dependencies": { @@ -12831,8 +12213,6 @@ }, "node_modules/highlight.js": { "version": "11.11.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", - "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", "license": "BSD-3-Clause", "engines": { "node": ">=12.0.0" @@ -12840,8 +12220,6 @@ }, "node_modules/hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "license": "MIT", "dependencies": { "hash.js": "^1.0.3", @@ -12849,17 +12227,34 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/hono": { + "version": "4.12.9", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.9.tgz", + "integrity": "sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, "license": "MIT" }, "node_modules/html-url-attributes": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", - "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", "license": "MIT", "funding": { "type": "opencollective", @@ -12867,9 +12262,7 @@ } }, "node_modules/htmlparser2": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", - "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "version": "10.1.0", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -12881,30 +12274,36 @@ "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "entities": "^4.5.0" + "domutils": "^3.2.2", + "entities": "^7.0.1" } }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "license": "MIT" + }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-proxy-agent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "license": "MIT", "dependencies": { "agent-base": "^7.1.0", @@ -12914,16 +12313,26 @@ "node": ">= 14" } }, + "node_modules/http-signature": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.18.0" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/https-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "license": "MIT" }, "node_modules/https-proxy-agent": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", "dependencies": { "agent-base": "^7.1.2", @@ -12933,20 +12342,8 @@ "node": ">= 14" } }, - "node_modules/human-id": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/human-id/-/human-id-4.1.1.tgz", - "integrity": "sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==", - "dev": true, - "license": "MIT", - "bin": { - "human-id": "dist/cli.js" - } - }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -12955,8 +12352,6 @@ }, "node_modules/humanize-ms": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "license": "MIT", "peer": true, "dependencies": { @@ -12964,21 +12359,21 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.7.2", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -12997,8 +12392,6 @@ }, "node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -13007,15 +12400,11 @@ }, "node_modules/ignore-by-default": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true, "license": "ISC" }, "node_modules/import-fresh": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13029,20 +12418,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/import-local": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "license": "MIT", "dependencies": { @@ -13061,8 +12438,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -13070,9 +12445,7 @@ } }, "node_modules/index-to-position": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", - "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "version": "1.2.0", "license": "MIT", "engines": { "node": ">=18" @@ -13083,8 +12456,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "license": "ISC", @@ -13095,95 +12466,14 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, "license": "ISC" }, "node_modules/inline-style-parser": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", - "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "version": "0.2.7", "license": "MIT" }, - "node_modules/inquirer": { - "version": "8.2.7", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", - "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/external-editor": "^1.0.0", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/internal-slot": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { @@ -13196,30 +12486,16 @@ } }, "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dev": true, + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, "engines": { "node": ">= 12" } }, - "node_modules/ip-address/node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -13227,8 +12503,6 @@ }, "node_modules/is-alphabetical": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", "license": "MIT", "funding": { "type": "github", @@ -13237,8 +12511,6 @@ }, "node_modules/is-alphanumerical": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "license": "MIT", "dependencies": { "is-alphabetical": "^2.0.0", @@ -13251,8 +12523,6 @@ }, "node_modules/is-array-buffer": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { @@ -13269,15 +12539,11 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, "license": "MIT" }, "node_modules/is-async-function": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13296,8 +12562,6 @@ }, "node_modules/is-bigint": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13312,8 +12576,6 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "license": "MIT", "dependencies": { @@ -13325,8 +12587,6 @@ }, "node_modules/is-boolean-object": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { @@ -13342,8 +12602,6 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -13354,8 +12612,6 @@ }, "node_modules/is-core-module": { "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -13370,8 +12626,6 @@ }, "node_modules/is-data-view": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -13388,8 +12642,6 @@ }, "node_modules/is-date-object": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { @@ -13405,8 +12657,6 @@ }, "node_modules/is-decimal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", "license": "MIT", "funding": { "type": "github", @@ -13415,8 +12665,6 @@ }, "node_modules/is-docker": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "license": "MIT", "bin": { "is-docker": "cli.js" @@ -13430,8 +12678,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { @@ -13440,8 +12686,6 @@ }, "node_modules/is-finalizationregistry": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { @@ -13456,8 +12700,6 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { "node": ">=8" @@ -13465,8 +12707,6 @@ }, "node_modules/is-generator-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, "license": "MIT", "engines": { @@ -13474,14 +12714,13 @@ } }, "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "version": "1.1.2", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" }, @@ -13494,8 +12733,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -13507,8 +12744,6 @@ }, "node_modules/is-hexadecimal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "license": "MIT", "funding": { "type": "github", @@ -13517,8 +12752,6 @@ }, "node_modules/is-inside-container": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "license": "MIT", "dependencies": { "is-docker": "^3.0.0" @@ -13533,20 +12766,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -13558,15 +12779,22 @@ }, "node_modules/is-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true, "license": "MIT" }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -13575,8 +12803,6 @@ }, "node_modules/is-number-object": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { @@ -13590,36 +12816,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz", - "integrity": "sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-path-inside": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "license": "MIT", "engines": { "node": ">=12" @@ -13630,14 +12828,10 @@ }, "node_modules/is-promise": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, "node_modules/is-regex": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { @@ -13655,8 +12849,6 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -13668,8 +12860,6 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { @@ -13684,8 +12874,6 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "license": "MIT", "engines": { @@ -13697,8 +12885,6 @@ }, "node_modules/is-string": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { @@ -13712,23 +12898,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-subdir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", - "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "better-path-resolve": "1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/is-symbol": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { @@ -13745,8 +12916,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" @@ -13758,30 +12927,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-url": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", "dev": true, "license": "MIT" }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -13793,8 +12945,6 @@ }, "node_modules/is-weakref": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { @@ -13809,8 +12959,6 @@ }, "node_modules/is-weakset": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13820,24 +12968,12 @@ "engines": { "node": ">= 0.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "version": "3.1.1", "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" @@ -13850,34 +12986,15 @@ } }, "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "version": "1.0.0", "license": "MIT" }, - "node_modules/isbinaryfile": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.6.tgz", - "integrity": "sha512-I+NmIfBHUl+r2wcDd6JwE9yWje/PIVY/R5/CmV8dXLZd5K+L9X2klAOwfAHNnondLXkbHyTAleQAWonpTJBTtw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -13886,8 +13003,6 @@ }, "node_modules/istanbul-lib-instrument": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -13901,10 +13016,19 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.7.4", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -13918,8 +13042,6 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -13931,20 +13053,8 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "version": "3.2.0", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -13957,74 +13067,11 @@ }, "node_modules/iterall": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.1.3.tgz", - "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==", "dev": true, "license": "MIT" }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "license": "MIT", "dependencies": { @@ -14050,8 +13097,6 @@ }, "node_modules/jest-changed-files": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "license": "MIT", "dependencies": { @@ -14063,26 +13108,8 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-changed-files/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/jest-circus": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "license": "MIT", "dependencies": { @@ -14111,26 +13138,8 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/jest-cli": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "license": "MIT", "dependencies": { @@ -14163,8 +13172,6 @@ }, "node_modules/jest-config": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14209,8 +13216,6 @@ }, "node_modules/jest-diff": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "license": "MIT", "dependencies": { @@ -14225,8 +13230,6 @@ }, "node_modules/jest-docblock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "license": "MIT", "dependencies": { @@ -14238,8 +13241,6 @@ }, "node_modules/jest-each": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14255,8 +13256,6 @@ }, "node_modules/jest-environment-node": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "license": "MIT", "dependencies": { @@ -14273,8 +13272,6 @@ }, "node_modules/jest-get-type": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "license": "MIT", "engines": { @@ -14283,8 +13280,6 @@ }, "node_modules/jest-haste-map": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "license": "MIT", "dependencies": { @@ -14309,8 +13304,6 @@ }, "node_modules/jest-leak-detector": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "license": "MIT", "dependencies": { @@ -14323,8 +13316,6 @@ }, "node_modules/jest-matcher-utils": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "license": "MIT", "dependencies": { @@ -14339,8 +13330,6 @@ }, "node_modules/jest-message-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "license": "MIT", "dependencies": { @@ -14360,8 +13349,6 @@ }, "node_modules/jest-mock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "license": "MIT", "dependencies": { @@ -14375,8 +13362,6 @@ }, "node_modules/jest-pnp-resolver": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "license": "MIT", "engines": { @@ -14393,8 +13378,6 @@ }, "node_modules/jest-regex-util": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, "license": "MIT", "engines": { @@ -14403,8 +13386,6 @@ }, "node_modules/jest-resolve": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "license": "MIT", "dependencies": { @@ -14424,8 +13405,6 @@ }, "node_modules/jest-resolve-dependencies": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "license": "MIT", "dependencies": { @@ -14438,8 +13417,6 @@ }, "node_modules/jest-runner": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14469,26 +13446,8 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runner/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/jest-runtime": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14521,8 +13480,6 @@ }, "node_modules/jest-snapshot": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "license": "MIT", "dependencies": { @@ -14551,10 +13508,19 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.4", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "license": "MIT", "dependencies": { @@ -14571,8 +13537,6 @@ }, "node_modules/jest-util/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -14584,8 +13548,6 @@ }, "node_modules/jest-validate": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "license": "MIT", "dependencies": { @@ -14602,8 +13564,6 @@ }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", "engines": { @@ -14615,8 +13575,6 @@ }, "node_modules/jest-watcher": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "license": "MIT", "dependencies": { @@ -14635,8 +13593,6 @@ }, "node_modules/jest-worker": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "license": "MIT", "dependencies": { @@ -14651,8 +13607,6 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14666,9 +13620,7 @@ } }, "node_modules/jose": { - "version": "4.15.9", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", - "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "version": "6.1.3", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" @@ -14676,8 +13628,6 @@ }, "node_modules/joycon": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", "dev": true, "license": "MIT", "engines": { @@ -14685,16 +13635,12 @@ } }, "node_modules/js-base64": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", - "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==", + "version": "3.7.8", "dev": true, "license": "BSD-3-Clause" }, "node_modules/js-levenshtein": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -14702,35 +13648,26 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "dev": true, + "version": "4.1.1", "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true, + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "license": "MIT" }, "node_modules/jsesc": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -14742,44 +13679,43 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, "license": "MIT" }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, "node_modules/json-schema-to-zod": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/json-schema-to-zod/-/json-schema-to-zod-2.6.1.tgz", - "integrity": "sha512-uiHmWH21h9FjKJkRBntfVGTLpYlCZ1n98D0izIlByqQLqpmkQpNTBtfbdP04Na6+43lgsvrShFh2uWLkQDKJuQ==", + "version": "2.7.0", "license": "ISC", "bin": { "json-schema-to-zod": "dist/cjs/cli.js" } }, "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "version": "0.4.1", + "dev": true, "license": "MIT" }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "license": "BSD-2-Clause" + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { @@ -14790,22 +13726,20 @@ } }, "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, + "version": "6.2.0", "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "version": "9.0.3", "license": "MIT", "dependencies": { - "jws": "^3.2.2", + "jws": "^4.0.1", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", @@ -14821,10 +13755,33 @@ "npm": ">=6" } }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.7.4", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, "node_modules/jwa": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", - "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "version": "2.0.1", "license": "MIT", "dependencies": { "buffer-equal-constant-time": "^1.0.1", @@ -14833,12 +13790,9 @@ } }, "node_modules/jwks-rsa": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.2.0.tgz", - "integrity": "sha512-PwchfHcQK/5PSydeKCs1ylNym0w/SSv8a62DgHJ//7x2ZclCoinlsjAfDxAAbpoTPybOum/Jgy+vkvMmKz89Ww==", + "version": "3.2.2", "license": "MIT", "dependencies": { - "@types/express": "^4.17.20", "@types/jsonwebtoken": "^9.0.4", "debug": "^4.3.4", "jose": "^4.15.4", @@ -14849,44 +13803,23 @@ "node": ">=14" } }, - "node_modules/jwks-rsa/node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/jwks-rsa/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "node_modules/jwks-rsa/node_modules/jose": { + "version": "4.15.9", "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "funding": { + "url": "https://github.com/sponsors/panva" } }, "node_modules/jws": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.3.tgz", - "integrity": "sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==", + "version": "4.0.1", "license": "MIT", "dependencies": { - "jwa": "^1.4.2", + "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, "node_modules/jwt-decode": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", - "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", "license": "MIT", "engines": { "node": ">=18" @@ -14894,14 +13827,10 @@ }, "node_modules/keyborg": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/keyborg/-/keyborg-2.6.0.tgz", - "integrity": "sha512-o5kvLbuTF+o326CMVYpjlaykxqYP9DphFQZ2ZpgrvBouyvOxyEB7oqe8nOLFpiV5VCtz0D3pt8gXQYWpLpBnmA==", "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -14910,8 +13839,6 @@ }, "node_modules/kleur": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, "license": "MIT", "engines": { @@ -14920,8 +13847,6 @@ }, "node_modules/leven": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, "license": "MIT", "engines": { @@ -14930,8 +13855,6 @@ }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14944,8 +13867,6 @@ }, "node_modules/lilconfig": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, "license": "MIT", "engines": { @@ -14956,21 +13877,15 @@ } }, "node_modules/limiter": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", - "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + "version": "1.1.5" }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true, "license": "MIT" }, "node_modules/load-tsconfig": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", - "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", "dev": true, "license": "MIT", "engines": { @@ -14978,210 +13893,71 @@ } }, "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, + "version": "4.17.23", "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "license": "MIT" }, "node_modules/lodash.clonedeep": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "license": "MIT" - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", - "dev": true, "license": "MIT" }, "node_modules/lodash.includes": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", "license": "MIT" }, "node_modules/lodash.isboolean": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", "license": "MIT" }, "node_modules/lodash.isinteger": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", "license": "MIT" }, "node_modules/lodash.isnumber": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "license": "MIT" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true, "license": "MIT" }, - "node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "license": "MIT" }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, + "node_modules/lodash.isstring": { + "version": "4.0.1", "license": "MIT" }, - "node_modules/log-symbols/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/lodash.memoize": { + "version": "4.1.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } + "license": "MIT" }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/lodash.merge": { + "version": "4.6.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/lodash.once": { + "version": "4.1.1", + "license": "MIT" }, "node_modules/longest-streak": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "license": "MIT", "funding": { "type": "github", @@ -15190,8 +13966,7 @@ }, "node_modules/loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -15202,8 +13977,6 @@ }, "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", "dependencies": { @@ -15212,8 +13985,6 @@ }, "node_modules/lru-memoizer": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz", - "integrity": "sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==", "license": "MIT", "dependencies": { "lodash.clonedeep": "^4.5.0", @@ -15222,8 +13993,6 @@ }, "node_modules/lru-memoizer/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -15234,24 +14003,26 @@ }, "node_modules/lru-memoizer/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "license": "ISC" }, "node_modules/lucide-react": { "version": "0.523.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.523.0.tgz", - "integrity": "sha512-rUjQoy7egZT9XYVXBK1je9ckBnNp7qzRZOhLQx5RcEp2dCGlXo+mv6vf7Am4LimEcFBJIIZzSGfgTqc9QCrPSw==", "dev": true, "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/magic-string": { + "version": "0.30.21", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, "node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { @@ -15264,17 +14035,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.4", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/make-error": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true, "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -15283,8 +14061,6 @@ }, "node_modules/markdown-table": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "license": "MIT", "funding": { "type": "github", @@ -15293,8 +14069,6 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -15302,8 +14076,6 @@ }, "node_modules/md5.js": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "license": "MIT", "dependencies": { "hash-base": "^3.0.0", @@ -15313,8 +14085,6 @@ }, "node_modules/mdast-util-find-and-replace": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -15329,8 +14099,6 @@ }, "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "license": "MIT", "engines": { "node": ">=12" @@ -15340,9 +14108,7 @@ } }, "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "version": "2.0.3", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -15365,8 +14131,6 @@ }, "node_modules/mdast-util-gfm": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^2.0.0", @@ -15384,8 +14148,6 @@ }, "node_modules/mdast-util-gfm-autolink-literal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -15401,8 +14163,6 @@ }, "node_modules/mdast-util-gfm-footnote": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -15418,8 +14178,6 @@ }, "node_modules/mdast-util-gfm-strikethrough": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -15433,8 +14191,6 @@ }, "node_modules/mdast-util-gfm-table": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -15450,8 +14206,6 @@ }, "node_modules/mdast-util-gfm-task-list-item": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -15466,8 +14220,6 @@ }, "node_modules/mdast-util-mdx-expression": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", - "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -15484,8 +14236,6 @@ }, "node_modules/mdast-util-mdx-jsx": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", - "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -15508,8 +14258,6 @@ }, "node_modules/mdast-util-mdxjs-esm": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -15526,8 +14274,6 @@ }, "node_modules/mdast-util-newline-to-break": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-newline-to-break/-/mdast-util-newline-to-break-2.0.0.tgz", - "integrity": "sha512-MbgeFca0hLYIEx/2zGsszCSEJJ1JSCdiY5xQxRcLDDGa8EPvlLPupJ4DSajbMPAnC0je8jfb9TiUATnxxrHUog==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -15540,8 +14286,6 @@ }, "node_modules/mdast-util-phrasing": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -15554,8 +14298,6 @@ }, "node_modules/mdast-util-to-hast": { "version": "13.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", - "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -15575,8 +14317,6 @@ }, "node_modules/mdast-util-to-markdown": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -15596,8 +14336,6 @@ }, "node_modules/mdast-util-to-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0" @@ -15608,47 +14346,28 @@ } }, "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "version": "0.3.0", "license": "MIT", + "peer": true, "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "version": "1.0.3", "license": "MIT", - "engines": { - "node": ">=18" - }, + "peer": true, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -15656,8 +14375,6 @@ }, "node_modules/micromark": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", "funding": [ { "type": "GitHub Sponsors", @@ -15691,8 +14408,6 @@ }, "node_modules/micromark-core-commonmark": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", "funding": [ { "type": "GitHub Sponsors", @@ -15725,8 +14440,6 @@ }, "node_modules/micromark-extension-gfm": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", "license": "MIT", "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", @@ -15745,8 +14458,6 @@ }, "node_modules/micromark-extension-gfm-autolink-literal": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", @@ -15761,8 +14472,6 @@ }, "node_modules/micromark-extension-gfm-footnote": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -15781,8 +14490,6 @@ }, "node_modules/micromark-extension-gfm-strikethrough": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -15799,8 +14506,6 @@ }, "node_modules/micromark-extension-gfm-table": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -15816,8 +14521,6 @@ }, "node_modules/micromark-extension-gfm-tagfilter": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", "license": "MIT", "dependencies": { "micromark-util-types": "^2.0.0" @@ -15829,8 +14532,6 @@ }, "node_modules/micromark-extension-gfm-task-list-item": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -15846,8 +14547,6 @@ }, "node_modules/micromark-factory-destination": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", "funding": [ { "type": "GitHub Sponsors", @@ -15867,8 +14566,6 @@ }, "node_modules/micromark-factory-label": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", "funding": [ { "type": "GitHub Sponsors", @@ -15889,8 +14586,6 @@ }, "node_modules/micromark-factory-space": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", "funding": [ { "type": "GitHub Sponsors", @@ -15909,8 +14604,6 @@ }, "node_modules/micromark-factory-title": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", "funding": [ { "type": "GitHub Sponsors", @@ -15931,8 +14624,6 @@ }, "node_modules/micromark-factory-whitespace": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", "funding": [ { "type": "GitHub Sponsors", @@ -15953,8 +14644,6 @@ }, "node_modules/micromark-util-character": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "funding": [ { "type": "GitHub Sponsors", @@ -15973,8 +14662,6 @@ }, "node_modules/micromark-util-chunked": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", "funding": [ { "type": "GitHub Sponsors", @@ -15992,8 +14679,6 @@ }, "node_modules/micromark-util-classify-character": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", "funding": [ { "type": "GitHub Sponsors", @@ -16013,8 +14698,6 @@ }, "node_modules/micromark-util-combine-extensions": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", "funding": [ { "type": "GitHub Sponsors", @@ -16033,8 +14716,6 @@ }, "node_modules/micromark-util-decode-numeric-character-reference": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", "funding": [ { "type": "GitHub Sponsors", @@ -16052,8 +14733,6 @@ }, "node_modules/micromark-util-decode-string": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", "funding": [ { "type": "GitHub Sponsors", @@ -16074,8 +14753,6 @@ }, "node_modules/micromark-util-encode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", "funding": [ { "type": "GitHub Sponsors", @@ -16090,8 +14767,6 @@ }, "node_modules/micromark-util-html-tag-name": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", "funding": [ { "type": "GitHub Sponsors", @@ -16106,8 +14781,6 @@ }, "node_modules/micromark-util-normalize-identifier": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "funding": [ { "type": "GitHub Sponsors", @@ -16125,8 +14798,6 @@ }, "node_modules/micromark-util-resolve-all": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "funding": [ { "type": "GitHub Sponsors", @@ -16144,8 +14815,6 @@ }, "node_modules/micromark-util-sanitize-uri": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "funding": [ { "type": "GitHub Sponsors", @@ -16165,8 +14834,6 @@ }, "node_modules/micromark-util-subtokenize": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", "funding": [ { "type": "GitHub Sponsors", @@ -16187,8 +14854,6 @@ }, "node_modules/micromark-util-symbol": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "funding": [ { "type": "GitHub Sponsors", @@ -16203,8 +14868,6 @@ }, "node_modules/micromark-util-types": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", "funding": [ { "type": "GitHub Sponsors", @@ -16219,8 +14882,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -16233,8 +14894,6 @@ }, "node_modules/micromatch/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -16246,8 +14905,6 @@ }, "node_modules/miller-rabin": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "license": "MIT", "dependencies": { "bn.js": "^4.0.0", @@ -16258,40 +14915,32 @@ } }, "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", "license": "MIT" }, "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, + "version": "1.6.0", "license": "MIT", + "peer": true, "bin": { "mime": "cli.js" }, "engines": { - "node": ">=4.0.0" + "node": ">=4" } }, "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "version": "1.52.0", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "2.1.35", "license": "MIT", "dependencies": { - "mime-db": "^1.54.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -16299,8 +14948,6 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -16309,104 +14956,71 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "license": "MIT" }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "3.1.5", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } }, - "node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "node_modules/mlly": { + "version": "1.8.0", "dev": true, "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "dependencies": { + "acorn": "^8.15.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.1" } }, "node_modules/moment": { "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "dev": true, "license": "MIT", "engines": { "node": "*" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "version": "2.0.0", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, "node_modules/mz": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, "license": "MIT", "dependencies": { @@ -16415,10 +15029,15 @@ "thenify-all": "^1.0.0" } }, + "node_modules/nan": { + "version": "2.26.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.26.2.tgz", + "integrity": "sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw==", + "license": "MIT", + "optional": true + }, "node_modules/nanoid": { "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -16436,15 +15055,11 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "version": "0.6.3", "license": "MIT", "engines": { "node": ">= 0.6" @@ -16452,24 +15067,19 @@ }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "license": "MIT" }, - "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "node_modules/nerdbank-gitversioning": { + "version": "3.9.50", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4.0" + "bin": { + "nbgv": "main.js", + "nbgv-setversion": "npmVersion.js" } }, "node_modules/node-domexception": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "deprecated": "Use your platform's native DOMException instead", "funding": [ { @@ -16487,225 +15097,41 @@ } }, "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-plop": { - "version": "0.32.1", - "resolved": "https://registry.npmjs.org/node-plop/-/node-plop-0.32.1.tgz", - "integrity": "sha512-yQLFYO/ELC3pIMrEVvwBPU6fcCMWFFqMsK49Zqp4TfNNo1PDcEbC/xcfX1SIu+Ez5QO/Skq/0t8ogsKicwLZWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/inquirer": "^9.0.9", - "change-case": "^5.4.4", - "del": "^8.0.0", - "globby": "^14.1.0", - "handlebars": "^4.7.8", - "inquirer": "^9.3.7", - "isbinaryfile": "^5.0.6", - "lodash.get": "^4.4.2", - "mkdirp": "^3.0.1", - "resolve": "^1.22.10", - "title-case": "^4.3.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-plop/node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/node-plop/node_modules/globby": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", - "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-plop/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/node-plop/node_modules/inquirer": { - "version": "9.3.8", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.8.tgz", - "integrity": "sha512-pFGGdaHrmRKMh4WoDDSowddgjT1Vkl90atobmTeSmcPGdYiwikch/m/Ef5wRaiamHejtw0cUUMMerzDUXCci2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/external-editor": "^1.0.2", - "@inquirer/figures": "^1.0.3", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-plop/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-plop/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/node-plop/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "version": "3.3.2", "dev": true, "license": "MIT", "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-plop/node_modules/path-type": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", - "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/node-plop/node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/node-plop/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "license": "MIT", "engines": { - "node": ">=14.16" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, + "node_modules/node-int64": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, "node_modules/node-releases": { "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, "license": "MIT" }, "node_modules/nodemon": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", - "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", + "version": "3.1.14", "dev": true, "license": "MIT", "dependencies": { "chokidar": "^3.5.2", "debug": "^4", "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", + "minimatch": "^10.2.1", "pstree.remy": "^1.1.8", "semver": "^7.5.3", "simple-update-notifier": "^2.0.0", @@ -16724,21 +15150,61 @@ "url": "https://opencollective.com/nodemon" } }, + "node_modules/nodemon/node_modules/balanced-match": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/nodemon/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "5.0.3", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/nodemon/node_modules/chokidar": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/nodemon/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/nodemon/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", "engines": { @@ -16746,22 +15212,54 @@ } }, "node_modules/nodemon/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "10.2.4", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^5.0.2" }, "engines": { - "node": "*" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/nodemon/node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/nodemon/node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/nodemon/node_modules/semver": { + "version": "7.7.4", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/nodemon/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { @@ -16773,8 +15271,6 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "license": "MIT", "engines": { @@ -16783,8 +15279,6 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { @@ -16796,8 +15290,6 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -16805,8 +15297,6 @@ }, "node_modules/object-inspect": { "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -16817,8 +15307,6 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -16827,8 +15315,6 @@ }, "node_modules/object.assign": { "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { @@ -16848,8 +15334,6 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16867,8 +15351,6 @@ }, "node_modules/object.groupby": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16882,8 +15364,6 @@ }, "node_modules/object.values": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -16899,10 +15379,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "license": "MIT" + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -16913,8 +15406,6 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "license": "ISC", "dependencies": { "wrappy": "1" @@ -16922,8 +15413,6 @@ }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -16938,8 +15427,6 @@ }, "node_modules/open": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "license": "MIT", "dependencies": { "default-browser": "^5.2.1", @@ -16955,9 +15442,7 @@ } }, "node_modules/openai": { - "version": "4.96.2", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.96.2.tgz", - "integrity": "sha512-R2XnxvMsizkROr7BV3uNp1q/3skwPZ7fmPjO1bXLnfB4Tu5xKxrT1EVwzjhxn0MZKBKAvOaGWS63jTMN6KrIXA==", + "version": "4.104.0", "license": "Apache-2.0", "peer": true, "dependencies": { @@ -16986,39 +15471,50 @@ } }, "node_modules/openai/node_modules/@types/node": { - "version": "18.19.87", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.87.tgz", - "integrity": "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A==", + "version": "18.19.130", "license": "MIT", "peer": true, "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/openai/node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "peer": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/openai/node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "license": "MIT", "peer": true }, "node_modules/openapi-types": { "version": "12.1.3", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", - "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", "license": "MIT" }, "node_modules/openapi-typescript": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.6.1.tgz", - "integrity": "sha512-F7RXEeo/heF3O9lOXo2bNjCOtfp7u+D6W3a3VNEH2xE6v+fxLtn5nq0uvUcA1F5aT+CMhNeC5Uqtg5tlXFX/ag==", + "version": "7.13.0", "license": "MIT", "dependencies": { - "@redocly/openapi-core": "^1.28.0", + "@redocly/openapi-core": "^1.34.6", "ansi-colors": "^4.1.3", "change-case": "^5.4.4", - "parse-json": "^8.1.0", - "supports-color": "^9.4.0", + "parse-json": "^8.3.0", + "supports-color": "^10.2.2", "yargs-parser": "^21.1.1" }, "bin": { @@ -17028,10 +15524,12 @@ "typescript": "^5.x" } }, + "node_modules/openapi-typescript/node_modules/change-case": { + "version": "5.4.4", + "license": "MIT" + }, "node_modules/openapi-typescript/node_modules/parse-json": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", - "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", @@ -17046,21 +15544,17 @@ } }, "node_modules/openapi-typescript/node_modules/supports-color": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "version": "10.2.2", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/openapi-typescript/node_modules/type-fest": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.40.1.tgz", - "integrity": "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA==", + "version": "4.41.0", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" @@ -17071,14 +15565,10 @@ }, "node_modules/openssl-wrapper": { "version": "0.3.4", - "resolved": "https://registry.npmjs.org/openssl-wrapper/-/openssl-wrapper-0.3.4.tgz", - "integrity": "sha512-iITsrx6Ho8V3/2OVtmZzzX8wQaKAaFXEJQdzoPUZDtyf5jWFlqo+h+OhGT4TATQ47f9ACKHua8nw7Qoy85aeKQ==", "license": "MIT" }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -17093,54 +15583,8 @@ "node": ">= 0.8.0" } }, - "node_modules/ora": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", - "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.2.0", - "is-interactive": "^1.0.0", - "log-symbols": "^3.0.0", - "mute-stream": "0.0.8", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/outdent": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", - "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", - "dev": true, - "license": "MIT" - }, "node_modules/own-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { @@ -17155,66 +15599,29 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-map": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-filter/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", - "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -17222,76 +15629,24 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/pac-proxy-agent": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", - "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.6", - "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.5" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-resolver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", - "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", - "dev": true, - "license": "MIT", - "dependencies": { - "degenerator": "^5.0.0", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/package-json-from-dist": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, "license": "BlueOak-1.0.0" }, - "node_modules/package-manager-detector": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", - "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "quansync": "^0.2.7" - } - }, "node_modules/pako": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true, "license": "(MIT AND Zlib)" }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -17302,16 +15657,13 @@ } }, "node_modules/parse-asn1": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", - "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "version": "5.1.9", "license": "ISC", "dependencies": { "asn1.js": "^4.10.1", "browserify-aes": "^1.2.0", "evp_bytestokey": "^1.0.3", - "hash-base": "~3.0", - "pbkdf2": "^3.1.2", + "pbkdf2": "^3.1.5", "safe-buffer": "^5.2.1" }, "engines": { @@ -17320,8 +15672,6 @@ }, "node_modules/parse-entities": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", - "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", @@ -17339,14 +15689,10 @@ }, "node_modules/parse-entities/node_modules/@types/unist": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "license": "MIT" }, "node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "license": "MIT", "dependencies": { @@ -17364,8 +15710,6 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -17373,15 +15717,11 @@ }, "node_modules/path-equal": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/path-equal/-/path-equal-1.2.5.tgz", - "integrity": "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==", "dev": true, "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -17390,8 +15730,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "license": "MIT", "engines": { @@ -17400,15 +15738,11 @@ }, "node_modules/path-is-inside": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", "dev": true, "license": "(WTFPL OR MIT)" }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", "engines": { "node": ">=8" @@ -17416,15 +15750,11 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, "license": "MIT" }, "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "version": "2.0.2", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -17432,154 +15762,222 @@ "minipass": "^7.1.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "version": "11.2.6", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } }, "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "version": "0.1.12", + "license": "MIT", + "peer": true + }, + "node_modules/pathe": { + "version": "2.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/pbkdf2": { + "version": "3.1.5", "license": "MIT", + "dependencies": { + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" + }, "engines": { - "node": ">=16" + "node": ">= 0.10" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/picocolors": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pbkdf2": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", - "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", + "node_modules/pidusage": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-3.0.2.tgz", + "integrity": "sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==", "license": "MIT", "dependencies": { - "create-hash": "~1.1.3", - "create-hmac": "^1.1.7", - "ripemd160": "=2.0.1", - "safe-buffer": "^5.2.1", - "sha.js": "^2.4.11", - "to-buffer": "^1.2.0" + "safe-buffer": "^5.2.1" }, "engines": { - "node": ">=0.12" + "node": ">=10" + } + }, + "node_modules/pino": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.21.0.tgz", + "integrity": "sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.2.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^3.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.7.0", + "thread-stream": "^2.6.0" + }, + "bin": { + "pino": "bin.js" } }, - "node_modules/pbkdf2/node_modules/create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", + "node_modules/pino-abstract-transport": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", + "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", "license": "MIT", "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "sha.js": "^2.4.0" + "readable-stream": "^4.0.0", + "split2": "^4.0.0" } }, - "node_modules/pbkdf2/node_modules/hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", + "node_modules/pino-abstract-transport/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "license": "MIT", "dependencies": { - "inherits": "^2.0.1" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/pbkdf2/node_modules/ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", + "node_modules/pino-abstract-transport/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "dependencies": { - "hash-base": "^2.0.0", - "inherits": "^2.0.1" + "safe-buffer": "~5.2.0" } }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" + "node_modules/pino-std-serializers": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==", + "license": "MIT" }, - "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "node_modules/pirates": { + "version": "4.0.7", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">= 6" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/pkce-challenge": { + "version": "4.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=16.20.0" } }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "node_modules/pkg-dir": { + "version": "4.2.0", "dev": true, "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/pkce-challenge": { + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", - "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "dev": true, "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, "engines": { - "node": ">=16.20.0" + "node": ">=8" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.0.0" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, + "node_modules/pkg-types": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, "node_modules/pluralize": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "license": "MIT", "engines": { "node": ">=4" @@ -17587,17 +15985,13 @@ }, "node_modules/possible-typed-array-names": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.6", "dev": true, "funding": [ { @@ -17615,7 +16009,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -17625,8 +16019,6 @@ }, "node_modules/postcss-load-config": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", "dev": true, "funding": [ { @@ -17668,31 +16060,14 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.8.0" } }, - "node_modules/presentable-error": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/presentable-error/-/presentable-error-0.0.1.tgz", - "integrity": "sha512-E6rsNU1QNJgB3sjj7OANinGncFKuK+164sLXw1/CqBjj/EkXSoSdHCtWQGBNlREIGLnL7IEUEGa08YFVUbrhVg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "version": "3.8.1", "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" @@ -17706,8 +16081,6 @@ }, "node_modules/pretty-format": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17721,8 +16094,6 @@ }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { @@ -17732,17 +16103,8 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, "node_modules/prismjs": { "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", "dev": true, "license": "MIT", "engines": { @@ -17751,8 +16113,6 @@ }, "node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "license": "MIT", "engines": { "node": ">= 0.6.0" @@ -17760,14 +16120,16 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", "license": "MIT" }, "node_modules/prompts": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -17778,27 +16140,8 @@ "node": ">= 6" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, "node_modules/property-information": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", - "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", + "version": "7.1.0", "license": "MIT", "funding": { "type": "github", @@ -17807,8 +16150,6 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -17818,53 +16159,17 @@ "node": ">= 0.10" } }, - "node_modules/proxy-agent": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", - "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.6", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.1.0", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.5" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, "node_modules/pstree.remy": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true, "license": "MIT" }, "node_modules/public-encrypt": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "license": "MIT", "dependencies": { "bn.js": "^4.1.0", @@ -17876,15 +16181,11 @@ } }, "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.3", "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -17893,8 +16194,6 @@ }, "node_modules/pure-rand": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -17909,9 +16208,7 @@ "license": "MIT" }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.15.0", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -17923,48 +16220,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/quansync": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz", - "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/antfu" - }, - { - "type": "individual", - "url": "https://github.com/sponsors/sxzz" - } - ], - "license": "MIT" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", "license": "MIT" }, "node_modules/quicktype": { - "version": "23.1.1", - "resolved": "https://registry.npmjs.org/quicktype/-/quicktype-23.1.1.tgz", - "integrity": "sha512-oyIMWpg/RVJ0XWe5sfHmFDJPzjZYaoQe0JYpgHDiSLcb3D4edzEunk/mh1NPUw04SXVQRTPJXDvvTHUOyHqmxw==", + "version": "23.2.6", "dev": true, "license": "Apache-2.0", "workspaces": [ @@ -17983,13 +16246,13 @@ "graphql": "^0.11.7", "lodash": "^4.17.21", "moment": "^2.30.1", - "quicktype-core": "23.1.1", - "quicktype-graphql-input": "23.1.1", - "quicktype-typescript-input": "23.1.1", + "quicktype-core": "23.2.6", + "quicktype-graphql-input": "23.2.6", + "quicktype-typescript-input": "23.2.6", "readable-stream": "^4.5.2", "stream-json": "1.8.0", "string-to-stream": "^3.0.1", - "typescript": "4.9.5" + "typescript": "~5.8.3" }, "bin": { "quicktype": "dist/index.js" @@ -17999,9 +16262,7 @@ } }, "node_modules/quicktype-core": { - "version": "23.1.1", - "resolved": "https://registry.npmjs.org/quicktype-core/-/quicktype-core-23.1.1.tgz", - "integrity": "sha512-YhbUh6dXr+yTNl9Jgh85r6t9xkztIqPsgs3hI10r/ULsG3Fo15UgXgSFS6CIQ/PU76ptCBM9x+1a39i5+nwpqw==", + "version": "23.2.6", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -18023,15 +16284,11 @@ }, "node_modules/quicktype-core/node_modules/@glideapps/ts-necessities": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.2.3.tgz", - "integrity": "sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w==", "dev": true, "license": "MIT" }, "node_modules/quicktype-core/node_modules/readable-stream": { "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dev": true, "license": "MIT", "dependencies": { @@ -18045,34 +16302,36 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/quicktype-core/node_modules/string_decoder": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/quicktype-graphql-input": { - "version": "23.1.1", - "resolved": "https://registry.npmjs.org/quicktype-graphql-input/-/quicktype-graphql-input-23.1.1.tgz", - "integrity": "sha512-k3gZSnvV/BT3VbwDTILTnKytBn6sOzaHBAjV6/B4veX++PJnpC79hu310lfk0wkDSvRp47Ku1NTUaYegqWzJ9Q==", + "version": "23.2.6", "dev": true, "license": "Apache-2.0", "dependencies": { "collection-utils": "^1.0.1", "graphql": "^0.11.7", - "quicktype-core": "23.1.1" + "quicktype-core": "23.2.6" } }, "node_modules/quicktype-typescript-input": { - "version": "23.1.1", - "resolved": "https://registry.npmjs.org/quicktype-typescript-input/-/quicktype-typescript-input-23.1.1.tgz", - "integrity": "sha512-cT51nPMWlSxCq3WSsIFxx14uflntAKUxWB0GWr3XZ/TAF4HtmS7hPI6gEa+bpJtEfcrKZwsTxWfl9jnv/f3OMA==", + "version": "23.2.6", "dev": true, "license": "Apache-2.0", "dependencies": { "@mark.probst/typescript-json-schema": "0.55.0", - "quicktype-core": "23.1.1", + "quicktype-core": "23.2.6", "typescript": "4.9.5" } }, "node_modules/quicktype-typescript-input/node_modules/typescript": { "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "license": "Apache-2.0", "bin": { @@ -18083,10 +16342,31 @@ "node": ">=4.2.0" } }, + "node_modules/quicktype/node_modules/readable-stream": { + "version": "4.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/quicktype/node_modules/string_decoder": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/quicktype/node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.8.3", "dev": true, "license": "Apache-2.0", "bin": { @@ -18094,13 +16374,11 @@ "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" @@ -18108,8 +16386,6 @@ }, "node_modules/randomfill": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "license": "MIT", "dependencies": { "randombytes": "^2.0.5", @@ -18118,8 +16394,6 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -18127,8 +16401,6 @@ }, "node_modules/raw-body": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { "bytes": "~3.1.2", @@ -18140,121 +16412,30 @@ "node": ">= 0.10" } }, - "node_modules/raw-body/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/raw-body/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "version": "19.2.4", "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "version": "19.2.4", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-dom/node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" + "react": "^19.2.4" } }, "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "version": "18.3.1", + "dev": true, "license": "MIT" }, "node_modules/react-markdown": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz", - "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -18280,8 +16461,6 @@ }, "node_modules/react-refresh": { "version": "0.16.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.16.0.tgz", - "integrity": "sha512-FPvF2XxTSikpJxcr+bHut2H4gJ17+18Uy20D5/F+SKzFap62R3cM5wH6b8WN3LyGSYeQilLEcJcR1fjBSI2S1A==", "dev": true, "license": "MIT", "engines": { @@ -18289,9 +16468,7 @@ } }, "node_modules/react-remove-scroll": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", - "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", + "version": "2.7.2", "dev": true, "license": "MIT", "dependencies": { @@ -18316,8 +16493,6 @@ }, "node_modules/react-remove-scroll-bar": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", "dev": true, "license": "MIT", "dependencies": { @@ -18338,14 +16513,11 @@ } }, "node_modules/react-router": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.5.3.tgz", - "integrity": "sha512-3iUDM4/fZCQ89SXlDa+Ph3MevBrozBAI655OAfWQlTm9nBR0IKlrmNwFow5lPHttbwvITZfkeeeZFP6zt3F7pw==", + "version": "7.13.1", "license": "MIT", "dependencies": { "cookie": "^1.0.1", - "set-cookie-parser": "^2.6.0", - "turbo-stream": "2.4.0" + "set-cookie-parser": "^2.6.0" }, "engines": { "node": ">=20.0.0" @@ -18360,19 +16532,8 @@ } } }, - "node_modules/react-router/node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "node_modules/react-simple-code-editor": { "version": "0.14.1", - "resolved": "https://registry.npmjs.org/react-simple-code-editor/-/react-simple-code-editor-0.14.1.tgz", - "integrity": "sha512-BR5DtNRy+AswWJECyA17qhUDvrrCZ6zXOCfkQY5zSmb96BVUbpVAv03WpcjcwtCwiLbIANx3gebHOcXYn1EHow==", "dev": true, "license": "MIT", "peerDependencies": { @@ -18382,8 +16543,6 @@ }, "node_modules/react-style-singleton": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18403,101 +16562,50 @@ } } }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/read-yaml-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", - "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.5", - "js-yaml": "^3.6.1", - "pify": "^4.0.1", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/read-yaml-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, + "version": "2.3.8", "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "version": "4.1.2", "dev": true, "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, "engines": { - "node": ">=8.10.0" + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", "license": "MIT", "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">= 12.13.0" } }, "node_modules/reflect-metadata": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "license": "Apache-2.0" }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { @@ -18517,16 +16625,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { @@ -18544,34 +16644,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "rc": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/remark-breaks": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-breaks/-/remark-breaks-4.0.0.tgz", - "integrity": "sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -18585,8 +16659,6 @@ }, "node_modules/remark-gfm": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", "dev": true, "license": "MIT", "dependencies": { @@ -18604,8 +16676,6 @@ }, "node_modules/remark-parse": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -18620,8 +16690,6 @@ }, "node_modules/remark-rehype": { "version": "11.1.2", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", - "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -18637,8 +16705,6 @@ }, "node_modules/remark-stringify": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "dev": true, "license": "MIT", "dependencies": { @@ -18653,8 +16719,6 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -18662,21 +16726,17 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.11", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -18692,8 +16752,6 @@ }, "node_modules/resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "license": "MIT", "dependencies": { @@ -18703,20 +16761,24 @@ "node": ">=8" } }, - "node_modules/resolve-from": { + "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, "license": "MIT", "funding": { @@ -18725,48 +16787,196 @@ }, "node_modules/resolve.exports": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, "license": "MIT", "engines": { "node": ">=10" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, + "node_modules/restify": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/restify/-/restify-11.1.0.tgz", + "integrity": "sha512-ng7uBlj4wpIpshhAjNNSd6JG5Eg32+zgync2gG8OlF4e2xzIflZo54GJ/qLs765OtQaVU+uJPcNOL5Atm2F/dg==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "csv": "^6.2.2", + "escape-regexp-component": "^1.0.2", + "ewma": "^2.0.1", + "find-my-way": "^7.2.0", + "formidable": "^1.2.1", + "http-signature": "^1.3.6", + "lodash": "^4.17.11", + "lru-cache": "^7.14.1", + "mime": "^3.0.0", + "negotiator": "^0.6.2", + "once": "^1.4.0", + "pidusage": "^3.0.2", + "pino": "^8.7.0", + "qs": "^6.7.0", + "restify-errors": "^8.0.2", + "semver": "^7.3.8", + "send": "^0.18.0", + "spdy": "^4.0.0", + "uuid": "^9.0.0", + "vasync": "^2.2.0" + }, + "bin": { + "report-latency": "bin/report-latency" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "dtrace-provider": "~0.8" + } + }, + "node_modules/restify-errors": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/restify-errors/-/restify-errors-8.1.0.tgz", + "integrity": "sha512-9ZYZTL9qli2hYykL3newPLf8RLgpSz+4RpZ7KKVSAj4CgCA8PwlfATI4onV13IZ3ldzV3M/2bJom6GQEAwS9aQ==", "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "@netflix/nerror": "^1.1.3", + "assert-plus": "^1.0.0", + "lodash": "^4.17.21" }, + "optionalDependencies": { + "safe-json-stringify": "^1.2.0" + } + }, + "node_modules/restify/node_modules/formidable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", + "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", + "license": "MIT", + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/restify/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, + "node_modules/restify/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/restify/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "license": "MIT", + "bin": { + "mime": "cli.js" + }, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=10.0.0" + } + }, + "node_modules/restify/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/restify/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/restify/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/restify/node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/restify/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/ret": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.5.0.tgz", + "integrity": "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==", + "license": "MIT", + "engines": { + "node": ">=10" } }, "node_modules/rimraf": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "version": "6.1.3", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "glob": "^11.0.0", - "package-json-from-dist": "^1.0.0" + "glob": "^13.0.3", + "package-json-from-dist": "^1.0.1" }, "bin": { "rimraf": "dist/esm/bin.mjs" @@ -18778,64 +16988,85 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/balanced-match": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "5.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/rimraf/node_modules/glob": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", - "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "version": "13.0.6", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rimraf/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.4", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "node_modules/ripemd160": { + "version": "2.0.3", + "license": "MIT", + "dependencies": { + "hash-base": "^3.1.2", + "inherits": "^2.0.4" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ripemd160/node_modules/hash-base": { + "version": "3.1.2", "license": "MIT", "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/rollup": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.1.tgz", - "integrity": "sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==", + "version": "4.59.0", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.7" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -18845,33 +17076,48 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.40.1", - "@rollup/rollup-android-arm64": "4.40.1", - "@rollup/rollup-darwin-arm64": "4.40.1", - "@rollup/rollup-darwin-x64": "4.40.1", - "@rollup/rollup-freebsd-arm64": "4.40.1", - "@rollup/rollup-freebsd-x64": "4.40.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.40.1", - "@rollup/rollup-linux-arm-musleabihf": "4.40.1", - "@rollup/rollup-linux-arm64-gnu": "4.40.1", - "@rollup/rollup-linux-arm64-musl": "4.40.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.40.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.40.1", - "@rollup/rollup-linux-riscv64-gnu": "4.40.1", - "@rollup/rollup-linux-riscv64-musl": "4.40.1", - "@rollup/rollup-linux-s390x-gnu": "4.40.1", - "@rollup/rollup-linux-x64-gnu": "4.40.1", - "@rollup/rollup-linux-x64-musl": "4.40.1", - "@rollup/rollup-win32-arm64-msvc": "4.40.1", - "@rollup/rollup-win32-ia32-msvc": "4.40.1", - "@rollup/rollup-win32-x64-msvc": "4.40.1", + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" } }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/router": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -18884,25 +17130,27 @@ "node": ">= 18" } }, + "node_modules/router/node_modules/path-to-regexp": { + "version": "8.3.0", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/rsa-pem-from-mod-exp": { "version": "0.8.6", - "resolved": "https://registry.npmjs.org/rsa-pem-from-mod-exp/-/rsa-pem-from-mod-exp-0.8.6.tgz", - "integrity": "sha512-c5ouQkOvGHF1qomUUDJGFcXsomeSO2gbEs6hVhMAtlkE1CuaZase/WzoaKFG/EZQuNmq6pw/EMCeEnDvOgCJYQ==", "license": "MIT" }, "node_modules/rtl-css-js": { "version": "1.16.1", - "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", - "integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.1.2" } }, "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "version": "7.1.0", "license": "MIT", "engines": { "node": ">=18" @@ -18911,54 +17159,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/safe-array-concat": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -18975,10 +17177,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -18995,10 +17200,15 @@ ], "license": "MIT" }, + "node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "license": "MIT", + "optional": true + }, "node_modules/safe-push-apply": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { @@ -19012,10 +17222,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, "node_modules/safe-regex-test": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { @@ -19030,11 +17243,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-regex2": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-5.1.0.tgz", + "integrity": "sha512-pNHAuBW7TrcleFHsxBr5QMi/Iyp0ENjUKz7GCcX1UO7cMh+NmVK6HxQckNL1tJp1XAJVjG6B8OKIPqodqj9rtw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "ret": "~0.5.0" + }, + "bin": { + "safe-regex2": "bin/safe-regex2.js" + } + }, "node_modules/safe-stable-stringify": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -19042,91 +17274,87 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" + "version": "1.4.4", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } + "version": "0.27.0", + "license": "MIT" + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "license": "MIT" }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "6.3.1", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "version": "0.19.2", "license": "MIT", + "peer": true, "dependencies": { - "debug": "^4.3.5", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.1" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" }, "engines": { - "node": ">= 18" + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" } }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "license": "MIT", + "peer": true + }, "node_modules/serve-handler": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", - "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.7.tgz", + "integrity": "sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==", "dev": true, "license": "MIT", "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", "mime-types": "2.1.18", - "minimatch": "3.1.2", + "minimatch": "3.1.5", "path-is-inside": "1.0.2", "path-to-regexp": "3.3.0", "range-parser": "1.2.0" } }, - "node_modules/serve-handler/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/serve-handler/node_modules/bytes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, "license": "MIT", "engines": { @@ -19135,8 +17363,6 @@ }, "node_modules/serve-handler/node_modules/content-disposition": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", "dev": true, "license": "MIT", "engines": { @@ -19145,8 +17371,6 @@ }, "node_modules/serve-handler/node_modules/mime-db": { "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", "dev": true, "license": "MIT", "engines": { @@ -19155,8 +17379,6 @@ }, "node_modules/serve-handler/node_modules/mime-types": { "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19166,30 +17388,13 @@ "node": ">= 0.6" } }, - "node_modules/serve-handler/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/serve-handler/node_modules/path-to-regexp": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", "dev": true, "license": "MIT" }, "node_modules/serve-handler/node_modules/range-parser": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", "dev": true, "license": "MIT", "engines": { @@ -19197,30 +17402,25 @@ } }, "node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "version": "1.16.3", "license": "MIT", + "peer": true, "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" }, "engines": { - "node": ">= 18" + "node": ">= 0.8.0" } }, "node_modules/set-cookie-parser": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", - "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "version": "2.7.2", "license": "MIT" }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -19236,8 +17436,6 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19252,8 +17450,6 @@ }, "node_modules/set-proto": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -19267,14 +17463,10 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, "node_modules/sha.js": { "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.4", @@ -19293,8 +17485,6 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -19305,8 +17495,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "license": "MIT", "engines": { "node": ">=8" @@ -19314,8 +17502,6 @@ }, "node_modules/shell-quote": { "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "dev": true, "license": "MIT", "engines": { @@ -19327,8 +17513,6 @@ }, "node_modules/side-channel": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -19346,8 +17530,6 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -19362,8 +17544,6 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -19380,8 +17560,6 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -19398,16 +17576,18 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "version": "4.1.0", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/simple-update-notifier": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, "license": "MIT", "dependencies": { @@ -19417,68 +17597,41 @@ "node": ">=10" } }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.7.4", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/sisteransi": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true, "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", - "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", - "dev": true, + "node_modules/sonic-boom": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", + "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", "license": "MIT", "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" + "atomic-sleep": "^1.0.0" } }, "node_modules/sort-keys": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz", - "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==", "license": "MIT", "dependencies": { "is-plain-obj": "^4.0.0" @@ -19490,10 +17643,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -19502,8 +17660,6 @@ }, "node_modules/source-map-support": { "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "license": "MIT", "dependencies": { @@ -19511,20 +17667,8 @@ "source-map": "^0.6.0" } }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/space-separated-tokens": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "license": "MIT", "funding": { "type": "github", @@ -19533,8 +17677,6 @@ }, "node_modules/spawn-rx": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/spawn-rx/-/spawn-rx-5.1.2.tgz", - "integrity": "sha512-/y7tJKALVZ1lPzeZZB9jYnmtrL7d0N2zkorii5a7r7dhHkWIuLTzZpZzMJLK1dmYRgX/NCc4iarTO3F7BS2c/A==", "dev": true, "license": "MIT", "dependencies": { @@ -19542,41 +17684,99 @@ "rxjs": "^7.8.1" } }, - "node_modules/spawndamnit": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", - "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", + "node_modules/spawn-rx/node_modules/rxjs": { + "version": "7.8.2", "dev": true, - "license": "SEE LICENSE IN LICENSE", + "license": "Apache-2.0", "dependencies": { - "cross-spawn": "^7.0.5", - "signal-exit": "^4.0.1" + "tslib": "^2.1.0" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/spawndamnit/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "license": "ISC", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 10.x" } }, "node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/stack-utils": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19588,8 +17788,6 @@ }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "license": "MIT", "engines": { @@ -19597,18 +17795,26 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/stream-browserify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "license": "MIT", "dependencies": { "inherits": "~2.0.4", @@ -19617,8 +17823,6 @@ }, "node_modules/stream-browserify/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -19631,15 +17835,11 @@ }, "node_modules/stream-chain": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", - "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/stream-http": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "license": "MIT", "dependencies": { "builtin-status-codes": "^3.0.0", @@ -19650,8 +17850,6 @@ }, "node_modules/stream-http/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -19664,27 +17862,31 @@ }, "node_modules/stream-json": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", - "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "stream-chain": "^2.2.5" } }, + "node_modules/stream-transform": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-3.4.1.tgz", + "integrity": "sha512-4P7GsGr95QaRsN09ws40kVdaR6VAeeJtprKVQPOnRp9rOuuW8kzONeYbhikCrbg2RSsHqfIJOnAf+RMNZcKOFQ==", + "license": "MIT" + }, "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.1.1", "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, "node_modules/string-length": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19697,8 +17899,6 @@ }, "node_modules/string-to-stream": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-3.0.1.tgz", - "integrity": "sha512-Hl092MV3USJuUCC6mfl9sPzGloA3K5VwdIeJjYIkXY/8K+mUvaeEabWJgArp+xXrsWxCajeT2pc4axbVhIZJyg==", "dev": true, "license": "MIT", "dependencies": { @@ -19707,8 +17907,6 @@ }, "node_modules/string-to-stream/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { @@ -19722,24 +17920,6 @@ }, "node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -19752,8 +17932,6 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { @@ -19774,8 +17952,6 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19793,8 +17969,6 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -19811,8 +17985,6 @@ }, "node_modules/stringify-entities": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", "license": "MIT", "dependencies": { "character-entities-html4": "^2.0.0", @@ -19825,22 +17997,6 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -19851,8 +18007,6 @@ }, "node_modules/strip-bom": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "license": "MIT", "engines": { @@ -19861,8 +18015,6 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", "engines": { @@ -19871,8 +18023,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -19884,8 +18034,6 @@ }, "node_modules/strip-outer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.2" @@ -19896,56 +18044,44 @@ }, "node_modules/strip-outer/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/style-mod": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", - "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", + "version": "4.1.3", "license": "MIT" }, "node_modules/style-to-js": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.16.tgz", - "integrity": "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==", + "version": "1.1.21", "license": "MIT", "dependencies": { - "style-to-object": "1.0.8" + "style-to-object": "1.0.14" } }, "node_modules/style-to-object": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", - "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "version": "1.0.14", "license": "MIT", "dependencies": { - "inline-style-parser": "0.2.4" + "inline-style-parser": "0.2.7" } }, "node_modules/stylis": { "version": "4.3.6", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", - "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", "license": "MIT" }, "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "version": "3.35.1", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", - "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { @@ -19956,116 +18092,59 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "node_modules/superagent": { + "version": "10.3.0", "dev": true, "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "component-emitter": "^1.3.1", + "cookiejar": "^2.1.4", + "debug": "^4.3.7", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.5", + "formidable": "^3.5.4", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.14.1" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "engines": { + "node": ">=14.18.0" } }, - "node_modules/sucrase/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sucrase/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "license": "MIT", + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=4.0.0" } }, - "node_modules/superagent": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", - "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", + "node_modules/supertest": { + "version": "7.2.2", "dev": true, "license": "MIT", "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^3.5.1", + "cookie-signature": "^1.2.2", "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0" + "superagent": "^10.3.0" }, "engines": { "node": ">=14.18.0" } }, - "node_modules/supertest": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.0.tgz", - "integrity": "sha512-5QeSO8hSrKghtcWEoPiO036fxH0Ii2wVQfFZSP0oqQhmjk8bOLhDFXr4JrvaFmPuEWUoq4znY3uSi8UzLKxGqw==", + "node_modules/supertest/node_modules/cookie-signature": { + "version": "1.2.2", "dev": true, "license": "MIT", - "dependencies": { - "methods": "^1.1.2", - "superagent": "^9.0.1" - }, "engines": { - "node": ">=14.18.0" + "node": ">=6.6.0" } }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -20077,8 +18156,6 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { @@ -20090,8 +18167,6 @@ }, "node_modules/table-layout": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-4.1.1.tgz", - "integrity": "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==", "dev": true, "license": "MIT", "dependencies": { @@ -20104,8 +18179,6 @@ }, "node_modules/table-layout/node_modules/array-back": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "dev": true, "license": "MIT", "engines": { @@ -20113,19 +18186,31 @@ } }, "node_modules/tabster": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/tabster/-/tabster-8.5.4.tgz", - "integrity": "sha512-5Fe8vonlp6wjkBuaU3YImZsFncXkdxhCIE6CR28nD0n84kZERIDr9T9wBeya5h1Oj19AhzGFWyZrL6/29tCobA==", + "version": "8.7.0", "license": "MIT", "dependencies": { "keyborg": "2.6.0", - "tslib": "^2.3.1" + "tslib": "^2.8.1" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "4.53.3" } }, + "node_modules/tabster/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz", + "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/tailwind-merge": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", - "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", + "version": "2.6.1", "dev": true, "license": "MIT", "funding": { @@ -20133,23 +18218,8 @@ "url": "https://github.com/sponsors/dcastil" } }, - "node_modules/term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/test-exclude": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "license": "ISC", "dependencies": { @@ -20161,34 +18231,8 @@ "node": ">=8" } }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/thenify": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, "license": "MIT", "dependencies": { @@ -20197,8 +18241,6 @@ }, "node_modules/thenify-all": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, "license": "MIT", "dependencies": { @@ -20208,43 +18250,32 @@ "node": ">=0.8" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" + "node_modules/thread-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz", + "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } }, "node_modules/tiny-inflate": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinycolor2": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", "dev": true, "license": "MIT" }, "node_modules/tinyexec": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", "dev": true, "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", - "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "version": "0.2.15", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -20253,35 +18284,13 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinygradient": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/tinygradient/-/tinygradient-1.1.5.tgz", - "integrity": "sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/tinycolor2": "^1.4.0", - "tinycolor2": "^1.0.0" - } - }, - "node_modules/title-case": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-4.3.2.tgz", - "integrity": "sha512-I/nkcBo73mO42Idfv08jhInV61IMb61OdIFxk+B4Gu1oBjWBPOLmhZdsli+oJCVaD+86pYQA93cJfFt224ZFAA==", - "dev": true, - "license": "MIT" - }, "node_modules/tmpl": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/to-buffer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", - "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "version": "1.2.2", "license": "MIT", "dependencies": { "isarray": "^2.0.5", @@ -20292,10 +18301,12 @@ "node": ">= 0.4" } }, + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "license": "MIT" + }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -20307,8 +18318,6 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", "engines": { "node": ">=0.6" @@ -20316,8 +18325,6 @@ }, "node_modules/touch": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", - "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", "dev": true, "license": "ISC", "bin": { @@ -20326,14 +18333,10 @@ }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, "node_modules/tree-kill": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, "license": "MIT", "bin": { @@ -20342,8 +18345,6 @@ }, "node_modules/trim-lines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", "license": "MIT", "funding": { "type": "github", @@ -20352,8 +18353,6 @@ }, "node_modules/trim-repeated": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.2" @@ -20364,8 +18363,6 @@ }, "node_modules/trim-repeated/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "license": "MIT", "engines": { "node": ">=0.8.0" @@ -20373,8 +18370,6 @@ }, "node_modules/trough": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", "license": "MIT", "funding": { "type": "github", @@ -20382,9 +18377,7 @@ } }, "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.4.0", "dev": true, "license": "MIT", "engines": { @@ -20396,27 +18389,22 @@ }, "node_modules/ts-interface-checker": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true, "license": "Apache-2.0" }, "node_modules/ts-jest": { - "version": "29.3.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.2.tgz", - "integrity": "sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==", + "version": "29.4.6", "dev": true, "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", - "ejs": "^3.1.10", "fast-json-stable-stringify": "^2.1.0", - "jest-util": "^29.0.0", + "handlebars": "^4.7.8", "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.7.1", - "type-fest": "^4.39.1", + "semver": "^7.7.3", + "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, "bin": { @@ -20427,10 +18415,11 @@ }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { @@ -20448,13 +18437,25 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.7.4", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ts-jest/node_modules/type-fest": { - "version": "4.40.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.40.1.tgz", - "integrity": "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA==", + "version": "4.41.0", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -20466,8 +18467,6 @@ }, "node_modules/ts-node": { "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -20510,8 +18509,6 @@ }, "node_modules/tsconfig-paths": { "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { @@ -20523,8 +18520,6 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", "dependencies": { @@ -20536,8 +18531,6 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -20546,14 +18539,10 @@ }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/tsup": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.4.0.tgz", - "integrity": "sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ==", + "version": "8.5.1", "dev": true, "license": "MIT", "dependencies": { @@ -20562,13 +18551,14 @@ "chokidar": "^4.0.3", "consola": "^3.4.0", "debug": "^4.4.0", - "esbuild": "^0.25.0", + "esbuild": "^0.27.0", + "fix-dts-default-cjs-exports": "^1.0.0", "joycon": "^3.1.1", "picocolors": "^1.1.1", "postcss-load-config": "^6.0.1", "resolve-from": "^5.0.0", "rollup": "^4.34.8", - "source-map": "0.8.0-beta.0", + "source-map": "^0.7.6", "sucrase": "^3.35.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.11", @@ -20599,89 +18589,31 @@ }, "typescript": { "optional": true - } - } - }, - "node_modules/tsup/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/tsup/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/tsup/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" + } } }, - "node_modules/tsup/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "node_modules/tsup/node_modules/resolve-from": { + "version": "5.0.0", "dev": true, "license": "MIT", - "dependencies": { - "punycode": "^2.1.0" + "engines": { + "node": ">=8" } }, - "node_modules/tsup/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/tsup/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "node_modules/tsup/node_modules/source-map": { + "version": "0.7.6", "dev": true, - "license": "MIT", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" } }, "node_modules/tsx": { - "version": "4.20.6", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", - "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", + "version": "4.21.0", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "~0.25.0", + "esbuild": "~0.27.0", "get-tsconfig": "^4.7.5" }, "bin": { @@ -20696,35 +18628,29 @@ }, "node_modules/tunnel": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "license": "MIT", "engines": { "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, "node_modules/turbo": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.5.2.tgz", - "integrity": "sha512-Qo5lfuStr6LQh3sPQl7kIi243bGU4aHGDQJUf6ylAdGwks30jJFloc9NYHP7Y373+gGU9OS0faA4Mb5Sy8X9Xw==", + "version": "2.8.11", "dev": true, "license": "MIT", "bin": { "turbo": "bin/turbo" }, "optionalDependencies": { - "turbo-darwin-64": "2.5.2", - "turbo-darwin-arm64": "2.5.2", - "turbo-linux-64": "2.5.2", - "turbo-linux-arm64": "2.5.2", - "turbo-windows-64": "2.5.2", - "turbo-windows-arm64": "2.5.2" + "turbo-darwin-64": "2.8.11", + "turbo-darwin-arm64": "2.8.11", + "turbo-linux-64": "2.8.11", + "turbo-linux-arm64": "2.8.11", + "turbo-windows-64": "2.8.11", + "turbo-windows-arm64": "2.8.11" } }, "node_modules/turbo-darwin-64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.5.2.tgz", - "integrity": "sha512-2aIl0Sx230nLk+Cg2qSVxvPOBWCZpwKNuAMKoROTvWKif6VMpkWWiR9XEPoz7sHeLmCOed4GYGMjL1bqAiIS/g==", + "version": "2.8.11", "cpu": [ "x64" ], @@ -20736,9 +18662,7 @@ ] }, "node_modules/turbo-darwin-arm64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.5.2.tgz", - "integrity": "sha512-MrFYhK/jYu8N6QlqZtqSHi3e4QVxlzqU3ANHTKn3/tThuwTLbNHEvzBPWSj5W7nZcM58dCqi6gYrfRz6bJZyAA==", + "version": "2.8.11", "cpu": [ "arm64" ], @@ -20750,9 +18674,7 @@ ] }, "node_modules/turbo-linux-64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.5.2.tgz", - "integrity": "sha512-LxNqUE2HmAJQ/8deoLgMUDzKxd5bKxqH0UBogWa+DF+JcXhtze3UTMr6lEr0dEofdsEUYK1zg8FRjglmwlN5YA==", + "version": "2.8.11", "cpu": [ "x64" ], @@ -20764,9 +18686,7 @@ ] }, "node_modules/turbo-linux-arm64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.5.2.tgz", - "integrity": "sha512-0MI1Ao1q8zhd+UUbIEsrM+yLq1BsrcJQRGZkxIsHFlGp7WQQH1oR3laBgfnUCNdCotCMD6w4moc9pUbXdOR3bg==", + "version": "2.8.11", "cpu": [ "arm64" ], @@ -20777,16 +18697,8 @@ "linux" ] }, - "node_modules/turbo-stream": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", - "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", - "license": "ISC" - }, "node_modules/turbo-windows-64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.5.2.tgz", - "integrity": "sha512-hOLcbgZzE5ttACHHyc1ajmWYq4zKT42IC3G6XqgiXxMbS+4eyVYTL+7UvCZBd3Kca1u4TLQdLQjeO76zyDJc2A==", + "version": "2.8.11", "cpu": [ "x64" ], @@ -20798,9 +18710,7 @@ ] }, "node_modules/turbo-windows-arm64": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.5.2.tgz", - "integrity": "sha512-fMU41ABhSLa18H8V3Z7BMCGynQ8x+wj9WyBMvWm1jeyRKgkvUYJsO2vkIsy8m0vrwnIeVXKOIn6eSe1ddlBVqw==", + "version": "2.8.11", "cpu": [ "arm64" ], @@ -20811,10 +18721,14 @@ "win32" ] }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -20826,8 +18740,6 @@ }, "node_modules/type-detect": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "license": "MIT", "engines": { @@ -20836,8 +18748,6 @@ }, "node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -20848,14 +18758,12 @@ } }, "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "version": "1.6.18", "license": "MIT", + "peer": true, "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "engines": { "node": ">= 0.6" @@ -20863,8 +18771,6 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -20877,8 +18783,6 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { @@ -20897,8 +18801,6 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -20919,8 +18821,6 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -20939,593 +18839,936 @@ } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.3", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=14.17" + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.56.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.56.1", + "@typescript-eslint/parser": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/utils": "8.56.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "dev": true, + "license": "MIT" + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "license": "MIT" + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicode-trie/node_modules/pako": { + "version": "0.2.9", + "dev": true, + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js-replace": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/urijs": { + "version": "1.19.11", + "dev": true, + "license": "MIT" + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/typescript-eslint": { - "version": "8.31.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.31.1.tgz", - "integrity": "sha512-j6DsEotD/fH39qKzXTQRwYYWlt7D+0HmfpOK+DVhwJOFLcdmn92hq3mBb7HlKJHbjjI/gTOqEcc9d6JfpFf/VA==", + "node_modules/use-sidecar": { + "version": "1.1.3", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.31.1", - "@typescript-eslint/parser": "8.31.1", - "@typescript-eslint/utils": "8.31.1" + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=10" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "license": "MIT", "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", "license": "MIT", + "peer": true, "engines": { - "node": ">=8" + "node": ">= 0.4.0" } }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "license": "BSD-2-Clause", - "optional": true, + "node_modules/uuid": { + "version": "11.1.0", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" + "uuid": "dist/esm/bin/uuid" } }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "dev": true, + "license": "ISC", "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10.12.0" } }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true, - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" + "node_modules/vary": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "node_modules/unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "dev": true, + "node_modules/vasync": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vasync/-/vasync-2.2.1.tgz", + "integrity": "sha512-Hq72JaTpcTFdWiNA4Y22Amej2GH3BFmBaKPPlDZ4/oC8HNn2ISHLkFrJU4Ds8R3jcUi7oo5Y9jcMHKjES+N9wQ==", + "engines": [ + "node >=0.6.0" + ], "license": "MIT", "dependencies": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" + "verror": "1.10.0" } }, - "node_modules/unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "dev": true, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], "license": "MIT", "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "node_modules/unicode-trie/node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "license": "MIT" }, - "node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "dev": true, + "node_modules/vfile": { + "version": "6.0.3", "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "node_modules/vfile-message": { + "version": "4.0.3", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "node_modules/vite": { + "version": "6.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" } }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" } }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" } }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 4.0.0" + "node": ">=18" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8" + "node": ">=18" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "cpu": [ + "ia32" ], + "dev": true, "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/update-check": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", - "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", - "dependencies": { - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "cpu": [ + "mips64el" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/uri-js-replace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", - "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==", - "license": "MIT" - }, - "node_modules/urijs": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==", + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "cpu": [ + "riscv64" + ], "dev": true, "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": ">=18" } }, - "node_modules/use-disposable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/use-disposable/-/use-disposable-1.0.4.tgz", - "integrity": "sha512-j83t6AMLWUyb5zwlTDqf6dP9LezM9R0yTbI/b6olmdaGtCKQUe9pgJWV6dRaaQLcozypjIEp4EmZr2DkZGKLSg==", + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "cpu": [ + "s390x" + ], + "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": ">=16.8.0 <19.0.0", - "@types/react-dom": ">=16.8.0 <19.0.0", - "react": ">=16.8.0 <19.0.0", - "react-dom": ">=16.8.0 <19.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": ">=18" } }, - "node_modules/use-sync-external-store": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", - "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "node_modules/vite/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 0.4.0" + "node": ">=18" } }, - "node_modules/uuid": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", - "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "cpu": [ + "arm64" ], + "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/esm/bin/uuid" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "node_modules/vite/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "cpu": [ + "arm64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": ">=10.12.0" + "node": ">=18" } }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=18" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.8" + "node": ">=18" } }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "cpu": [ + "ia32" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, - "node_modules/vite": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", - "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "node_modules/vite/node_modules/esbuild": { + "version": "0.25.12", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.4.4", - "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" - }, "bin": { - "vite": "bin/vite.js" + "esbuild": "bin/esbuild" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" + "node": ">=18" }, "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/w3c-keyname": { "version": "2.2.8", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", "license": "MIT" }, "node_modules/walker": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "license": "MIT", "dependencies": { - "defaults": "^1.0.3" + "minimalistic-assert": "^1.0.0" } }, "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "version": "3.3.3", + "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">= 14" + "node": ">= 8" } }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "license": "MIT", "dependencies": { "tr46": "~0.0.3", @@ -21534,8 +19777,6 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -21549,8 +19790,6 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { @@ -21569,8 +19808,6 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -21595,10 +19832,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -21615,9 +19855,7 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "version": "1.1.20", "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -21637,8 +19875,6 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { @@ -21647,14 +19883,10 @@ }, "node_modules/wordwrap": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "license": "MIT" }, "node_modules/wordwrapjs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", - "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==", + "version": "5.1.1", "dev": true, "license": "MIT", "engines": { @@ -21663,8 +19895,6 @@ }, "node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { @@ -21676,35 +19906,12 @@ "node": ">=8" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "license": "ISC", "dependencies": { @@ -21715,10 +19922,13 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, "node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "version": "8.19.0", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -21738,8 +19948,6 @@ }, "node_modules/wsl-utils": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", - "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", "license": "MIT", "dependencies": { "is-wsl": "^3.1.0" @@ -21753,8 +19961,6 @@ }, "node_modules/xml2js": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "license": "MIT", "dependencies": { "sax": ">=0.6.0", @@ -21766,8 +19972,6 @@ }, "node_modules/xmlbuilder": { "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "license": "MIT", "engines": { "node": ">=4.0" @@ -21775,8 +19979,6 @@ }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "license": "MIT", "engines": { "node": ">=0.4" @@ -21784,8 +19986,6 @@ }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "license": "ISC", "engines": { "node": ">=10" @@ -21793,33 +19993,28 @@ }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" }, "node_modules/yaml": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", - "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", + "version": "2.8.2", "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yaml-ast-parser": { "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", "license": "Apache-2.0" }, "node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -21836,8 +20031,6 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "license": "ISC", "engines": { "node": ">=12" @@ -21845,8 +20038,6 @@ }, "node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "license": "MIT", "engines": { @@ -21855,8 +20046,6 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -21868,8 +20057,6 @@ }, "node_modules/yoctocolors-cjs": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", - "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", "dev": true, "license": "MIT", "engines": { @@ -21881,39 +20068,31 @@ }, "node_modules/zod": { "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/zod-to-json-schema": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.0.tgz", - "integrity": "sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==", + "version": "3.25.1", "license": "ISC", "peerDependencies": { "zod": "^3.25 || ^4" } }, "node_modules/zod-validation-error": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.4.0.tgz", - "integrity": "sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==", + "version": "3.5.4", "dev": true, "license": "MIT", "engines": { "node": ">=18.0.0" }, "peerDependencies": { - "zod": "^3.18.0" + "zod": "^3.24.4" } }, "node_modules/zustand": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.3.tgz", - "integrity": "sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==", + "version": "5.0.11", "license": "MIT", "engines": { "node": ">=12.20.0" @@ -21941,8 +20120,6 @@ }, "node_modules/zwitch": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", "license": "MIT", "funding": { "type": "github", @@ -21951,10 +20128,13 @@ }, "packages/ai": { "name": "@microsoft/teams.ai", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", + "dependencies": { + "@microsoft/teams.common": "*" + }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.0.2", "jest": "^29.7.0", @@ -21965,21 +20145,20 @@ }, "engines": { "node": ">=20" - }, - "peerDependencies": { - "@microsoft/teams.common": "2.0.5" } }, "packages/api": { "name": "@microsoft/teams.api", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "dependencies": { + "@microsoft/teams.cards": "*", + "@microsoft/teams.common": "*", "jwt-decode": "^4.0.0", - "qs": "^6.13.0" + "qs": "^6.14.2" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/jsonwebtoken": "^9.0.7", "@types/qs": "^6.9.15", @@ -21991,28 +20170,27 @@ "typescript": "^5.4.5" }, "engines": { - "node": ">=20" - }, - "peerDependencies": { - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5" + "node": ">=20" } }, "packages/apps": { "name": "@microsoft/teams.apps", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "dependencies": { "@azure/msal-node": "^3.8.1", + "@microsoft/teams.api": "*", + "@microsoft/teams.common": "*", + "@microsoft/teams.graph": "*", "axios": "^1.12.0", "cors": "^2.8.5", - "express": "^4.21.0", + "express": "^5.0.0", "jsonwebtoken": "^9.0.2", "jwks-rsa": "^3.2.0", "reflect-metadata": "^0.2.2" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/cors": "^2.8.17", "@types/express": "^5.0.0", "@types/jest": "^29.5.12", @@ -22030,155 +20208,113 @@ }, "engines": { "node": ">=20" - }, - "peerDependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.graph": "2.0.5" - } - }, - "packages/apps/node_modules/@azure/msal-common": { - "version": "15.13.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.13.1.tgz", - "integrity": "sha512-vQYQcG4J43UWgo1lj7LcmdsGUKWYo28RfEvDQAEMmQIMjSFufvb+pS0FJ3KXmrPmnWlt1vHDl3oip6mIDUQ4uA==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "packages/apps/node_modules/@azure/msal-node": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.1.tgz", - "integrity": "sha512-HszfqoC+i2C9+BRDQfuNUGp15Re7menIhCEbFCQ49D3KaqEDrgZIgQ8zSct4T59jWeUIL9N/Dwiv4o2VueTdqQ==", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "15.13.1", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=16" } }, "packages/apps/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { "node": ">= 0.6" } }, "packages/apps/node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "packages/apps/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "packages/apps/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "packages/apps/node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "packages/apps/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=6.6.0" } }, - "packages/apps/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "packages/apps/node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 18" }, "funding": { "type": "opencollective", @@ -22186,226 +20322,160 @@ } }, "packages/apps/node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "packages/apps/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "packages/apps/node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "packages/apps/node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", + "engines": { + "node": ">=18" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/apps/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "packages/apps/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "packages/apps/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "packages/apps/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "packages/apps/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "packages/apps/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "mime-db": "^1.54.0" }, "engines": { - "node": ">=0.6" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "packages/apps/node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "packages/apps/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, "packages/apps/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" }, "engines": { - "node": ">= 0.8.0" - } - }, - "packages/apps/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "packages/apps/node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "packages/apps/node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { "node": ">= 0.6" } }, - "packages/apps/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "packages/auth": { - "name": "@microsoft/teams.auth", - "version": "2.0.0-preview.6", - "extraneous": true, + "packages/botbuilder": { + "name": "@microsoft/teams.botbuilder", + "version": "0.0.0", "license": "MIT", "dependencies": { - "@microsoft/teams.common": "2.0.0-preview.6", - "jsonwebtoken": "^9.0.2", - "jwks-rsa": "^3.1.0" + "@microsoft/teams.api": "*", + "@microsoft/teams.common": "*" }, "devDependencies": { "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", - "@types/jsonwebtoken": "^9.0.6", - "@types/node": "^22.0.2", - "jest": "^29.7.0", - "rimraf": "^6.0.1", - "ts-jest": "^29.2.5", - "typescript": "^5.4.5" - } - }, - "packages/botbuilder": { - "name": "@microsoft/teams.botbuilder", - "version": "2.0.5", - "license": "MIT", - "devDependencies": { - "@microsoft/teams.config": "2.0.5", - "@types/jest": "^29.5.12", "@types/node": "^22.0.2", "jest": "^29.7.0", "rimraf": "^6.0.1", @@ -22417,19 +20487,16 @@ "node": ">=20" }, "peerDependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.graph": "2.0.5", + "@microsoft/teams.apps": "*", "botbuilder": "4.23.1" } }, "packages/cards": { "name": "@microsoft/teams.cards", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "jest": "^29.7.0", "rimraf": "^6.0.1", @@ -22443,10 +20510,10 @@ }, "packages/cli": { "name": "@microsoft/teams.cli", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "dependencies": { - "@microsoft/teams.common": "2.0.5", + "@microsoft/teams.common": "*", "change-case": "^5.4.4", "handlebars": "^4.7.8", "yaml": "^2.7.0", @@ -22457,7 +20524,7 @@ "teams": "dist/index.js" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.10.7", "@types/yargs": "^17.0.33", @@ -22471,16 +20538,23 @@ "node": ">=20" } }, + "packages/cli/node_modules/change-case": { + "version": "5.4.4", + "license": "MIT" + }, "packages/client": { "name": "@microsoft/teams.client", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "dependencies": { "@azure/msal-browser": "^4.9.1", + "@microsoft/teams.api": "*", + "@microsoft/teams.common": "*", + "@microsoft/teams.graph": "*", "uuid": "^11.0.5" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "jest": "^29.7.0", "rimraf": "^6.0.1", @@ -22492,21 +20566,18 @@ "node": ">=20" }, "peerDependencies": { - "@microsoft/teams-js": "^2.35.0", - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.graph": "2.0.5" + "@microsoft/teams-js": "^2.35.0" } }, "packages/common": { "name": "@microsoft/teams.common", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "dependencies": { "axios": "^1.12.0" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "jest": "^29.7.0", "rimraf": "^6.0.1", @@ -22520,7 +20591,7 @@ }, "packages/config": { "name": "@microsoft/teams.config", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "devDependencies": { "@eslint/js": "^9.25.1", @@ -22533,17 +20604,20 @@ }, "packages/dev": { "name": "@microsoft/teams.dev", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "dependencies": { + "@microsoft/teams.api": "*", + "@microsoft/teams.cards": "*", + "@microsoft/teams.common": "*", "axios": "^1.12.0", - "express": "^4.21.0", + "express": "^5.0.0", "jsonwebtoken": "^9.0.2", "uuid": "^11.0.5", "ws": "^8.18.1" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/express": "^5.0.0", "@types/jest": "^29.5.12", "@types/jsonwebtoken": "^9.0.7", @@ -22559,140 +20633,114 @@ "node": ">=20" }, "peerDependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.graph": "2.0.5" - } - }, - "packages/dev/node_modules/@types/ws": { - "version": "8.18.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" + "@microsoft/teams.apps": "*" } }, "packages/dev/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { "node": ">= 0.6" } }, "packages/dev/node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "packages/dev/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "packages/dev/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "packages/dev/node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "packages/dev/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=6.6.0" } }, - "packages/dev/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "packages/dev/node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 18" }, "funding": { "type": "opencollective", @@ -22700,184 +20748,144 @@ } }, "packages/dev/node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "packages/dev/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "packages/dev/node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "packages/dev/node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", + "engines": { + "node": ">=18" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/dev/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "packages/dev/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "packages/dev/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "packages/dev/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "packages/dev/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "packages/dev/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "mime-db": "^1.54.0" }, "engines": { - "node": ">=0.6" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "packages/dev/node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "packages/dev/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "packages/dev/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.6" } }, - "packages/dev/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "packages/dev/node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, "engines": { - "node": ">= 0.8" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "packages/dev/node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "packages/dev/node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { "node": ">= 0.6" @@ -22885,16 +20893,16 @@ }, "packages/devtools": { "name": "@microsoft/teams.devtools", - "version": "2.0.5", + "version": "0.0.0", "dependencies": { "@codemirror/lang-javascript": "^6.2.3", "@codemirror/lang-json": "^6.0.1", "@fluentui/react-components": "^9.6.0", "@fluentui/react-icons": "^2.0.274", - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", + "@microsoft/teams.api": "*", + "@microsoft/teams.apps": "*", + "@microsoft/teams.cards": "*", + "@microsoft/teams.common": "*", "@uiw/codemirror-themes-all": "^4.23.9", "codemirror": "^6.0.1", "date-fns": "^4.1.0", @@ -22904,10 +20912,10 @@ "mdast-util-gfm": "^3.1.0", "micromark-extension-gfm": "^3.0.0", "prettier": "^3.2.5", - "react": "^19.2.1", - "react-dom": "^19.2.1", + "react": "^19.2.2", + "react-dom": "^19.2.2", "react-markdown": "^10.0.0", - "react-router": "^7.5.2", + "react-router": "^7.12.0", "remark-breaks": "^4.0.0", "zustand": "^5.0.3" }, @@ -22929,75 +20937,6 @@ "vite": "^6.4.1" } }, - "packages/devtools/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "packages/devtools/node_modules/globals": { - "version": "15.15.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/devtools/node_modules/htmlparser2": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", - "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.1", - "entities": "^6.0.0" - } - }, - "packages/devtools/node_modules/react": { - "version": "19.2.1", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz", - "integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "packages/devtools/node_modules/react-dom": { - "version": "19.2.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz", - "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", - "license": "MIT", - "dependencies": { - "scheduler": "^0.27.0" - }, - "peerDependencies": { - "react": "^19.2.1" - } - }, - "packages/devtools/node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "license": "MIT" - }, "packages/devtools/node_modules/typescript": { "version": "5.7.3", "dev": true, @@ -23012,14 +20951,14 @@ }, "packages/graph": { "name": "@microsoft/teams.graph", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "dependencies": { - "@microsoft/teams.common": "2.0.5", - "qs": "^6.13.0" + "@microsoft/teams.common": "*", + "qs": "^6.14.2" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.0.2", "@types/qs": "^6.9.15", @@ -23037,10 +20976,10 @@ }, "packages/graph-endpoints": { "name": "@microsoft/teams.graph-endpoints", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "devDependencies": { - "@microsoft/teams.graph-tools": "2.0.5", + "@microsoft/teams.graph-tools": "*", "rimraf": "^6.0.1", "tsup": "^8.4.0", "typescript": "^5.4.5" @@ -23051,10 +20990,10 @@ }, "packages/graph-endpoints-beta": { "name": "@microsoft/teams.graph-endpoints-beta", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "devDependencies": { - "@microsoft/teams.graph-tools": "2.0.5", + "@microsoft/teams.graph-tools": "*", "rimraf": "^6.0.1", "tsup": "^8.4.0", "typescript": "^5.4.5" @@ -23065,7 +21004,7 @@ }, "packages/graph-tools": { "name": "@microsoft/teams.graph-tools", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "dependencies": { "camelcase": "^8.0.0", @@ -23080,7 +21019,7 @@ "teams-graph-tools": "dist/index.js" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.10.2", "jest": "^29.7.0", @@ -23095,8 +21034,6 @@ }, "packages/graph-tools/node_modules/camelcase": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", "license": "MIT", "engines": { "node": ">=16" @@ -23107,13 +21044,15 @@ }, "packages/openai": { "name": "@microsoft/teams.openai", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "dependencies": { - "@azure/openai": "^2.0.0" + "@azure/openai": "^2.0.0", + "@microsoft/teams.ai": "*", + "@microsoft/teams.common": "*" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.0.2", "jest": "^29.7.0", @@ -23126,316 +21065,8 @@ "node": ">=20" }, "peerDependencies": { - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.common": "2.0.5", "openai": "^4.55.0" } - }, - "tests/a2a": { - "name": "@tests/a2a", - "version": "0.0.5", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@a2a-js/sdk": "^0.3.4", - "@microsoft/teams.a2a": "2.0.4", - "@microsoft/teams.ai": "2.0.4", - "@microsoft/teams.apps": "2.0.4", - "@microsoft/teams.cards": "2.0.4", - "@microsoft/teams.dev": "2.0.4", - "@microsoft/teams.openai": "2.0.4" - }, - "devDependencies": { - "@types/node": "^22.5.4", - "dotenv": "^16.4.5", - "rimraf": "^6.0.1", - "tsx": "^4.20.6", - "typescript": "^5.4.5" - } - }, - "tests/ai": { - "name": "@tests/ai", - "version": "0.0.5", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@microsoft/teams.ai": "2.0.4", - "@microsoft/teams.apps": "2.0.4", - "@microsoft/teams.cards": "2.0.4", - "@microsoft/teams.dev": "2.0.4", - "@microsoft/teams.openai": "2.0.4", - "fuse.js": "^7.1.0" - }, - "devDependencies": { - "@types/node": "^22.5.4", - "dotenv": "^16.4.5", - "env-cmd": "*", - "rimraf": "^6.0.1", - "tsx": "^4.20.6", - "typescript": "^5.4.5" - } - }, - "tests/auth": { - "name": "@tests/auth", - "version": "0.0.1-preview.2", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@microsoft/teams.api": "2.0.0-preview.2", - "@microsoft/teams.apps": "2.0.0-preview.2", - "@microsoft/teams.cards": "2.0.0-preview.2", - "@microsoft/teams.common": "2.0.0-preview.2", - "@microsoft/teams.dev": "2.0.0-preview.2", - "@microsoft/teams.graph": "2.0.0-preview.2" - }, - "devDependencies": { - "@microsoft/teams.config": "2.0.0-preview.2", - "@types/node": "^22.5.4", - "dotenv": "^16.4.5", - "env-cmd": "latest", - "nodemon": "^3.1.4", - "rimraf": "^6.0.1", - "ts-node": "^10.9.2", - "typescript": "^5.4.5" - } - }, - "tests/botbuilder": { - "name": "@tests/botbuilder", - "version": "0.0.5", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@microsoft/teams.api": "2.0.4", - "@microsoft/teams.apps": "2.0.4", - "@microsoft/teams.botbuilder": "2.0.4", - "@microsoft/teams.cards": "2.0.4", - "@microsoft/teams.common": "2.0.4", - "@microsoft/teams.dev": "2.0.4", - "@microsoft/teams.graph": "2.0.4", - "botbuilder": "4.23.1" - }, - "devDependencies": { - "@microsoft/teams.config": "2.0.4", - "@types/node": "^22.0.2", - "dotenv": "^16.4.5", - "rimraf": "^6.0.1", - "tsup": "^8.4.0", - "tsx": "^4.20.6", - "typescript": "^5.4.5" - } - }, - "tests/cards": { - "name": "@tests/cards", - "version": "0.0.5", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@microsoft/teams.ai": "2.0.4", - "@microsoft/teams.apps": "2.0.4", - "@microsoft/teams.cards": "2.0.4", - "@microsoft/teams.dev": "2.0.4" - }, - "devDependencies": { - "@types/node": "^22.5.4", - "dotenv": "^16.4.5", - "env-cmd": "*", - "rimraf": "^6.0.1", - "tsx": "^4.20.6", - "typescript": "^5.4.5" - } - }, - "tests/dialogs": { - "name": "@tests/dialogs", - "version": "0.0.5", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@microsoft/teams.ai": "2.0.4", - "@microsoft/teams.apps": "2.0.4", - "@microsoft/teams.cards": "2.0.4", - "@microsoft/teams.dev": "2.0.4" - }, - "devDependencies": { - "@types/node": "^22.5.4", - "dotenv": "^16.5.0", - "env-cmd": "*", - "rimraf": "^6.0.1", - "tsx": "^4.20.6", - "typescript": "^5.4.5" - } - }, - "tests/echo": { - "name": "@tests/echo", - "version": "0.0.5", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@microsoft/teams.api": "2.0.4", - "@microsoft/teams.apps": "2.0.4", - "@microsoft/teams.cards": "2.0.4", - "@microsoft/teams.common": "2.0.4", - "@microsoft/teams.dev": "2.0.4", - "@microsoft/teams.graph": "2.0.4" - }, - "devDependencies": { - "@microsoft/teams.config": "2.0.4", - "@types/node": "^22.5.4", - "dotenv": "^16.4.5", - "env-cmd": "*", - "rimraf": "^6.0.1", - "tsx": "^4.20.6", - "typescript": "^5.4.5" - } - }, - "tests/graph": { - "name": "@tests/auth", - "version": "0.0.5", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@microsoft/teams.api": "2.0.4", - "@microsoft/teams.apps": "2.0.4", - "@microsoft/teams.cards": "2.0.4", - "@microsoft/teams.common": "2.0.4", - "@microsoft/teams.dev": "2.0.4", - "@microsoft/teams.graph": "2.0.4", - "@microsoft/teams.graph-endpoints": "2.0.4" - }, - "devDependencies": { - "@microsoft/teams.config": "2.0.4", - "@types/node": "^22.5.4", - "dotenv": "^16.4.5", - "env-cmd": "*", - "rimraf": "^6.0.1", - "tsx": "^4.20.6", - "typescript": "^5.4.5" - } - }, - "tests/lights": { - "name": "@tests/lights", - "version": "0.0.5", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@microsoft/teams.ai": "2.0.4", - "@microsoft/teams.api": "2.0.4", - "@microsoft/teams.apps": "2.0.4", - "@microsoft/teams.cards": "2.0.4", - "@microsoft/teams.common": "2.0.4", - "@microsoft/teams.dev": "2.0.4", - "@microsoft/teams.graph": "2.0.4", - "@microsoft/teams.openai": "2.0.4" - }, - "devDependencies": { - "@microsoft/teams.config": "2.0.4", - "@types/node": "^22.5.4", - "dotenv": "^16.4.5", - "rimraf": "^6.0.1", - "tsx": "^4.20.6", - "typescript": "^5.4.5" - } - }, - "tests/mcp": { - "name": "@tests/mcp", - "version": "0.0.5", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@microsoft/teams.api": "2.0.4", - "@microsoft/teams.apps": "2.0.4", - "@microsoft/teams.cards": "2.0.4", - "@microsoft/teams.common": "2.0.4", - "@microsoft/teams.dev": "2.0.4", - "@microsoft/teams.graph": "2.0.4", - "@microsoft/teams.mcp": "2.0.4", - "@microsoft/teams.openai": "2.0.4", - "@modelcontextprotocol/sdk": "^1.9.0", - "zod": "^3.24.3" - }, - "devDependencies": { - "@microsoft/teams.config": "2.0.4", - "@modelcontextprotocol/inspector": "^0.16.5", - "@types/node": "^22.5.4", - "cross-env": "^7.0.3", - "dotenv": "^16.4.5", - "env-cmd": "*", - "rimraf": "^6.0.1", - "tsx": "^4.20.6", - "typescript": "^5.4.5" - } - }, - "tests/mcpclient": { - "name": "@tests/mcpclient", - "version": "0.0.5", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@microsoft/teams.ai": "2.0.4", - "@microsoft/teams.apps": "2.0.4", - "@microsoft/teams.dev": "2.0.4", - "@microsoft/teams.mcpclient": "2.0.4", - "@microsoft/teams.openai": "2.0.4", - "@modelcontextprotocol/sdk": "^1.13.0" - }, - "devDependencies": { - "@types/node": "^22.5.4", - "dotenv": "^16.4.5", - "rimraf": "^6.0.1", - "tsx": "^4.20.6", - "typescript": "^5.4.5" - } - }, - "tests/message-extensions": { - "name": "@tests/message-extensions", - "version": "0.0.5", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@microsoft/teams.api": "2.0.4", - "@microsoft/teams.apps": "2.0.4", - "@microsoft/teams.cards": "2.0.4", - "@microsoft/teams.common": "2.0.4", - "@microsoft/teams.dev": "2.0.4", - "@microsoft/teams.graph": "2.0.4" - }, - "devDependencies": { - "@microsoft/teams.config": "2.0.4", - "@types/node": "^22.5.4", - "dotenv": "^16.4.5", - "env-cmd": "*", - "rimraf": "^6.0.1", - "tsx": "^4.20.6", - "typescript": "^5.4.5" - } - }, - "tests/tab": { - "name": "@tests/tab", - "version": "0.0.5", - "extraneous": true, - "license": "MIT", - "dependencies": { - "@microsoft/teams.api": "2.0.4", - "@microsoft/teams.apps": "2.0.4", - "@microsoft/teams.cards": "2.0.4", - "@microsoft/teams.client": "2.0.4", - "@microsoft/teams.common": "2.0.4", - "@microsoft/teams.dev": "2.0.4", - "@microsoft/teams.graph": "2.0.4", - "@microsoft/teams.graph-endpoints": "2.0.4", - "react": "^19.0.0", - "react-dom": "^19.0.0" - }, - "devDependencies": { - "@microsoft/teams.config": "2.0.4", - "@types/node": "^22.5.4", - "@vitejs/plugin-react": "^4.3.4", - "dotenv": "^16.4.5", - "nodemon": "^3.1.4", - "rimraf": "^6.0.1", - "tsup": "^8.4.0", - "typescript": "^5.4.5", - "vite": "^6.4.1" - } } } } diff --git a/package.json b/package.json index fde635403..8183f3ab8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.ts", - "version": "2.0.5", + "version": "0.0.0", "private": true, "homepage": "https://github.com/microsoft/teams.ts", "bugs": "https://github.com/microsoft/teams.ts/issues", @@ -28,9 +28,12 @@ "bots" ], "scripts": { + "version:stamp": "node scripts/version.js", + "version:get": "nbgv get-version -v NpmPackageVersion", "clean": "npx turbo clean", "build": "npx turbo build", "build:packages": "npx turbo build --filter=./packages/*", + "build:essential": "npx turbo build --filter='./packages/*' --filter='!./packages/graph' --filter='!./packages/graph-endpoints' --filter='!./packages/graph-endpoints-beta' --filter='!./packages/graph-tools' --filter='!./external/*'", "build:examples": "npx turbo build --filter=./examples/*", "build:external": "npx turbo build --filter=./external/*", "dev": "npx turbo dev", @@ -39,9 +42,18 @@ "test": "npx turbo test --concurrency=100%" }, "devDependencies": { - "@changesets/cli": "latest", "@turbo/gen": "^2.5.7", + "nerdbank-gitversioning": "^3.9.50", "turbo": "^2.4.0", "typescript": "^5.4.5" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "4.40.1" + }, + "overrides": { + "restify": { + "send": "^1.2.0", + "find-my-way": "^9.0.0" + } } } diff --git a/packages/ai/eslint.config.js b/packages/ai/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/packages/ai/eslint.config.js +++ b/packages/ai/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/packages/ai/package.json b/packages/ai/package.json index 4b3026407..3d69f82b6 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.ai", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -33,11 +33,11 @@ "build": "npx tsup", "test": "npx jest" }, - "peerDependencies": { - "@microsoft/teams.common": "2.0.5" + "dependencies": { + "@microsoft/teams.common": "*" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.0.2", "jest": "^29.7.0", diff --git a/packages/api/eslint.config.js b/packages/api/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/packages/api/eslint.config.js +++ b/packages/api/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/packages/api/package.json b/packages/api/package.json index 3402c8262..25c976161 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.api", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -35,15 +35,13 @@ "test": "npx jest" }, "dependencies": { + "@microsoft/teams.cards": "*", + "@microsoft/teams.common": "*", "jwt-decode": "^4.0.0", - "qs": "^6.13.0" - }, - "peerDependencies": { - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5" + "qs": "^6.14.2" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/jsonwebtoken": "^9.0.7", "@types/qs": "^6.9.15", diff --git a/packages/api/src/activities/activity.ts b/packages/api/src/activities/activity.ts index 37922bd4a..6aa799ff6 100644 --- a/packages/api/src/activities/activity.ts +++ b/packages/api/src/activities/activity.ts @@ -282,8 +282,18 @@ export class Activity implements IActivity { return this; } - withRecipient(value: Account) { - this.recipient = value; + /** + * Set the recipient of this activity, optionally marking it as a targeted message. + * Targeted messages are ephemeral to the specified recipient in a shared conversation. + * @param value - The recipient account + * @param isTargeted - If true, marks this as a targeted message visible only to the recipient (default: false) + * @returns this instance for chaining + * + * @experimental This API is in preview and may change in the future. + * Diagnostic: ExperimentalTeamsTargeted + */ + withRecipient(value: Account, isTargeted: boolean = false) { + this.recipient = { ...value, isTargeted: isTargeted ? true : undefined }; return this; } diff --git a/packages/api/src/activities/event/meeting-end.ts b/packages/api/src/activities/event/meeting-end.ts index 0f3868b60..773e482ad 100644 --- a/packages/api/src/activities/event/meeting-end.ts +++ b/packages/api/src/activities/event/meeting-end.ts @@ -11,28 +11,28 @@ export interface IMeetingEndEventActivity extends IActivity<'event'> { */ value: { /** - * @member {string} [id] The meeting's Id, encoded as a BASE64 string. + * @member {string} [Id] The meeting's Id, encoded as a BASE64 string. */ - id: string; + Id: string; /** - * @member {string} [meetingType] The meeting's type. + * @member {string} [MeetingType] The meeting's type. */ - meetingType: string; + MeetingType: string; /** - * @member {string} [joinUrl] The URL used to join the meeting. + * @member {string} [JoinUrl] The URL used to join the meeting. */ - joinUrl: string; + JoinUrl: string; /** - * @member {string} [title] The title of the meeting. + * @member {string} [Title] The title of the meeting. */ - title: string; + Title: string; /** - * @member {Date} [startTime] Timestamp for meeting end, in UTC. + * @member {Date} [EndTime] Timestamp for meeting end, in UTC. */ - endTime: Date; + EndTime: Date; }; } diff --git a/packages/api/src/activities/event/meeting-participant-leave.ts b/packages/api/src/activities/event/meeting-participant-leave.ts index c04c7d4ee..28908d3d3 100644 --- a/packages/api/src/activities/event/meeting-participant-leave.ts +++ b/packages/api/src/activities/event/meeting-participant-leave.ts @@ -30,9 +30,9 @@ export interface IMeetingParticipantLeaveEventActivity extends IActivity<'event' inMeeting: boolean; /** - * The user's role. + * Optional. The user's role. */ - role: string; + role?: string; }; }[]; }; diff --git a/packages/api/src/activities/event/meeting-start.ts b/packages/api/src/activities/event/meeting-start.ts index 476621205..796d2f6ba 100644 --- a/packages/api/src/activities/event/meeting-start.ts +++ b/packages/api/src/activities/event/meeting-start.ts @@ -11,28 +11,28 @@ export interface IMeetingStartEventActivity extends IActivity<'event'> { */ value: { /** - * @member {string} [id] The meeting's Id, encoded as a BASE64 string. + * @member {string} [Id] The meeting's Id, encoded as a BASE64 string. */ - id: string; + Id: string; /** - * @member {string} [meetingType] The meeting's type. + * @member {string} [MeetingType] The meeting's type. */ - meetingType: string; + MeetingType: string; /** - * @member {string} [joinUrl] The URL used to join the meeting. + * @member {string} [JoinUrl] The URL used to join the meeting. */ - joinUrl: string; + JoinUrl: string; /** - * @member {string} [title] The title of the meeting. + * @member {string} [Title] The title of the meeting. */ - title: string; + Title: string; /** - * @member {Date} [startTime] Timestamp for meeting start, in UTC. + * @member {Date} [StartTime] Timestamp for meeting start, in UTC. */ - startTime: Date; + StartTime: Date; }; } diff --git a/packages/api/src/activities/message/message-reaction.spec.ts b/packages/api/src/activities/message/message-reaction.spec.ts index f928d99ce..ce300fb77 100644 --- a/packages/api/src/activities/message/message-reaction.spec.ts +++ b/packages/api/src/activities/message/message-reaction.spec.ts @@ -1,6 +1,6 @@ import { Account } from '../../models'; -import { MessageReactionActivity } from './message-reaction'; +import { IMessageReactionActivity, MessageReactionActivity } from './message-reaction'; describe('MessageReactionActivity', () => { const a: Account = { @@ -16,24 +16,25 @@ describe('MessageReactionActivity', () => { }; it('should build', () => { - const activity = new MessageReactionActivity() - .addReaction({ - type: 'angry', - user: a, - }) - .addReaction({ - type: 'heart', - user: b, - }) - .removeReaction({ - type: 'heart', - user: b, - }); + const activity = new MessageReactionActivity({ + reactionsAdded: [ + { + type: 'like', + user: a, + }, + ], + reactionsRemoved: [ + { + type: 'heart', + user: b, + }, + ], + }); expect(activity.type).toEqual('messageReaction'); expect(activity.reactionsAdded).toStrictEqual([ { - type: 'angry', + type: 'like', user: a, }, ]); @@ -47,27 +48,26 @@ describe('MessageReactionActivity', () => { }); it('should build from interface', () => { - const activity = MessageReactionActivity.from( - new MessageReactionActivity() - .addReaction({ - type: 'angry', + const activity = MessageReactionActivity.from({ + type: 'messageReaction', + reactionsAdded: [ + { + type: 'like', user: a, - }) - .addReaction({ - type: 'heart', - user: b, - }) - .removeReaction({ + }, + ], + reactionsRemoved: [ + { type: 'heart', user: b, - }) - .toInterface() - ); + }, + ], + } as unknown as IMessageReactionActivity); expect(activity.type).toEqual('messageReaction'); expect(activity.reactionsAdded).toStrictEqual([ { - type: 'angry', + type: 'like', user: a, }, ]); @@ -81,27 +81,25 @@ describe('MessageReactionActivity', () => { }); it('should clone', () => { - const activity = MessageReactionActivity.from( - new MessageReactionActivity() - .addReaction({ - type: 'angry', + const activity = new MessageReactionActivity({ + reactionsAdded: [ + { + type: 'like', user: a, - }) - .addReaction({ - type: 'heart', - user: b, - }) - .removeReaction({ + }, + ], + reactionsRemoved: [ + { type: 'heart', user: b, - }) - .toInterface() - ).clone(); + }, + ], + }).clone(); expect(activity.type).toEqual('messageReaction'); expect(activity.reactionsAdded).toStrictEqual([ { - type: 'angry', + type: 'like', user: a, }, ]); diff --git a/packages/api/src/activities/message/message-reaction.ts b/packages/api/src/activities/message/message-reaction.ts index d52a1a288..62791807c 100644 --- a/packages/api/src/activities/message/message-reaction.ts +++ b/packages/api/src/activities/message/message-reaction.ts @@ -62,6 +62,7 @@ export class MessageReactionActivity /** * Add a message reaction. + * @deprecated Use the api.reactions.add instead. */ addReaction(reaction: MessageReaction) { if (!this.reactionsAdded) { @@ -74,6 +75,7 @@ export class MessageReactionActivity /** * Remove a message reaction. + * @deprecated Use the api.reactions.remove instead. */ removeReaction(reaction: MessageReaction) { if (!this.reactionsRemoved) { diff --git a/packages/api/src/activities/message/message.spec.ts b/packages/api/src/activities/message/message.spec.ts index 471c3ad1c..40e111f8d 100644 --- a/packages/api/src/activities/message/message.spec.ts +++ b/packages/api/src/activities/message/message.spec.ts @@ -276,4 +276,84 @@ describe('MessageActivity', () => { expect(mention).toBeUndefined(); }); }); + + describe('withRecipient', () => { + it('should default to not targeted', () => { + const activity = new MessageActivity('hello').withRecipient({ id: '1', name: '', role: 'user' }); + + expect(activity.recipient.isTargeted).toBeUndefined(); + expect(activity.recipient).toBeDefined(); + }); + + it('should set isTargeted when second parameter is true', () => { + const activity = new MessageActivity('hello').withRecipient({ id: '1', name: '', role: 'user' }, true); + + expect(activity.recipient.isTargeted).toBe(true); + expect(activity.recipient).toBeDefined(); + }); + + it('should set isTargeted and recipient with full account', () => { + const activity = new MessageActivity('hello').withRecipient( + { id: 'user-123', name: 'user', role: 'user' }, + true + ); + + expect(activity.recipient.isTargeted).toBe(true); + expect(activity.recipient).toBeDefined(); + expect(activity.recipient.id).toBe('user-123'); + expect(activity.recipient.name).toBe('user'); + expect(activity.recipient.role).toBe('user'); + }); + + it('should maintain fluent chaining', () => { + const activity = new MessageActivity('hello') + .withImportance('high') + .withRecipient({ id: 'user-123', name: '', role: 'user' }) + .addText(' world'); + + expect(activity.text).toBe('hello world'); + expect(activity.importance).toBe('high'); + expect(activity.recipient).toBeDefined(); + expect(activity.recipient.id).toBe('user-123'); + expect(activity.recipient.isTargeted).toBeUndefined(); + }); + + it('should be chainable with targeted flag', () => { + const activity = new MessageActivity('hello') + .withImportance('high') + .withRecipient({ id: 'user-456', name: '', role: 'user' }, true) + .withDeliveryMode('notification'); + + expect(activity.text).toBe('hello'); + expect(activity.importance).toBe('high'); + expect(activity.deliveryMode).toBe('notification'); + expect(activity.recipient.isTargeted).toBe(true); + expect(activity.recipient.id).toBe('user-456'); + }); + + it('should preserve isTargeted and recipient when using from()', () => { + const original = new MessageActivity('test') + .withRecipient({ id: 'user-789', name: '', role: 'user' }, true) + .toInterface(); + + const restored = MessageActivity.from(original); + + expect(restored.recipient.isTargeted).toBe(true); + expect(restored.recipient.id).toBe('user-789'); + }); + + it('should validate fluent API', () => { + const msg = new MessageActivity('Hello') + .withDeliveryMode('notification') + .withRecipient({ id: 'user-123', name: 'Test User', role: 'user' }, true) + .withImportance('high'); + + expect(msg.text).toBe('Hello'); + expect(msg.recipient.isTargeted).toBe(true); + expect(msg.recipient).toBeDefined(); + expect(msg.recipient.id).toBe('user-123'); + expect(msg.recipient.name).toBe('Test User'); + expect(msg.recipient.role).toBe('user'); + }); + }); }); diff --git a/packages/api/src/activities/message/message.ts b/packages/api/src/activities/message/message.ts index f1e163b04..3e38beb55 100644 --- a/packages/api/src/activities/message/message.ts +++ b/packages/api/src/activities/message/message.ts @@ -379,6 +379,21 @@ export class MessageActivity extends Activity<'message'> implements IMessageActi streamType: 'final', }); } + + /** + * Set the recipient of this message, optionally marking it as a targeted (ephemeral) message. + * Targeted messages are only visible to the specified recipient in a shared conversation. + * @param account - The recipient account + * @param isTargeted - If true, marks this as a targeted message visible only to the recipient + * @returns this instance for chaining + * + * @experimental This API is in preview and may change in the future. + * Diagnostic: ExperimentalTeamsTargeted + */ + withRecipient(account: Account, isTargeted: boolean = false): this { + super.withRecipient(account, isTargeted); + return this; + } } /** diff --git a/packages/api/src/clients/conversation/activity.spec.ts b/packages/api/src/clients/conversation/activity.spec.ts index c6c259228..669a83b2c 100644 --- a/packages/api/src/clients/conversation/activity.spec.ts +++ b/packages/api/src/clients/conversation/activity.spec.ts @@ -93,4 +93,53 @@ describe('ConversationActivityClient', () => { await client.getMembers('1', '2'); expect(spy).toHaveBeenCalledWith('/v3/conversations/1/activities/2/members'); }); + + describe('targeted activities', () => { + it('should create targeted activity', async () => { + const client = new ConversationActivityClient(''); + const spy = jest.spyOn(client.http, 'post').mockResolvedValueOnce({}); + + await client.createTargeted('1', { + type: 'message', + text: 'hi', + }); + + expect(spy).toHaveBeenCalledWith( + '/v3/conversations/1/activities?isTargetedActivity=true', + { + type: 'message', + text: 'hi', + } + ); + }); + + it('should update targeted activity', async () => { + const client = new ConversationActivityClient(''); + const spy = jest.spyOn(client.http, 'put').mockResolvedValueOnce({}); + + await client.updateTargeted('1', '2', { + type: 'message', + text: 'hi updated', + }); + + expect(spy).toHaveBeenCalledWith( + '/v3/conversations/1/activities/2?isTargetedActivity=true', + { + type: 'message', + text: 'hi updated', + } + ); + }); + + it('should delete targeted activity', async () => { + const client = new ConversationActivityClient(''); + const spy = jest.spyOn(client.http, 'delete').mockResolvedValueOnce({}); + + await client.deleteTargeted('1', '2'); + + expect(spy).toHaveBeenCalledWith( + '/v3/conversations/1/activities/2?isTargetedActivity=true' + ); + }); + }); }); diff --git a/packages/api/src/clients/conversation/activity.ts b/packages/api/src/clients/conversation/activity.ts index ae3140093..9a3302d95 100644 --- a/packages/api/src/clients/conversation/activity.ts +++ b/packages/api/src/clients/conversation/activity.ts @@ -70,4 +70,27 @@ export class ConversationActivityClient { ); return res.data; } + + async createTargeted(conversationId: string, params: ActivityParams) { + const res = await this.http.post( + `${this.serviceUrl}/v3/conversations/${conversationId}/activities?isTargetedActivity=true`, + params + ); + return res.data; + } + + async updateTargeted(conversationId: string, id: string, params: ActivityParams) { + const res = await this.http.put( + `${this.serviceUrl}/v3/conversations/${conversationId}/activities/${id}?isTargetedActivity=true`, + params + ); + return res.data; + } + + async deleteTargeted(conversationId: string, id: string) { + const res = await this.http.delete( + `${this.serviceUrl}/v3/conversations/${conversationId}/activities/${id}?isTargetedActivity=true` + ); + return res.data; + } } diff --git a/packages/api/src/clients/conversation/index.ts b/packages/api/src/clients/conversation/index.ts index 9742283d0..82e2b4e71 100644 --- a/packages/api/src/clients/conversation/index.ts +++ b/packages/api/src/clients/conversation/index.ts @@ -74,6 +74,10 @@ export class ConversationClient { this._activities.reply(conversationId, id, params), delete: (id: string) => this._activities.delete(conversationId, id), members: (activityId: string) => this._activities.getMembers(conversationId, activityId), + createTargeted: (params: ActivityParams) => this._activities.createTargeted(conversationId, params), + updateTargeted: (id: string, params: ActivityParams) => + this._activities.updateTargeted(conversationId, id, params), + deleteTargeted: (id: string) => this._activities.deleteTargeted(conversationId, id), }; } diff --git a/packages/api/src/clients/index.ts b/packages/api/src/clients/index.ts index 8a9c10b9f..ea1fe82cc 100644 --- a/packages/api/src/clients/index.ts +++ b/packages/api/src/clients/index.ts @@ -4,6 +4,7 @@ import { ApiClientSettings, mergeApiClientSettings } from './api-client-settings import { BotClient } from './bot'; import { ConversationClient } from './conversation'; import { MeetingClient } from './meeting'; +import { ReactionClient } from './reaction'; import { TeamClient } from './team'; import { UserClient } from './user'; @@ -14,6 +15,11 @@ export class Client { readonly conversations: ConversationClient; readonly teams: TeamClient; readonly meetings: MeetingClient; + /** + * @experimental This API is in preview and may change in the future. + * Diagnostic: ExperimentalTeamsReactions + */ + readonly reactions: ReactionClient; get http() { return this._http; @@ -24,6 +30,7 @@ export class Client { this.users.http = v; this.teams.http = v; this.meetings.http = v; + this.reactions.http = v; this._http = v; } protected _http: http.Client; @@ -53,6 +60,7 @@ export class Client { this.conversations = new ConversationClient(serviceUrl, this.http, this._apiClientSettings); this.teams = new TeamClient(serviceUrl, this.http, this._apiClientSettings); this.meetings = new MeetingClient(serviceUrl, this.http, this._apiClientSettings); + this.reactions = new ReactionClient(serviceUrl, this.http, this._apiClientSettings); } } @@ -60,5 +68,6 @@ export * from './user'; export * from './bot'; export * from './conversation'; export * from './meeting'; +export * from './reaction'; export * from './team'; export * from './api-client-settings'; diff --git a/packages/api/src/clients/meeting.spec.ts b/packages/api/src/clients/meeting.spec.ts index 87f9a1568..0d10e311a 100644 --- a/packages/api/src/clients/meeting.spec.ts +++ b/packages/api/src/clients/meeting.spec.ts @@ -18,6 +18,17 @@ describe('MeetingClient', () => { expect(spy).toHaveBeenCalledWith('/v1/meetings/1'); }); + it('should use replaced http client for subsequent calls', async () => { + const client = new MeetingClient(''); + const oldSpy = jest.spyOn(client.http, 'get').mockResolvedValueOnce({}); + const http = new Client(); + const newSpy = jest.spyOn(http, 'get').mockResolvedValueOnce({}); + client.http = http; + await client.getById('123'); + expect(newSpy).toHaveBeenCalledWith('/v1/meetings/123'); + expect(oldSpy).not.toHaveBeenCalled(); + }); + it('should get by id', async () => { const client = new MeetingClient(''); const spy = jest.spyOn(client.http, 'get').mockResolvedValueOnce({}); @@ -28,7 +39,23 @@ describe('MeetingClient', () => { it('should get participant', async () => { const client = new MeetingClient(''); const spy = jest.spyOn(client.http, 'get').mockResolvedValueOnce({}); - await client.getParticipant('1', '2'); - expect(spy).toHaveBeenCalledWith('/v1/meetings/1/participants/2'); + await client.getParticipant('1', '2', '3'); + expect(spy).toHaveBeenCalledWith('/v1/meetings/1/participants/2?tenantId=3'); + }); + + it('should URL-encode meeting id in getById', async () => { + const client = new MeetingClient(''); + const spy = jest.spyOn(client.http, 'get').mockResolvedValueOnce({}); + await client.getById('abc+def/ghi='); + expect(spy).toHaveBeenCalledWith('/v1/meetings/abc%2Bdef%2Fghi%3D'); + }); + + it('should URL-encode participant parameters', async () => { + const client = new MeetingClient(''); + const spy = jest.spyOn(client.http, 'get').mockResolvedValueOnce({}); + await client.getParticipant('abc+def/ghi=', 'user=1', 'tenant/1'); + expect(spy).toHaveBeenCalledWith( + '/v1/meetings/abc%2Bdef%2Fghi%3D/participants/user%3D1?tenantId=tenant%2F1' + ); }); }); diff --git a/packages/api/src/clients/meeting.ts b/packages/api/src/clients/meeting.ts index 2a0f4b6b9..f08d6c91f 100644 --- a/packages/api/src/clients/meeting.ts +++ b/packages/api/src/clients/meeting.ts @@ -30,14 +30,25 @@ export class MeetingClient { this._apiClientSettings = mergeApiClientSettings(apiClientSettings); } + /** + * Retrieves meeting information including details, organizer, and conversation. + * @param id - The meeting ID. + */ async getById(id: string) { - const res = await this.http.get(`${this.serviceUrl}/v1/meetings/${id}`); + const res = await this.http.get(`${this.serviceUrl}/v1/meetings/${encodeURIComponent(id)}`); return res.data; } - async getParticipant(meetingId: string, id: string) { + /** + * Retrieves information about a specific participant in a meeting. + * @param meetingId - The meeting ID. + * @param id - The user AAD object ID + * @param tenantId - The tenant ID of the meeting and user. + * @returns {MeetingParticipant} The meeting participant information. + */ + async getParticipant(meetingId: string, id: string, tenantId: string) { const res = await this.http.get( - `${this.serviceUrl}/v1/meetings/${meetingId}/participants/${id}` + `${this.serviceUrl}/v1/meetings/${encodeURIComponent(meetingId)}/participants/${encodeURIComponent(id)}?tenantId=${encodeURIComponent(tenantId)}` ); return res.data; } diff --git a/packages/api/src/clients/reaction/index.ts b/packages/api/src/clients/reaction/index.ts new file mode 100644 index 000000000..cf690e181 --- /dev/null +++ b/packages/api/src/clients/reaction/index.ts @@ -0,0 +1 @@ +export * from './reaction'; diff --git a/packages/api/src/clients/reaction/reaction.spec.ts b/packages/api/src/clients/reaction/reaction.spec.ts new file mode 100644 index 000000000..57fb8a1c7 --- /dev/null +++ b/packages/api/src/clients/reaction/reaction.spec.ts @@ -0,0 +1,73 @@ +import { Client } from '@microsoft/teams.common/http'; + +import { ReactionClient } from './reaction'; + +describe('ReactionClient', () => { + it('should use existing client', async () => { + const http = new Client(); + const client = new ReactionClient('', http); + const spy = jest.spyOn(http, 'put').mockResolvedValueOnce({}); + await client.add('conv1', 'act1', 'like'); + expect(spy).toHaveBeenCalledWith('/v3/conversations/conv1/activities/act1/reactions/like'); + }); + + it('should use client options', async () => { + const client = new ReactionClient('', {}); + const spy = jest.spyOn(client.http, 'put').mockResolvedValueOnce({}); + await client.add('conv1', 'act1', 'like'); + expect(spy).toHaveBeenCalledWith('/v3/conversations/conv1/activities/act1/reactions/like'); + }); + + it('should use replaced http client for subsequent calls', async () => { + const client = new ReactionClient(''); + const oldSpy = jest.spyOn(client.http, 'put').mockResolvedValueOnce({}); + const http = new Client(); + const newSpy = jest.spyOn(http, 'put').mockResolvedValueOnce({}); + client.http = http; + await client.add('conv1', 'act1', 'like'); + expect(newSpy).toHaveBeenCalledWith('/v3/conversations/conv1/activities/act1/reactions/like'); + expect(oldSpy).not.toHaveBeenCalled(); + }); + + it('should add reaction', async () => { + const client = new ReactionClient(''); + const spy = jest.spyOn(client.http, 'put').mockResolvedValueOnce({}); + await client.add('conv1', 'act1', 'like'); + expect(spy).toHaveBeenCalledWith('/v3/conversations/conv1/activities/act1/reactions/like'); + }); + + it('should remove reaction', async () => { + const client = new ReactionClient(''); + const spy = jest.spyOn(client.http, 'delete').mockResolvedValueOnce({}); + await client.remove('conv1', 'act1', 'like'); + expect(spy).toHaveBeenCalledWith('/v3/conversations/conv1/activities/act1/reactions/like'); + }); + + it('should URL-encode conversation id in add', async () => { + const client = new ReactionClient(''); + const spy = jest.spyOn(client.http, 'put').mockResolvedValueOnce({}); + await client.add('conv+1/test=', 'act1', 'like'); + expect(spy).toHaveBeenCalledWith('/v3/conversations/conv%2B1%2Ftest%3D/activities/act1/reactions/like'); + }); + + it('should URL-encode activity id in add', async () => { + const client = new ReactionClient(''); + const spy = jest.spyOn(client.http, 'put').mockResolvedValueOnce({}); + await client.add('conv1', 'act+1/test=', 'like'); + expect(spy).toHaveBeenCalledWith('/v3/conversations/conv1/activities/act%2B1%2Ftest%3D/reactions/like'); + }); + + it('should URL-encode reaction type in add', async () => { + const client = new ReactionClient(''); + const spy = jest.spyOn(client.http, 'put').mockResolvedValueOnce({}); + await client.add('conv1', 'act1', 'like'); + expect(spy).toHaveBeenCalledWith('/v3/conversations/conv1/activities/act1/reactions/like'); + }); + + it('should URL-encode parameters in remove', async () => { + const client = new ReactionClient(''); + const spy = jest.spyOn(client.http, 'delete').mockResolvedValueOnce({}); + await client.remove('conv+1/test=', 'act+1/test=', 'heart'); + expect(spy).toHaveBeenCalledWith('/v3/conversations/conv%2B1%2Ftest%3D/activities/act%2B1%2Ftest%3D/reactions/heart'); + }); +}); diff --git a/packages/api/src/clients/reaction/reaction.ts b/packages/api/src/clients/reaction/reaction.ts new file mode 100644 index 000000000..f8cca2eb1 --- /dev/null +++ b/packages/api/src/clients/reaction/reaction.ts @@ -0,0 +1,64 @@ +import { Client, ClientOptions } from '@microsoft/teams.common/http'; + +import { MessageReactionType } from '../../models/message/message-reaction'; + +import { ApiClientSettings, mergeApiClientSettings } from '../api-client-settings'; + +/** + * Client for adding and removing emoji reactions on messages in a conversation. + * + * @experimental This API is in preview and may change in the future. + * Diagnostic: ExperimentalTeamsReactions + */ +export class ReactionClient { + readonly serviceUrl: string; + + get http() { + return this._http; + } + set http(v) { + this._http = v; + } + protected _http: Client; + protected _apiClientSettings: Partial; + + constructor(serviceUrl: string, options?: Client | ClientOptions, apiClientSettings?: Partial) { + this.serviceUrl = serviceUrl; + + if (!options) { + this._http = new Client(); + } else if ('request' in options) { + this._http = options; + } else { + this._http = new Client(options); + } + + this._apiClientSettings = mergeApiClientSettings(apiClientSettings); + } + + /** + * Add a reaction to a message. + * + * @experimental This API is in preview and may change in the future. + * Diagnostic: ExperimentalTeamsReactions + */ + async add(conversationId: string, activityId: string, reactionType: MessageReactionType) { + const res = await this.http.put( + `${this.serviceUrl}/v3/conversations/${encodeURIComponent(conversationId)}/activities/${encodeURIComponent(activityId)}/reactions/${encodeURIComponent(reactionType)}` + ); + return res.data; + } + + /** + * Remove a reaction from a message. + * + * @experimental This API is in preview and may change in the future. + * Diagnostic: ExperimentalTeamsReactions + */ + async remove(conversationId: string, activityId: string, reactionType: MessageReactionType) { + const res = await this.http.delete( + `${this.serviceUrl}/v3/conversations/${encodeURIComponent(conversationId)}/activities/${encodeURIComponent(activityId)}/reactions/${encodeURIComponent(reactionType)}` + ); + return res.data; + } +} diff --git a/packages/api/src/models/account.ts b/packages/api/src/models/account.ts index d7aeea1be..8a17b47a7 100644 --- a/packages/api/src/models/account.ts +++ b/packages/api/src/models/account.ts @@ -8,6 +8,14 @@ export type Account

= { readonly name: string; readonly properties?: P; readonly membershipSources?: MembershipSource[]; + + /** + * Indicates if this account is the target of a targeted message. + * + * @experimental This API is in preview and may change in the future. + * Diagnostic: ExperimentalTeamsTargeted + */ + isTargeted?: boolean; }; /** @@ -27,9 +35,9 @@ export type TeamsChannelAccount

= { readonly name: string; /** - * @member {string} [objectId] The user's Object ID in Azure Active Directory (AAD). + * @member {string} [aadObjectId] The user's Object ID in Azure Active Directory (AAD). */ - readonly objectId?: string; + readonly aadObjectId?: string; /** * @member {Role} [userRole] Role of the user (e.g., 'user' or 'bot'). diff --git a/packages/api/src/models/index.ts b/packages/api/src/models/index.ts index 0face1018..83dbdface 100644 --- a/packages/api/src/models/index.ts +++ b/packages/api/src/models/index.ts @@ -35,3 +35,4 @@ export * from './team-details'; export * from './meeting'; export * from './channel-id'; export * from './activity-like'; + diff --git a/packages/api/src/models/meeting/meeting-participant.ts b/packages/api/src/models/meeting/meeting-participant.ts index 89a8f269b..4752de035 100644 --- a/packages/api/src/models/meeting/meeting-participant.ts +++ b/packages/api/src/models/meeting/meeting-participant.ts @@ -6,6 +6,10 @@ import { Meeting } from './meeting'; * * An interface representing TeamsMeetingParticipant. * Teams meeting participant detailing user Azure Active Directory details. + * Meeting participant details pertain to the user's info within the context + * of a Teams meeting, such as their role and presence status in the meeting. + * This is separate from their general user information, which is represented + * by the TeamsChannelAccount. */ export type MeetingParticipant = { /** @@ -14,7 +18,7 @@ export type MeetingParticipant = { user?: TeamsChannelAccount; /** - * @member {Meeting} [meeting] The meeting details. + * @member {Meeting} [meeting] The meeting details pertaining to the user. */ meeting?: Meeting; diff --git a/packages/api/src/models/meeting/meeting.ts b/packages/api/src/models/meeting/meeting.ts index b743eb8b0..6741c41d5 100644 --- a/packages/api/src/models/meeting/meeting.ts +++ b/packages/api/src/models/meeting/meeting.ts @@ -1,7 +1,6 @@ /** - * - * An interface representing a Meeting. - * Meeting details. + * A participant's meeting-specific details, including their + * role and current presence status within the meeting. */ export type Meeting = { /** diff --git a/packages/api/src/models/message/message-reaction.ts b/packages/api/src/models/message/message-reaction.ts index f075da441..3c50cff63 100644 --- a/packages/api/src/models/message/message-reaction.ts +++ b/packages/api/src/models/message/message-reaction.ts @@ -1,38 +1,28 @@ import { MessageUser } from './message-user'; /** - * Defines values for ReactionType. - * Possible values include: 'like', 'heart', 'laugh', 'surprised', 'sad', 'angry' + * The type of emoji reaction that can be applied to a message. + * Possible values include: 'like', 'heart', '1f440_eyes', '2705_whiteheavycheckmark', 'launch', '1f4cc_pushpin' * - * @readonly - * @enum {string} + * @experimental This API is in preview and may change in the future. + * Diagnostic: ExperimentalTeamsReactions */ -export type MessageReactionType = - | 'like' - | 'heart' - | 'laugh' - | 'surprised' - | 'sad' - | 'angry' - | 'plusOne'; +export type MessageReactionType = 'like' | 'heart' | '1f440_eyes' | '2705_whiteheavycheckmark' | 'launch' | '1f4cc_pushpin' | (string & {}); + +/** + * Represents a reaction on a message, including the reaction type, timestamp, and user. + * + * @experimental This API is in preview and may change in the future. + * Diagnostic: ExperimentalTeamsReactions + */ export type MessageReaction = { - /** - * @member {ReactionType} [reactionType] The type of reaction given to the - * message. Possible values include: 'like', 'heart', 'laugh', 'surprised', - * 'sad', 'angry', 'plusOne' - */ + /** The emoji reaction type applied to the message. */ type: MessageReactionType; - /** - * @member {string} [createdDateTime] Timestamp of when the user reacted to - * the message. - */ + /** Timestamp of when the user reacted to the message. */ createdDateTime?: string; - /** - * @member {MessageActionsPayloadFrom} [user] The user with which the - * reaction is associated. - */ + /** The user who applied the reaction. */ user?: MessageUser; }; diff --git a/packages/apps/eslint.config.js b/packages/apps/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/packages/apps/eslint.config.js +++ b/packages/apps/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/packages/apps/package.json b/packages/apps/package.json index ccedab7fa..334ce4b9b 100644 --- a/packages/apps/package.json +++ b/packages/apps/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.apps", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -39,20 +39,18 @@ }, "dependencies": { "@azure/msal-node": "^3.8.1", + "@microsoft/teams.api": "*", + "@microsoft/teams.common": "*", + "@microsoft/teams.graph": "*", "axios": "^1.12.0", "cors": "^2.8.5", - "express": "^4.21.0", + "express": "^5.0.0", "jsonwebtoken": "^9.0.2", "jwks-rsa": "^3.2.0", "reflect-metadata": "^0.2.2" }, - "peerDependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.graph": "2.0.5" - }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/cors": "^2.8.17", "@types/express": "^5.0.0", "@types/jest": "^29.5.12", diff --git a/packages/apps/src/activity-sender.spec.ts b/packages/apps/src/activity-sender.spec.ts new file mode 100644 index 000000000..80ee9d447 --- /dev/null +++ b/packages/apps/src/activity-sender.spec.ts @@ -0,0 +1,135 @@ +import { ActivityParams, ConversationReference } from '@microsoft/teams.api'; +import * as $http from '@microsoft/teams.common/http'; + +import { ActivitySender } from './activity-sender'; + +describe('ActivitySender', () => { + let sender: ActivitySender; + let mockHttpClient: $http.Client; + let ref: ConversationReference; + + beforeEach(() => { + mockHttpClient = { + post: jest.fn().mockResolvedValue({ data: { id: 'activity-1' } }), + put: jest.fn().mockResolvedValue({ data: { id: 'activity-1' } }), + request: jest.fn(), + } as any; + + ref = { + channelId: 'msteams', + serviceUrl: 'https://smba.trafficmanager.net/teams', + bot: { id: 'bot-id', name: 'Bot', role: 'bot' }, + conversation: { id: 'conv-123', conversationType: 'personal' }, + }; + + sender = new ActivitySender(mockHttpClient, undefined as any); + }); + + describe('send', () => { + it('should POST to create a new activity', async () => { + const activity: ActivityParams = { type: 'message', text: 'hello' }; + + const result = await sender.send(activity, ref); + + expect(mockHttpClient.post).toHaveBeenCalledWith( + 'https://smba.trafficmanager.net/teams/v3/conversations/conv-123/activities', + expect.objectContaining({ + type: 'message', + text: 'hello', + from: ref.bot, + conversation: ref.conversation, + }) + ); + expect(result).toEqual(expect.objectContaining({ id: 'activity-1' })); + }); + + it('should PUT to update an existing activity', async () => { + const activity: ActivityParams = { + type: 'message', + text: 'updated', + id: 'existing-id', + }; + + await sender.send(activity, ref); + + expect(mockHttpClient.put).toHaveBeenCalledWith( + 'https://smba.trafficmanager.net/teams/v3/conversations/conv-123/activities/existing-id', + expect.objectContaining({ type: 'message', text: 'updated' }) + ); + expect(mockHttpClient.post).not.toHaveBeenCalled(); + }); + + it('should POST with isTargetedActivity query param for targeted messages', async () => { + const activity = { + type: 'message', + text: 'targeted', + recipient: { id: 'user-1', name: 'User', role: 'user', isTargeted: true }, + } as ActivityParams; + + await sender.send(activity, ref); + + expect(mockHttpClient.post).toHaveBeenCalledWith( + 'https://smba.trafficmanager.net/teams/v3/conversations/conv-123/activities?isTargetedActivity=true', + expect.objectContaining({ type: 'message', text: 'targeted' }) + ); + }); + + it('should PUT with isTargetedActivity query param for targeted updates', async () => { + const activity = { + type: 'message', + text: 'targeted update', + id: 'existing-id', + recipient: { id: 'user-1', name: 'User', role: 'user', isTargeted: true }, + } as ActivityParams; + + await sender.send(activity, ref); + + expect(mockHttpClient.put).toHaveBeenCalledWith( + 'https://smba.trafficmanager.net/teams/v3/conversations/conv-123/activities/existing-id?isTargetedActivity=true', + expect.objectContaining({ + recipient: expect.objectContaining({ isTargeted: true }), + }) + ); + expect(mockHttpClient.put).toHaveBeenCalledTimes(1); + expect(mockHttpClient.post).not.toHaveBeenCalled(); + }); + + it('should merge bot and conversation from ref into activity', async () => { + const activity: ActivityParams = { type: 'message', text: 'hello' }; + + await sender.send(activity, ref); + + expect(mockHttpClient.post).toHaveBeenCalledWith( + expect.any(String), + expect.objectContaining({ + from: { id: 'bot-id', name: 'Bot', role: 'bot' }, + conversation: { id: 'conv-123', conversationType: 'personal' }, + }) + ); + }); + + it('should use the serviceUrl from the conversation reference in the endpoint', async () => { + const customRef = { + ...ref, + serviceUrl: 'https://custom-service.botframework.com', + conversation: { id: 'conv-456', conversationType: 'personal' }, + }; + + await sender.send({ type: 'message', text: 'hi' }, customRef); + + expect(mockHttpClient.post).toHaveBeenCalledWith( + 'https://custom-service.botframework.com/v3/conversations/conv-456/activities', + expect.any(Object) + ); + }); + }); + + describe('createStream', () => { + it('should return a stream instance', () => { + const stream = sender.createStream(ref); + expect(stream).toBeDefined(); + expect(stream.emit).toBeDefined(); + expect(stream.close).toBeDefined(); + }); + }); +}); diff --git a/packages/apps/src/activity-sender.ts b/packages/apps/src/activity-sender.ts new file mode 100644 index 000000000..75b57842a --- /dev/null +++ b/packages/apps/src/activity-sender.ts @@ -0,0 +1,51 @@ +import { ActivityParams, Client, ConversationReference, SentActivity } from '@microsoft/teams.api'; +import * as $http from '@microsoft/teams.common/http'; +import { ILogger } from '@microsoft/teams.common/logging'; + +import { HttpStream } from './http/http-stream'; +import { IStreamer, IActivitySender } from './types'; + +/** + * Handles sending activities to the Bot Framework + * Separate from transport concerns (HTTP, WebSocket, etc.) + */ +export class ActivitySender implements IActivitySender { + constructor( + private client: $http.Client, + private logger: ILogger + ) { } + + async send(activity: ActivityParams, ref: ConversationReference): Promise { + // Create API client for this conversation's service URL + const api = new Client(ref.serviceUrl, this.client); + + // Merge activity with conversation reference + activity = { + ...activity, + from: ref.bot, + conversation: ref.conversation, + }; + + // Check if this is a targeted message + const isTargeted = activity.recipient?.isTargeted === true; + + // Decide create vs update, with targeted variants + if (activity.id) { + const res = isTargeted + ? await api.conversations.activities(ref.conversation.id).updateTargeted(activity.id, activity) + : await api.conversations.activities(ref.conversation.id).update(activity.id, activity); + return { ...activity, ...res }; + } + + const res = isTargeted + ? await api.conversations.activities(ref.conversation.id).createTargeted(activity) + : await api.conversations.activities(ref.conversation.id).create(activity); + return { ...activity, ...res }; + } + + createStream(ref: ConversationReference): IStreamer { + // Create API client for this conversation's service URL + const api = new Client(ref.serviceUrl, this.client); + return new HttpStream(api, ref, this.logger); + } +} diff --git a/packages/apps/src/app.embed.ts b/packages/apps/src/app.embed.ts index 0094c3ac9..2a5d2f601 100644 --- a/packages/apps/src/app.embed.ts +++ b/packages/apps/src/app.embed.ts @@ -1,11 +1,9 @@ -import npath from 'path'; - import { ActivityLike } from '@microsoft/teams.api'; import { App } from './app'; import { IFunctionContext } from './contexts'; import * as manifest from './manifest'; -import { JwtRemoteFunctionRequest, withRemoteFunctionJwtValidation } from './middleware'; +import { RemoteFunctionValidator } from './middleware/auth/remote-function-validator'; import { IPlugin } from './types'; import { functionContext } from './utils'; @@ -20,45 +18,51 @@ export function func( cb: (context: IFunctionContext) => any | Promise ) { const log = this.log.child('functions').child(name); - this.http.post( - `/api/functions/${name}`, - withRemoteFunctionJwtValidation({ - logger: log, - entraTokenValidator: this.entraTokenValidator, - ...this.credentials, - }), - async (req: JwtRemoteFunctionRequest, res) => { - if (!req.context) { - throw new Error('expected client context'); - } - - const getCurrentConversationId = - functionContext.getConversationIdResolver( - this, - log.child('getCurrentConversationId'), - req.context - ); - - const send = async (activity: ActivityLike) => { - const conversationId = await getCurrentConversationId(); - return !conversationId - ? null - : await this.send(conversationId, activity); - }; - - const data = await cb({ - ...req.context, - log, - api: this.api, - appGraph: this.graph, - data: req.body, - getCurrentConversationId, - send, - }); - - res.send(data); + const entraTokenValidator = this.entraTokenValidator; + + // Create the remote function validator once + const validator = entraTokenValidator + ? new RemoteFunctionValidator(entraTokenValidator, log) + : null; + + this.server.registerRoute('POST', `/api/functions/${name}`, async ({ body, headers }) => { + // Validate JWT token and extract context + if (!validator) { + log.debug('unauthorized - no token validator configured'); + return { status: 401, body: 'unauthorized' }; + } + + const context = await validator.check(headers); + if (!context) { + return { status: 401, body: 'unauthorized' }; } - ); + + const getCurrentConversationId = + functionContext.getConversationIdResolver( + this, + log.child('getCurrentConversationId'), + context + ); + + const send = async (activity: ActivityLike) => { + const conversationId = await getCurrentConversationId(); + return !conversationId + ? null + : await this.send(conversationId, activity); + }; + + const data = await cb({ + ...context, + log, + api: this.api, + appGraph: this.graph, + data: body as TData, + getCurrentConversationId, + send, + }); + + return { status: 200, body: data }; + }); return this; } @@ -95,10 +99,7 @@ export function tab( this._manifest.staticTabs.push(tab); } - this.http.static(`/tabs/${name}`, path); - this.http.use(`/tabs/${name}*`, async (_, res) => { - res.sendFile(npath.join(path, 'index.html')); - }); + this.server.serveStatic(`/tabs/${name}`, path); return this; } diff --git a/packages/apps/src/app.events.ts b/packages/apps/src/app.events.ts index 99cca0512..50e70f4fc 100644 --- a/packages/apps/src/app.events.ts +++ b/packages/apps/src/app.events.ts @@ -6,7 +6,7 @@ import { IActivitySentEvent, IErrorEvent, } from './events'; -import { AppEvents, IPlugin, ISender } from './types'; +import { AppEvents, IPlugin } from './types'; /** * subscribe to an event @@ -36,34 +36,26 @@ export async function onError( export async function onActivitySent( this: App, - sender: ISender, event: IActivitySentEvent ) { for (const plugin of this.plugins) { if (plugin.onActivitySent) { - await plugin.onActivitySent({ - ...event, - sender, - }); + await plugin.onActivitySent(event); } } - this.events.emit('activity.sent', { ...event, sender }); + this.events.emit('activity.sent', event); } export async function onActivityResponse( this: App, - sender: ISender, event: IActivityResponseEvent ) { for (const plugin of this.plugins) { if (plugin.onActivityResponse) { - await plugin.onActivityResponse({ - ...event, - sender, - }); + await plugin.onActivityResponse(event); } } - this.events.emit('activity.response', { ...event, sender }); + this.events.emit('activity.response', event); } diff --git a/packages/apps/src/app.oauth.ts b/packages/apps/src/app.oauth.ts index ca525a31f..b5bd3189c 100644 --- a/packages/apps/src/app.oauth.ts +++ b/packages/apps/src/app.oauth.ts @@ -1,6 +1,7 @@ import { AxiosError } from 'axios'; import { + ISignInFailureInvokeActivity, ISignInTokenExchangeInvokeActivity, ISignInVerifyStateInvokeActivity, TokenExchangeInvokeResponse, @@ -103,3 +104,47 @@ export async function onVerifyState( return { status: 412 }; } } + +/** + * Default handler for signin/failure invoke activities. + * + * Teams sends a signin/failure invoke when SSO token exchange fails + * (e.g., due to a misconfigured Entra app registration). This handler + * logs the failure details and emits an error event so developers are + * notified rather than having the failure silently swallowed. + * + * Known failure codes (sent by the Teams client): + * - `installappfailed`: Failed to install the app in the user's personal scope (non-silent). + * - `authrequestfailed`: The SSO auth request failed after app installation (non-silent). + * - `installedappnotfound`: The bot app is not installed for the user or group chat. + * - `invokeerror`: A generic error occurred during the SSO invoke flow. + * - `resourcematchfailed`: The token exchange resource URI on the OAuthCard does not + * match the Application ID URI in the Entra app registration's "Expose an API" section. + * - `oauthcardnotvalid`: The bot's OAuthCard could not be parsed. + * - `tokenmissing`: AAD token acquisition failed. + * - `userconsentrequired`: The user needs to consent (handled via OAuth card fallback, + * does not typically reach the bot). + * - `interactionrequired`: User interaction is required (handled via OAuth card fallback, + * does not typically reach the bot). + */ +export async function onSignInFailure( + this: App, + ctx: contexts.IActivityContext> +) { + const { log, activity, next } = ctx; + const { code, message } = activity.value; + + log.warn( + `sign-in failed for user "${activity.from.id}" in conversation "${activity.conversation.id}": ${code} — ${message}. ` + + 'If the code is \'resourcematchfailed\', verify that your Entra app registration has \'Expose an API\' configured ' + + 'with the correct Application ID URI matching your OAuth connection\'s Token Exchange URL.' + ); + + this.events.emit('error', { + error: new Error(`Sign-in failure: ${code} — ${message}`), + activity, + }); + + next(ctx); + return { status: 200 }; +} diff --git a/packages/apps/src/app.plugin.spec.ts b/packages/apps/src/app.plugin.spec.ts index bc85963a9..373a23720 100644 --- a/packages/apps/src/app.plugin.spec.ts +++ b/packages/apps/src/app.plugin.spec.ts @@ -1,181 +1,240 @@ import { ConsoleLogger } from '@microsoft/teams.common/logging'; -import { App } from './app'; -import { IErrorEvent } from './events'; -import { HttpPlugin } from './plugins'; -import { EmitPluginEvent, IPlugin, IPluginStartEvent } from './types'; +import { ICoreActivity, IErrorEvent } from './events'; +import { createTestApp } from './test-utils'; +import { EmitPluginEvent, IPlugin, IPluginActivityEvent, IPluginStartEvent } from './types'; import { Event, Plugin } from './types/plugin/decorators'; interface ITestEvents { - test: { - message: string; - bar: number; - } -} - -class TestHttpPlugin extends HttpPlugin { - async onStart(_event: IPluginStartEvent) { - // No-op for tests - } - - async onStop() { - // No-op for tests - } + test: { + message: string; + bar: number; + } } @Plugin({ - name: 'testPlugin', - version: '0.0.1', - description: 'test-plugin', + name: 'testPlugin', + version: '0.0.1', + description: 'test-plugin', }) class TestPlugin implements IPlugin { - @Event('custom') - private emit!: EmitPluginEvent; + @Event('custom') + private emit!: EmitPluginEvent; - __eventType!: ITestEvents; + __eventType!: ITestEvents; - testEmit() { - this.emit('test', { message: 'hello', bar: 1 }); - } + testEmit() { + this.emit('test', { message: 'hello', bar: 1 }); + } - onStart(_event: IPluginStartEvent): void | Promise { - // Do nothing - } + onStart(_event: IPluginStartEvent): void | Promise { + // Do nothing + } } describe('app.plugin', () => { - it('plugins should be able to emit events that reach the app', async () => { - // Create an App with our test plugin - const testPlugin = new TestPlugin(); - const app = new App({ - logger: new ConsoleLogger('test', { level: 'debug' }), - plugins: [testPlugin, new TestHttpPlugin()] - }); - - let receivedEventMessage: string = ''; - app.event('test', event => { - // Make sure message is typed correctly - receivedEventMessage = event.message; - // @ts-expect-error - event should be correctly typed to ITestEvents - event.nonExistentProperty = 'bar'; - }); - - await app.start(); - - testPlugin.testEmit(); - expect(receivedEventMessage).toEqual('hello'); + it('plugins should be able to emit events that reach the app', async () => { + // Create an App with our test plugin + const testPlugin = new TestPlugin(); + const app = createTestApp({ + logger: new ConsoleLogger('test', { level: 'debug' }), + plugins: [testPlugin] }); - it('should throw error when registering duplicate plugin names', () => { - const plugin1 = new TestPlugin(); - const plugin2 = new TestPlugin(); - const app = new App({ - logger: new ConsoleLogger('test', { level: 'debug' }), - plugins: [plugin1] - }); - - expect(() => { - app.plugin(plugin2); - }).toThrow('duplicate plugin "testPlugin" found'); + let receivedEventMessage: string = ''; + app.event('test', event => { + // Make sure message is typed correctly + receivedEventMessage = event.message; + // @ts-expect-error - event should be correctly typed to ITestEvents + event.nonExistentProperty = 'bar'; + }); + + await app.start(); + + testPlugin.testEmit(); + expect(receivedEventMessage).toEqual('hello'); + }); + + it('should throw error when registering duplicate plugin names', () => { + const plugin1 = new TestPlugin(); + const plugin2 = new TestPlugin(); + const app = createTestApp({ + logger: new ConsoleLogger('test', { level: 'debug' }), + plugins: [plugin1] + }); + + expect(() => { + app.plugin(plugin2); + }).toThrow('duplicate plugin "testPlugin" found'); + }); + + it('should prevent plugins from using reserved event names', async () => { + @Plugin({ + name: 'reservedPlugin', + version: '0.0.1', + description: 'test-plugin', + }) + class ReservedEventPlugin implements IPlugin<{ 'activity': { foo: string } }> { + + @Event('custom') + emit!: (name: Name, arg: { foo: string }) => void; + + __eventType!: { 'activity': { foo: string } }; + + onStart(_event: IPluginStartEvent): void | Promise { + // No-op for tests + } + + testEmit() { + this.emit('activity', { foo: 'bar' }); + } + } + + const app = createTestApp({ + logger: new ConsoleLogger('test', { level: 'debug' }), + plugins: [new ReservedEventPlugin()] }); - it('should prevent plugins from using reserved event names', async () => { - @Plugin({ - name: 'reservedPlugin', - version: '0.0.1', - description: 'test-plugin', - }) - class ReservedEventPlugin implements IPlugin<{ 'activity': { foo: string } }> { + const eventFn = jest.fn(); + app.event('activity', eventFn); - @Event('custom') - emit!: (name: Name, arg: { foo: string }) => void; + await app.start(); + const plugin = app.getPlugin('reservedPlugin') as ReservedEventPlugin; - __eventType!: { 'activity': { foo: string } }; + plugin.testEmit(); + expect(eventFn).not.toHaveBeenCalled(); - onStart(_event: IPluginStartEvent): void | Promise { - // No-op for tests - } + await app.stop(); + }); - testEmit() { - this.emit('activity', { foo: 'bar' }); - } - } + it('should call plugin lifecycle methods in correct order', async () => { + const lifecycleOrder: string[] = []; - const app = new App({ - logger: new ConsoleLogger('test', { level: 'debug' }), - plugins: [new ReservedEventPlugin()] - }); + @Plugin({ + name: 'lifecyclePlugin', + version: '0.0.1', + description: 'test-plugin', + }) + class LifecyclePlugin implements IPlugin { - const eventFn = jest.fn(); - app.event('activity', eventFn); + onInit(): void { + lifecycleOrder.push('onInit'); + } - await app.start(); - const plugin = app.getPlugin('reservedPlugin') as ReservedEventPlugin; + onStart(_event: IPluginStartEvent): void { + lifecycleOrder.push('onStart'); + } - plugin.testEmit(); - expect(eventFn).not.toHaveBeenCalled(); + onStop(): void { + lifecycleOrder.push('onStop'); + } + } + + const app = createTestApp({ + logger: new ConsoleLogger('test', { level: 'debug' }), + plugins: [new LifecyclePlugin()] }); - it('should call plugin lifecycle methods in correct order', async () => { - const lifecycleOrder: string[] = []; + await app.start(); + await app.stop(); + + expect(lifecycleOrder).toEqual(['onInit', 'onStart', 'onStop']); + }); + + it('should propagate plugin errors to app error handler', async () => { + @Plugin({ + name: 'errorPlugin', + version: '0.0.1', + description: 'test-plugin', + }) + class ErrorPlugin implements IPlugin { + onStart(_event: IPluginStartEvent): void { + throw new Error('test error'); + } + } - @Plugin({ - name: 'lifecyclePlugin', - version: '0.0.1', - description: 'test-plugin', - }) - class LifecyclePlugin implements IPlugin { + const app = createTestApp({ + logger: new ConsoleLogger('test', { level: 'debug' }), + plugins: [new ErrorPlugin()] + }); - onInit(): void { - lifecycleOrder.push('onInit'); - } + let errorReceived = null as Error | null; + app.event('error', (event: IErrorEvent) => { + errorReceived = event.error; + }); - onStart(_event: IPluginStartEvent): void { - lifecycleOrder.push('onStart'); - } + await app.start(); - onStop(): void { - lifecycleOrder.push('onStop'); - } - } + expect(errorReceived).toBeDefined(); + expect(errorReceived?.message).toBe('test error'); - const app = new App({ - logger: new ConsoleLogger('test', { level: 'debug' }), - plugins: [new LifecyclePlugin(), new TestHttpPlugin()] - }); + await app.stop(); + }); - await app.start(); - await app.stop(); + it('should be able to include additional context', async () => { + interface IMyContext { + foo: number; + bar: string; + } - expect(lifecycleOrder).toEqual(['onInit', 'onStart', 'onStop']); + @Plugin({ + name: 'myPlugin', + version: '0.0.1', + description: 'test-plugin', + }) + class MyPlugin implements IPlugin { + onActivity(_event: IPluginActivityEvent): IMyContext { + return { + foo: 4, + bar: 'str', + }; + } + + onStart(_event: IPluginStartEvent): void | Promise { + // No-op for tests + } + } + + const app = createTestApp({ + logger: new ConsoleLogger('test', { level: 'debug' }), + plugins: [new MyPlugin()] }); - it('should propagate plugin errors to app error handler', async () => { - @Plugin({ - name: 'errorPlugin', - version: '0.0.1', - description: 'test-plugin', - }) - class ErrorPlugin implements IPlugin { - onStart(_event: IPluginStartEvent): void { - throw new Error('test error'); - } - } - - const app = new App({ - logger: new ConsoleLogger('test', { level: 'debug' }), - plugins: [new ErrorPlugin(), new TestHttpPlugin()] - }); - - let errorReceived = null as Error | null; - app.event('error', (event: IErrorEvent) => { - errorReceived = event.error; - }); - - await app.start(); - - expect(errorReceived).toBeDefined(); - expect(errorReceived?.message).toBe('test error'); + + let receivedFoo: number = -1; + let receivedBar: string = ''; + app.on('message', (context) => { + receivedFoo = context.foo; + receivedBar = context.bar; }); + + await app.start(); + + // Trigger a message activity by directly calling onActivity (internal API for testing) + await app.onActivity({ + body: { + type: 'message', + text: 'test message', + from: { id: 'user-id', name: 'Test User' }, + recipient: { id: 'bot-id', name: 'Bot' }, + conversation: { id: 'conv-id' }, + channelId: 'test', + serviceUrl: 'https://test.botframework.com' + } as ICoreActivity, + token: { + appId: 'test-app-id', + serviceUrl: 'https://test.botframework.com', + from: 'bot' as const, + fromId: 'test-from-id', + toString: () => 'test-token', + isExpired: () => false, + } + }); + + expect(receivedFoo).toEqual(4); + expect(receivedBar).toEqual('str'); + + await app.stop(); + }); }); diff --git a/packages/apps/src/app.plugins.ts b/packages/apps/src/app.plugins.ts index 4722e0a87..0346b98f2 100644 --- a/packages/apps/src/app.plugins.ts +++ b/packages/apps/src/app.plugins.ts @@ -1,8 +1,8 @@ import { ILogger } from '@microsoft/teams.common'; import { App } from './app'; -import { allIEventKeys, IEvents } from './events'; -import { IPlugin, IPluginActivityEvent, IPluginErrorEvent, ISender, PluginName } from './types'; +import { allIEventKeys, IActivityEvent, IEvents } from './events'; +import { IPlugin, IPluginErrorEvent, PluginName } from './types'; import { DependencyMetadata, PLUGIN_DEPENDENCIES_METADATA_KEY, @@ -81,11 +81,11 @@ export function inject(this: App, plugin: IPlu if (name === 'error') { handler = (event: IPluginErrorEvent) => { - this.onError({ ...event, sender: plugin }); + this.onError(event); }; } else if (name === 'activity') { - handler = (event: IPluginActivityEvent) => { - return this.onActivity(plugin as ISender, event); + handler = (event: IActivityEvent) => { + return this.onActivity(event); }; } else if (name === 'custom') { handler = (name: string, event: unknown) => { diff --git a/packages/apps/src/app.process.spec.ts b/packages/apps/src/app.process.spec.ts index 215cc2ea5..48725e844 100644 --- a/packages/apps/src/app.process.spec.ts +++ b/packages/apps/src/app.process.spec.ts @@ -1,12 +1,11 @@ -import { IMessageActivity, InvokeResponse, ITaskFetchInvokeActivity, IToken, MessageActivity, TaskModuleResponse } from '@microsoft/teams.api'; +import { IMessageActivity, InvokeResponse, ISignInFailureInvokeActivity, ITaskFetchInvokeActivity, IToken, MessageActivity, TaskModuleResponse } from '@microsoft/teams.api'; import { App } from './app'; import { IActivityEvent } from './events/activity'; -import { TestHttpPlugin } from './plugins/http/plugin.spec'; +import { createTestApp } from './test-utils'; describe('App', () => { - let senderPlugin: TestHttpPlugin; - let app: App; + let app: App; const token: IToken = { appId: 'app-id', serviceUrl: 'https://service.url', @@ -18,10 +17,7 @@ describe('App', () => { const activity: IMessageActivity = new MessageActivity(); beforeEach(() => { - senderPlugin = new TestHttpPlugin(); - app = new App({ - plugins: [senderPlugin], - }); + app = createTestApp(); app.start(); }); @@ -33,11 +29,10 @@ describe('App', () => { it('should return status 200 if no route matches', async () => { const event: IActivityEvent = { token: token, - activity: activity, - sender: senderPlugin, + body: activity, }; - const response = await app.process(senderPlugin, event); + const response = await app.process(event); expect(response.status).toBe(200); expect(response.body).toBeUndefined(); }); @@ -45,8 +40,7 @@ describe('App', () => { it('should return an invoke response', async () => { const event: IActivityEvent = { token: token, - activity: activity, - sender: senderPlugin, + body: activity, }; app.use(() => { @@ -58,7 +52,7 @@ describe('App', () => { return response; }); - const response = await app.process(senderPlugin, event); + const response = await app.process(event); expect(response.status).toBe(413); expect(response.body).toEqual({ result: 'success' }); }); @@ -72,8 +66,7 @@ describe('App', () => { const event: IActivityEvent = { token: token, - activity: taskFetchInvokeActivity, - sender: senderPlugin, + body: taskFetchInvokeActivity, }; const dialogOpenResponse: TaskModuleResponse = { @@ -88,7 +81,7 @@ describe('App', () => { return dialogOpenResponse; }); - const response = await app.process(senderPlugin, event); + const response = await app.process(event); expect(response.status).toBe(200); expect(response.body).toEqual(dialogOpenResponse); }); @@ -96,17 +89,131 @@ describe('App', () => { it('should return 500 status response if an error is thrown', async () => { const event: IActivityEvent = { token: token, - activity: activity, - sender: senderPlugin, + body: activity, }; app.use(() => { throw new Error('Test error'); }); - const response = await app.process(senderPlugin, event); + const response = await app.process(event); expect(response.status).toBe(500); expect(response.body).toBeUndefined(); }); + + it('should handle signin/failure invoke with default handler', async () => { + const signinFailureActivity = { + type: 'invoke', + name: 'signin/failure', + channelId: 'msteams', + from: { id: 'user-1', name: 'Test User' }, + conversation: { id: 'conv-1' }, + recipient: { id: 'bot-1', name: 'Test Bot' }, + value: { + code: 'resourcematchfailed', + message: 'Resource match failed', + }, + } as unknown as ISignInFailureInvokeActivity; + + const event: IActivityEvent = { + token: token, + body: signinFailureActivity, + }; + + const response = await app.process(event); + expect(response.status).toBe(200); + }); + + it('should use incoming activity serviceUrl when sending replies', async () => { + const incomingServiceUrl = 'https://incoming-service.botframework.com'; + + // Create incoming activity with specific serviceUrl + const incomingActivity: IMessageActivity = new MessageActivity('hello') + .withFrom({ id: 'user-1', name: 'Test User', role: 'user' }) + .withRecipient({ id: 'bot-1', name: 'Test Bot', role: 'bot' }) + .withConversation({ id: 'conv-123', conversationType: 'personal' }) + .withChannelId('msteams') + .withServiceUrl(incomingServiceUrl) + .toInterface(); + + const incomingToken: IToken = { + appId: 'app-id', + serviceUrl: incomingServiceUrl, + from: 'bot', + fromId: 'bot-1', + toString: () => 'token', + isExpired: () => false, + }; + + const event: IActivityEvent = { + token: incomingToken, + body: incomingActivity, + }; + + // Track what serviceUrl is used when sending + let capturedServiceUrl: string | undefined; + const originalSend = app['activitySender'].send.bind(app['activitySender']); + jest.spyOn(app['activitySender'], 'send').mockImplementation((activity, ref) => { + capturedServiceUrl = ref.serviceUrl; + return originalSend(activity, ref); + }); + + // Set up handler that replies + app.on('message', async ({ reply }) => { + await reply('response'); + }); + + await app.process(event); + + // Verify the serviceUrl from incoming activity was used + expect(capturedServiceUrl).toBe(incomingServiceUrl); + }); + + it('should use different serviceUrls for different incoming activities', async () => { + const serviceUrl1 = 'https://service-1.botframework.com'; + const serviceUrl2 = 'https://service-2.botframework.com'; + + const capturedServiceUrls: string[] = []; + const originalSend = app['activitySender'].send.bind(app['activitySender']); + jest.spyOn(app['activitySender'], 'send').mockImplementation((activity, ref) => { + capturedServiceUrls.push(ref.serviceUrl); + return originalSend(activity, ref); + }); + + app.on('message', async ({ reply }) => { + await reply('response'); + }); + + // Process first activity with serviceUrl1 + const activity1: IMessageActivity = new MessageActivity('hello1') + .withFrom({ id: 'user-1', name: 'Test User', role: 'user' }) + .withRecipient({ id: 'bot-1', name: 'Test Bot', role: 'bot' }) + .withConversation({ id: 'conv-1', conversationType: 'personal' }) + .withChannelId('msteams') + .withServiceUrl(serviceUrl1) + .toInterface(); + + await app.process({ + token: { ...token, serviceUrl: serviceUrl1 }, + body: activity1, + }); + + // Process second activity with serviceUrl2 + const activity2: IMessageActivity = new MessageActivity('hello2') + .withFrom({ id: 'user-2', name: 'Test User 2', role: 'user' }) + .withRecipient({ id: 'bot-1', name: 'Test Bot', role: 'bot' }) + .withConversation({ id: 'conv-2', conversationType: 'personal' }) + .withChannelId('msteams') + .withServiceUrl(serviceUrl2) + .toInterface(); + + await app.process({ + token: { ...token, serviceUrl: serviceUrl2 }, + body: activity2, + }); + + // Verify both serviceUrls were used correctly + expect(capturedServiceUrls).toEqual([serviceUrl1, serviceUrl2]); + }); }); }); diff --git a/packages/apps/src/app.process.ts b/packages/apps/src/app.process.ts index 5de57089d..65e370200 100644 --- a/packages/apps/src/app.process.ts +++ b/packages/apps/src/app.process.ts @@ -1,22 +1,28 @@ -import { ActivityLike, ConversationReference, InvokeResponse, isInvokeResponse } from '@microsoft/teams.api'; +import { Activity, ActivityLike, ConversationReference, InvokeResponse, isInvokeResponse } from '@microsoft/teams.api'; import { ApiClient, GraphClient } from './api'; import { App } from './app'; import { ActivityContext, IActivityContext } from './contexts'; import { IActivityEvent } from './events'; -import { IPlugin, ISender } from './types'; +import { IPlugin } from './types'; /** * activity handler called when an inbound activity is received - * @param sender the plugin to use for sending activities * @param event the received activity event */ export async function $process( this: App, - sender: ISender, event: IActivityEvent ): Promise { - const { token, activity } = event; + const { token, body } = event; + + if (!body) { + throw new Error('Activity body is required'); + } + + // TODO: We currently simply cast the models to Activity, + // but we should probably be validating this conversion + const activity = body as Activity; this.log.debug( `activity/${activity.type}${activity.type === 'invoke' ? `/${activity.name}` : ''}` @@ -57,33 +63,29 @@ export async function $process( const routes = this.router.select(activity); + // Collect plugin contexts BEFORE creating the activity context let pluginContexts: {} = {}; for (let i = this.plugins.length - 1; i > -1; i--) { const plugin = this.plugins[i]; if (plugin.onActivity) { - routes.unshift(async ({ next }) => { - const additionalPluginContext = await plugin.onActivity!({ - ...ref, - sender: sender, - activity, - token, - }); - - if (additionalPluginContext) { - for (const key in additionalPluginContext) { - if (key in pluginContexts) { - this.log.warn(`Plugin context key "${key}" already exists. Overriding.`); - } + const additionalPluginContext = await plugin.onActivity({ + ...ref, + activity, + token, + }); + + if (additionalPluginContext) { + for (const key in additionalPluginContext) { + if (key in pluginContexts) { + this.log.warn(`Plugin context key "${key}" already exists. Overriding.`); } - pluginContexts = { - ...pluginContexts, - ...additionalPluginContext, - }; } - - return next(); - }); + pluginContexts = { + ...pluginContexts, + ...additionalPluginContext, + }; + } } } @@ -94,7 +96,11 @@ export async function $process( if (i === routes.length - 1) return data; i++; - const res = await routes[i](ctx || context.toInterface()); + const mergedContext = ctx || { + ...context.toInterface(), + ...pluginContexts, + }; + const res = await routes[i](mergedContext); if (res) { data = res; @@ -103,8 +109,8 @@ export async function $process( return data; }; - const context = new ActivityContext(sender, { - ...event, + const context = new ActivityContext({ + activity, next, api: apiClient, userGraph, @@ -116,16 +122,16 @@ export async function $process( storage: this.storage, isSignedIn: !!userToken, connectionName: this.oauth.defaultConnectionName, + activitySender: this.activitySender, ...pluginContexts }); const send = context.send.bind(context); context.send = async (activity: ActivityLike, conversationRef?: ConversationReference) => { - const res = await send(activity, conversationRef); + const res = await send(activity, conversationRef ?? ref); - this.onActivitySent(sender, { + this.onActivitySent({ ...(conversationRef ?? ref), - sender, activity: res, }); @@ -133,17 +139,15 @@ export async function $process( }; context.stream.events.on('chunk', (activity) => { - this.onActivitySent(sender, { + this.onActivitySent({ ...ref, - sender, activity, }); }); context.stream.events.once('close', (activity) => { - this.onActivitySent(sender, { + this.onActivitySent({ ...ref, - sender, activity, }); }); @@ -160,18 +164,16 @@ export async function $process( response = { status: 200, body: res }; } - this.onActivityResponse(sender, { + this.onActivityResponse({ ...ref, - sender, activity, response: res, }); } catch (error: any) { response = { status: 500 }; - this.onError({ error, activity, sender }); - this.onActivityResponse(sender, { + this.onError({ error, activity }); + this.onActivityResponse({ ...ref, - sender, activity, response: response, }); diff --git a/packages/apps/src/app.spec.ts b/packages/apps/src/app.spec.ts index 78cdc02a3..2b75a3196 100644 --- a/packages/apps/src/app.spec.ts +++ b/packages/apps/src/app.spec.ts @@ -3,7 +3,7 @@ import jwt from 'jsonwebtoken'; import { JsonWebToken } from '@microsoft/teams.api'; import { App } from './app'; -import { TestHttpPlugin } from './plugins/http/plugin.spec'; +import { TestAdapter } from './test-utils'; class TestApp extends App { // Expose protected members for testing @@ -18,6 +18,11 @@ class TestApp extends App { public async testSend(conversationId: string, activity: any) { return this.send(conversationId, activity); } + + // Expose activitySender for mocking (it's protected, so we expose it publicly) + public get testActivitySender() { + return this.activitySender; + } } describe('App', () => { @@ -42,13 +47,17 @@ describe('App', () => { beforeEach(() => { app = new TestApp({ + httpServerAdapter: new TestAdapter(), clientId: 'test-client-id', clientSecret: 'test-client-secret', tenantId: 'test-tenant-id', - plugins: [new TestHttpPlugin()], }); }); + afterEach(async () => { + await app.stop(); + }); + it('should acquire bot token via TokenManager', async () => { const mockAcquireToken = jest.fn().mockResolvedValue({ accessToken: mockBotToken, @@ -83,7 +92,7 @@ describe('App', () => { it('should return null when credentials are not provided', async () => { const appWithoutCreds = new TestApp({ - plugins: [new TestHttpPlugin()], + httpServerAdapter: new TestAdapter() }); const botToken = await appWithoutCreds.testGetBotToken(); @@ -110,19 +119,23 @@ describe('App', () => { describe('send', () => { let app: TestApp; + afterEach(async () => { + await app.stop(); + }); + it('should send message without manifest.name configured', async () => { app = new TestApp({ + httpServerAdapter: new TestAdapter(), clientId: 'test-client-id', clientSecret: 'test-client-secret', tenantId: 'test-tenant-id', - plugins: [new TestHttpPlugin()], }); await app.start(); - // Mock the http.send method + // Mock the activitySender.send method const mockSend = jest.fn().mockResolvedValue({ id: 'activity-id' }); - jest.spyOn(app.http, 'send').mockImplementation(mockSend); + jest.spyOn(app.testActivitySender, 'send').mockImplementation(mockSend); await app.testSend('conversation-id', { text: 'Hello' }); @@ -134,20 +147,20 @@ describe('App', () => { it('should send message with manifest.name configured', async () => { app = new TestApp({ + httpServerAdapter: new TestAdapter(), clientId: 'test-client-id', clientSecret: 'test-client-secret', tenantId: 'test-tenant-id', manifest: { name: { short: 'TestBot', full: 'Test Bot Application' }, }, - plugins: [new TestHttpPlugin()], }); await app.start(); - // Mock the http.send method + // Mock the activitySender.send method const mockSend = jest.fn().mockResolvedValue({ id: 'activity-id' }); - jest.spyOn(app.http, 'send').mockImplementation(mockSend); + jest.spyOn(app.testActivitySender, 'send').mockImplementation(mockSend); await app.testSend('conversation-id', { text: 'Hello' }); @@ -159,7 +172,7 @@ describe('App', () => { it('should throw error when app is not started (no clientId)', async () => { app = new TestApp({ - plugins: [new TestHttpPlugin()], + httpServerAdapter: new TestAdapter() }); await app.start(); @@ -169,4 +182,146 @@ describe('App', () => { ).rejects.toThrow('app not started'); }); }); + + describe('proactive messaging (initialize without start)', () => { + let app: TestApp; + + it('should send message after initialize() without start()', async () => { + app = new TestApp({ + clientId: 'test-client-id', + clientSecret: 'test-client-secret', + tenantId: 'test-tenant-id', + httpServerAdapter: new TestAdapter(), + }); + + // Only initialize - no start(), no HTTP server + await app.initialize(); + + const mockSend = jest.fn().mockResolvedValue({ id: 'activity-id' }); + jest.spyOn(app.testActivitySender, 'send').mockImplementation(mockSend); + + await app.testSend('conversation-id', { text: 'Proactive hello' }); + + expect(mockSend).toHaveBeenCalled(); + const [activity, ref] = mockSend.mock.calls[0]; + expect(activity.text).toBe('Proactive hello'); + expect(ref.bot.id).toBe('test-client-id'); + expect(ref.conversation.id).toBe('conversation-id'); + }); + + it('should send adaptive card after initialize() without start()', async () => { + app = new TestApp({ + clientId: 'test-client-id', + clientSecret: 'test-client-secret', + tenantId: 'test-tenant-id', + httpServerAdapter: new TestAdapter(), + }); + + await app.initialize(); + + const mockSend = jest.fn().mockResolvedValue({ id: 'activity-id' }); + jest.spyOn(app.testActivitySender, 'send').mockImplementation(mockSend); + + await app.testSend('conversation-id', { + type: 'message', + attachments: [{ contentType: 'application/vnd.microsoft.card.adaptive', content: {} }], + }); + + expect(mockSend).toHaveBeenCalled(); + }); + + it('should not initialize twice', async () => { + app = new TestApp({ + clientId: 'test-client-id', + clientSecret: 'test-client-secret', + tenantId: 'test-tenant-id', + httpServerAdapter: new TestAdapter(), + }); + + await app.initialize(); + await app.initialize(); // should be a no-op + + const mockSend = jest.fn().mockResolvedValue({ id: 'activity-id' }); + jest.spyOn(app.testActivitySender, 'send').mockImplementation(mockSend); + + await app.testSend('conversation-id', { text: 'hello' }); + expect(mockSend).toHaveBeenCalledTimes(1); + }); + }); + + describe('service URL configuration', () => { + const originalEnv = process.env.SERVICE_URL; + + afterEach(() => { + if (originalEnv === undefined) { + delete process.env.SERVICE_URL; + } else { + process.env.SERVICE_URL = originalEnv; + } + }); + + it('should use default service URL when no configuration provided', () => { + delete process.env.SERVICE_URL; + + const app = new App({ + clientId: 'test-client-id', + clientSecret: 'test-client-secret', + httpServerAdapter: new TestAdapter(), + }); + + expect(app.api.serviceUrl).toBe('https://smba.trafficmanager.net/teams'); + }); + + it('should use service URL from environment variable', () => { + process.env.SERVICE_URL = 'https://custom.service.url/teams'; + + const app = new App({ + clientId: 'test-client-id', + clientSecret: 'test-client-secret', + httpServerAdapter: new TestAdapter(), + }); + + expect(app.api.serviceUrl).toBe('https://custom.service.url/teams'); + }); + + it('should use service URL from options when provided', () => { + process.env.SERVICE_URL = 'https://env.service.url/teams'; + + const app = new App({ + clientId: 'test-client-id', + clientSecret: 'test-client-secret', + serviceUrl: 'https://options.service.url/teams', + httpServerAdapter: new TestAdapter(), + }); + + expect(app.api.serviceUrl).toBe('https://options.service.url/teams'); + }); + + it('should prioritize options > env > default', () => { + delete process.env.SERVICE_URL; + + const app1 = new App({ + clientId: 'test-client-id', + clientSecret: 'test-client-secret', + httpServerAdapter: new TestAdapter(), + }); + expect(app1.api.serviceUrl).toBe('https://smba.trafficmanager.net/teams'); + + process.env.SERVICE_URL = 'https://env.service.url/teams'; + const app2 = new App({ + clientId: 'test-client-id', + clientSecret: 'test-client-secret', + httpServerAdapter: new TestAdapter(), + }); + expect(app2.api.serviceUrl).toBe('https://env.service.url/teams'); + + const app3 = new App({ + clientId: 'test-client-id', + clientSecret: 'test-client-secret', + serviceUrl: 'https://options.service.url/teams', + httpServerAdapter: new TestAdapter(), + }); + expect(app3.api.serviceUrl).toBe('https://options.service.url/teams'); + }); + }); }); diff --git a/packages/apps/src/app.ts b/packages/apps/src/app.ts index 622417806..337b29ec0 100644 --- a/packages/apps/src/app.ts +++ b/packages/apps/src/app.ts @@ -17,6 +17,7 @@ import { IStorage, LocalStorage } from '@microsoft/teams.common/storage'; import pkg from '../package.json'; +import { ActivitySender } from './activity-sender'; import { ApiClient, GraphClient } from './api'; import { configTab, func, tab } from './app.embed'; @@ -27,21 +28,24 @@ import { onError, } from './app.events'; import { + onSignInFailure, onTokenExchange, - onVerifyState + onVerifyState, } from './app.oauth'; import { getMetadata, getPlugin, inject, plugin } from './app.plugins'; import { $process } from './app.process'; import { message, on, use } from './app.routing'; import { Container } from './container'; import { IActivityEvent } from './events'; +import { ExpressAdapter, IHttpServerAdapter } from './http'; +import { HttpServer } from './http/http-server'; import * as manifest from './manifest'; import * as middleware from './middleware'; import { DEFAULT_OAUTH_SETTINGS, OAuthSettings } from './oauth'; import { HttpPlugin } from './plugins'; import { Router } from './router'; import { TokenManager } from './token-manager'; -import { IPlugin, AppEvents, ISender } from './types'; +import { IPlugin, AppEvents } from './types'; import { PluginAdditionalContext } from './types/app-routing'; /** @@ -62,6 +66,12 @@ export type AppOptions = { */ readonly clientSecret?: string; + /** + * Application ID URI from the Azure portal. Used for user authentication. + * Matches webApplicationInfo.resource in the app manifest. + */ + readonly applicationIdUri?: string; + /** * tenantId - The tenantId where your app is registered * Uses environment variable TENANT_ID if not explicitly provided @@ -106,6 +116,11 @@ export type AppOptions = { */ readonly plugins?: Array; + /** + * HTTP server adapter for handling bot requests + */ + readonly httpServerAdapter?: IHttpServerAdapter; + /** * OAuth Settings */ @@ -126,6 +141,19 @@ export type AppOptions = { */ readonly skipAuth?: boolean; + /** + * URL path for the Teams messaging endpoint + * @default '/api/messages' + */ + readonly messagingEndpoint?: `/${string}`; + + /** + * Base Service URL for BotBackend + * Uses environment variable SERVICE_URL if not provided + * and defaults to https://smba.trafficmanager.net/teams + */ + readonly serviceUrl?: string; + /** * API client settings used for overriding. */ @@ -149,7 +177,8 @@ export class App { readonly api: ApiClient; readonly graph: GraphClient; readonly log: ILogger; - readonly http: HttpPlugin; + readonly server: HttpServer; + readonly http?: HttpPlugin; readonly client: http.Client; readonly storage: IStorage; readonly entraTokenValidator?: middleware.JwtValidator; @@ -216,8 +245,9 @@ export class App { protected router = new Router>(); protected tenantTokens = new LocalStorage({}, { max: 20000 }); protected events = new EventEmitter>(); - protected startedAt?: Date; + protected isInitialized = false; protected port?: number | string; + protected activitySender: ActivitySender; private readonly _userAgent = `teams.ts[apps]/${pkg.version}`; @@ -253,8 +283,10 @@ export class App { }); } + const serviceUrl = (this.options.serviceUrl ?? process.env.SERVICE_URL ?? + 'https://smba.trafficmanager.net/teams').replace(/\/+$/, ''); this.api = new ApiClient( - 'https://smba.trafficmanager.net/teams', + serviceUrl, this.client.clone({ token: () => this.getBotToken() }), this.options.apiClientSettings ); @@ -272,31 +304,65 @@ export class App { managedIdentityClientId: this.options.managedIdentityClientId, }, this.log); + // initialize ActivitySender for sending activities + this.activitySender = new ActivitySender( + this.client.clone({ token: () => this.getBotToken() }), + this.log + ); + if (this.credentials?.clientId) { this.entraTokenValidator = middleware.createEntraTokenValidator( this.credentials.tenantId || 'common', this.credentials.clientId, - { logger: this.log, } + { applicationIdUri: this.options.applicationIdUri, logger: this.log } ); } - // add/validate plugins + // Determine HTTP server const plugins: Array = this.options.plugins || []; - let httpPlugin = plugins.find((p) => { + const httpPlugin = plugins.find((p) => { const meta = getMetadata(p); return meta.name === 'http'; }) as HttpPlugin | undefined; - if (!httpPlugin) { - httpPlugin = new HttpPlugin(undefined, { skipAuth: this.options.skipAuth }); - // Casting to any here because a default HttpPlugin is not assignable to TPlugin - // without a silly level of indirection. - plugins.unshift(httpPlugin as any); - } else if (this.options.skipAuth) { - this.log.warn('skipAuth option has no effect when a custom HTTP plugin is provided. Configure authentication on the plugin directly.'); + // Error if both httpServerAdapter and http plugin are provided + if (this.options.httpServerAdapter && httpPlugin) { + throw new Error( + 'Cannot provide both httpServerAdapter option and HttpPlugin in plugins array. ' + + 'Use either:\n' + + ' - new App({ httpServerAdapter: new ExpressAdapter() }) (recommended)\n' + + ' - new App({ plugins: [new HttpPlugin()] }) (deprecated)' + ); + } + + let server: HttpServer; + + // HttpPlugin in plugins array (backwards compatibility) + if (httpPlugin) { + this.log.warn('[DEPRECATED] HttpPlugin in plugins array will be deprecated. Use httpServerAdapter option instead:\n' + + ' new App({ httpServerAdapter: new ExpressAdapter() })'); + this.http = httpPlugin; + // Extract internal server and always set this.server + server = (httpPlugin as any).asServer?.(); + if (!server) { + throw new Error('HttpPlugin.asServer() returned undefined'); + } + } else { + server = new HttpServer(this.options.httpServerAdapter ?? new ExpressAdapter(undefined, { + logger: this.log, + onError: (err) => this.onError({ error: err }) + }), { + skipAuth: this.options.skipAuth, + logger: this.log, + messagingEndpoint: this.options.messagingEndpoint ?? '/api/messages', + }); } - this.http = httpPlugin; + // Always set this.server + this.server = server; + + // Set callback for handling activities + server.onRequest = (event) => this.onActivity(event); // add injectable items to container this.container.register('id', { useValue: this.id }); @@ -310,6 +376,10 @@ export class App { useFactory: () => this.client, }); + // Register HTTP server for plugins that need HTTP capabilities + this.container.register('IHttpServer', { useValue: server }); + + // Register all plugins (including HttpPlugin if using old way) for (const plugin of plugins) { this.plugin(plugin); } @@ -338,6 +408,13 @@ export class App { callback: ctx => this.onVerifyState(ctx), }); + this.router.register({ + name: 'signin.failure', + type: 'system', + select: activity => activity.type === 'invoke' && activity.name === 'signin/failure', + callback: ctx => this.onSignInFailure(ctx), + }); + this.event('error', ({ error }) => { this.log.error(error.message); @@ -349,33 +426,52 @@ export class App { } /** - * start the app + * initialize the app. + */ + async initialize() { + if (this.isInitialized) { + return; + } + + // initialize plugins + for (const plugin of this.plugins) { + this.inject(plugin); + + if (plugin.onInit) { + await plugin.onInit(); + } + } + + // initialize server + await this.server.initialize({ + credentials: this.credentials, + }); + + this.isInitialized = true; + } + + /** + * start the server after initialization * @param port port to listen on */ async start(port?: number | string) { this.port = port || process.env.PORT || 3978; try { - // initialize plugins - for (const plugin of this.plugins) { - // inject dependencies - this.inject(plugin); + await this.initialize(); - if (plugin.onInit) { - plugin.onInit(); - } - } - - // start plugins + // Start plugins for (const plugin of this.plugins) { if (plugin.onStart) { await plugin.onStart({ port: this.port }); } } - this.events.emit('start', this.log); - this.startedAt = new Date(); + + // Start HTTP server + await this.server.start(this.port); } catch (error: any) { + await this.stop(); this.onError({ error }); } } @@ -385,11 +481,15 @@ export class App { */ async stop() { try { + // Stop plugins for (const plugin of this.plugins) { if (plugin.onStop) { await plugin.onStop(); } } + + // Stop HTTP server + await this.server.stop(); } catch (error: any) { this.onError({ error }); } @@ -405,6 +505,8 @@ export class App { throw new Error('app not started'); } + const params = toActivityParams(activity); + const ref: ConversationReference = { channelId: 'msteams', serviceUrl: this.api.serviceUrl, @@ -419,7 +521,7 @@ export class App { }, }; - const res = await this.http.send(toActivityParams(activity), ref); + const res = await this.activitySender.send(params, ref); return res; } @@ -498,6 +600,7 @@ export class App { protected onTokenExchange = onTokenExchange; // eslint-disable-line @typescript-eslint/member-ordering protected onVerifyState = onVerifyState; // eslint-disable-line @typescript-eslint/member-ordering + protected onSignInFailure = onSignInFailure; // eslint-disable-line @typescript-eslint/member-ordering /// /// Events @@ -509,11 +612,10 @@ export class App { protected onActivityResponse = onActivityResponse; // eslint-disable-line @typescript-eslint/member-ordering async onActivity( - sender: ISender, event: IActivityEvent ): Promise { this.events.emit('activity', event); - return await this.process(sender, { ...event, sender }); + return await this.process(event); } /// diff --git a/packages/apps/src/contexts/activity.test.ts b/packages/apps/src/contexts/activity.test.ts index 17598fddc..ba0606ec1 100644 --- a/packages/apps/src/contexts/activity.test.ts +++ b/packages/apps/src/contexts/activity.test.ts @@ -12,12 +12,11 @@ import { ILogger } from '@microsoft/teams.common/logging'; import { IStorage } from '@microsoft/teams.common/storage'; import { ApiClient, GraphClient } from '../api'; -import { ISender } from '../types'; import { ActivityContext } from './activity'; describe('ActivityContext', () => { - let mockSender: ISender; + let mockSender: { send: jest.Mock; createStream: jest.Mock }; let mockApiClient: MockedObject; let mockLogger: ILogger; let mockStorage: MockedObject; @@ -100,7 +99,7 @@ describe('ActivityContext', () => { }; const buildActivityContext = (activity: Activity): ActivityContext => { - return new ActivityContext(mockSender, { + return new ActivityContext({ appId: 'test-app', activity, ref: mockRef, @@ -111,6 +110,7 @@ describe('ActivityContext', () => { storage: mockStorage, connectionName: 'test-connection', next: jest.fn(), + activitySender: mockSender, }); }; @@ -206,6 +206,64 @@ describe('ActivityContext', () => { mockRef ); }); + + describe('targeted messages', () => { + it('sends targeted message with recipient from incoming activity', async () => { + const activity = buildIncomingMessageActivity('Hello world'); + context = buildActivityContext(activity); + + const targetedActivity = new MessageActivity('Secret message') + .withRecipient({ id: 'test-user', name: 'Test User', role: 'user' }, true); + + await context.send(targetedActivity); + + expect(mockSender.send).toHaveBeenCalledTimes(1); + expect(mockSender.send).toHaveBeenCalledWith( + expect.objectContaining({ + text: 'Secret message', + type: 'message', + recipient: expect.objectContaining({ id: 'test-user', name: 'Test User', role: 'user', isTargeted: true }), + }), + mockRef + ); + }); + + it('sends targeted message with explicit recipient id', async () => { + const activity = buildIncomingMessageActivity('Hello world'); + context = buildActivityContext(activity); + + const targetedActivity = new MessageActivity('Secret message') + .withRecipient({ id: 'explicit-user-id', name: '', role: 'user' }, true); + + await context.send(targetedActivity); + + expect(mockSender.send).toHaveBeenCalledTimes(1); + expect(mockSender.send).toHaveBeenCalledWith( + expect.objectContaining({ + text: 'Secret message', + type: 'message', + recipient: expect.objectContaining({ id: 'explicit-user-id', name: '', role: 'user', isTargeted: true }), + }), + mockRef + ); + }); + + it('does not set recipient for targeted message updates', async () => { + const activity = buildIncomingMessageActivity('Hello world'); + context = buildActivityContext(activity); + + const updateActivity = new MessageActivity('Updated message') + .withId('existing-activity-id') + .withRecipient({ id: 'user-1', name: '', role: 'user' }, true); + + await context.send(updateActivity); + + expect(mockSender.send).toHaveBeenCalledTimes(1); + const sentActivity = (mockSender.send as jest.Mock).mock.calls[0][0]; + expect(sentActivity.id).toBe('existing-activity-id'); + expect(sentActivity.recipient.isTargeted).toBe(true); + }); + }); }); describe('signin/signout flow', () => { @@ -282,7 +340,7 @@ describe('ActivityContext', () => { }); it('creates new 1:1 conversation for group chat signin', async () => { - context = new ActivityContext(mockSender, { + context = new ActivityContext({ ...context, activity: { ...buildIncomingMessageActivity('Test message'), @@ -292,6 +350,7 @@ describe('ActivityContext', () => { conversationType: 'group', }, }, + activitySender: mockSender, }); mockApiClient.users.token.get.mockRejectedValueOnce( diff --git a/packages/apps/src/contexts/activity.ts b/packages/apps/src/contexts/activity.ts index da56494b6..763041ec8 100644 --- a/packages/apps/src/contexts/activity.ts +++ b/packages/apps/src/contexts/activity.ts @@ -19,9 +19,32 @@ import { ILogger } from '@microsoft/teams.common/logging'; import { IStorage } from '@microsoft/teams.common/storage'; import { ApiClient, GraphClient } from '../api'; -import { ISender, IStreamer } from '../types'; +import { IStreamer } from '../types'; +import { IActivitySender } from '../types/plugin/sender'; + +/** + * Constructor arguments for ActivityContext + * Internal implementation details not exposed in public interface + */ +export interface IActivityContextConstructorArgs { + /** + * activity sender for sending activities and creating streams + */ + activitySender: IActivitySender; + + /** + * call the next event/middleware handler + */ + next: ( + context?: IActivityContext + ) => (void | InvokeResponse) | Promise; +} -export interface IBaseActivityContextOptions = Record> { +/** + * Base activity context options + * These are the public properties exposed on the context + */ +export interface IBaseActivityContextOptions { /** * the app id of the bot */ @@ -79,21 +102,9 @@ export interface IBaseActivityContextOptions (void | InvokeResponse) | Promise; } -export type IActivityContextOptions = Record> = IBaseActivityContextOptions & TExtraCtx; +export type IActivityContextOptions = Record> = IBaseActivityContextOptions & TExtraCtx; type SignInOptions = { /** @@ -131,12 +142,19 @@ type SignInOptions = { }; export interface IBaseActivityContext = Record> - extends IBaseActivityContextOptions { + extends IBaseActivityContextOptions { /** * a stream that can emit activity chunks */ stream: IStreamer; + /** + * call the next event/middleware handler + */ + next: ( + context?: IActivityContext & TExtraCtx + ) => (void | InvokeResponse) | Promise; + /** * send an activity to the conversation * @param activity activity to send @@ -176,7 +194,7 @@ export class ActivityContext (void | InvokeResponse) | Promise; [key: string]: any; - protected _plugin: ISender; - protected _next?: ( - context?: IActivityContext - ) => (void | InvokeResponse) | Promise; + private activitySender: IActivitySender; - constructor(plugin: ISender, value: IBaseActivityContextOptions) { - Object.assign(this, value); - this._plugin = plugin; - this.stream = plugin.createStream(value.ref); + constructor(value: IBaseActivityContextOptions & IActivityContextConstructorArgs) { + // Extract activitySender and next before Object.assign to avoid overwriting methods + const { activitySender, next, ...rest } = value; + Object.assign(this, rest); + this.activitySender = activitySender; + this.next = next; + this.stream = activitySender.createStream(value.ref); this.connectionName = value.connectionName; if (value.activity.type === 'message') { @@ -213,7 +231,17 @@ export class ActivityContext; +} + +export interface IHttpServerResponse { + readonly status: number; + readonly body?: unknown; +} + +export type HttpRouteHandler = ( + request: IHttpServerRequest +) => Promise; + +/** + * Adapter interface for different HTTP frameworks + * + * Adapters handle framework-specific HTTP concerns while HttpServer + * handles Teams protocol logic (JWT validation, activity processing, etc.) + */ +// Only POST is needed today (Teams bot protocol + remote functions). +// This may become a union (e.g., 'GET' | 'POST' | ...) if the need comes up. +export type HttpMethod = 'POST'; + +export interface IHttpServerAdapter { + /** + * Register a route handler for a given HTTP method and path + * @param method HTTP method + * @param path URL path (e.g., '/api/messages') + * @param handler Pure function: ({ body, headers }) → { status, body } + */ + registerRoute(method: HttpMethod, path: string, handler: HttpRouteHandler): void; + + /** + * Serve static files from a directory + * Primarily used for serving static files like for tabs, or static pages via MessageExtensions and Dialogs + * @param path URL path prefix (e.g., '/static') + * @param directory File system directory to serve from + */ + serveStatic?(path: string, directory: string): void; + + /** + * Start the server listening to incoming requests + * Not needed if app.start() is not called + * @param port Port number to listen on + */ + start?(port: number): Promise; + + /** + * Stop the server from listening and perform any cleanup that needs to be done + */ + stop?(): Promise; +} diff --git a/packages/apps/src/http/express-adapter.spec.ts b/packages/apps/src/http/express-adapter.spec.ts new file mode 100644 index 000000000..fa4acba5b --- /dev/null +++ b/packages/apps/src/http/express-adapter.spec.ts @@ -0,0 +1,163 @@ +import fs from 'fs'; +import http from 'http'; + +import os from 'os'; +import path from 'path'; + +import supertest from 'supertest'; + +import { ExpressAdapter } from './express-adapter'; + +describe('ExpressAdapter', () => { + let server: http.Server; + let adapter: ExpressAdapter; + + afterEach(() => { + if (server) { + server.close(); + } + }); + + it('should initialize without errors', () => { + server = http.createServer(); + expect(() => { + adapter = new ExpressAdapter(server); + }).not.toThrow(); + }); + + describe('route registration and request handling', () => { + it('should handle POST requests with JSON body parsing', async () => { + server = http.createServer(); + adapter = new ExpressAdapter(server); + + const mockHandler = jest.fn(async ({ body }) => { + return { status: 200, body: { echo: (body as Record).message } }; + }); + + adapter.registerRoute('POST', '/api/messages', mockHandler); + + const response = await supertest(server) + .post('/api/messages') + .send({ message: 'hello' }) + .expect(200); + + expect(response.body).toEqual({ echo: 'hello' }); + expect(mockHandler).toHaveBeenCalled(); + }); + + it('should extract request headers correctly', async () => { + server = http.createServer(); + adapter = new ExpressAdapter(server); + + let extractedHeaders: Record | undefined; + + adapter.registerRoute('POST', '/api/test', async ({ headers }) => { + extractedHeaders = headers; + return { status: 200, body: { ok: true } }; + }); + + await supertest(server) + .post('/api/test') + .set('Authorization', 'Bearer token123') + .set('X-Custom-Header', 'custom-value') + .expect(200); + + expect(extractedHeaders).toBeDefined(); + expect(extractedHeaders!['authorization']).toBe('Bearer token123'); + expect(extractedHeaders!['x-custom-header']).toBe('custom-value'); + }); + + it('should handle errors in route handlers gracefully', async () => { + server = http.createServer(); + adapter = new ExpressAdapter(server); + + adapter.registerRoute('POST', '/api/error', async () => { + throw new Error('Handler error'); + }); + + // Express default error handler should catch this and return 500 + const response = await supertest(server) + .post('/api/error') + .expect(500); + + // Express default error handler sends HTML error page in development + expect(response.text).toContain('Error'); + }); + + it('should set Content-Type to application/json for responses', async () => { + server = http.createServer(); + adapter = new ExpressAdapter(server); + + adapter.registerRoute('POST', '/api/test', async () => { + return { status: 200, body: { data: 'test' } }; + }); + + const response = await supertest(server) + .post('/api/test') + .expect(200); + + expect(response.headers['content-type']).toMatch(/application\/json/); + }); + + }); + + describe('static file serving', () => { + it('should configure static file serving without errors', () => { + server = http.createServer(); + adapter = new ExpressAdapter(server); + + expect(() => { + adapter.serveStatic('/static', './public'); + }).not.toThrow(); + }); + + it('should serve static files from directory', async () => { + // Create a temporary directory with a test file + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'express-static-test-')); + const testHtml = path.join(tmpDir, 'index.html'); + fs.writeFileSync(testHtml, 'Test Page'); + + try { + server = http.createServer(); + adapter = new ExpressAdapter(server); + + adapter.serveStatic('/tabs/test', tmpDir); + + const response = await supertest(server) + .get('/tabs/test/index.html') + .expect(200); + + expect(response.text).toContain('Test Page'); + } finally { + // Clean up + fs.unlinkSync(testHtml); + fs.rmdirSync(tmpDir); + } + }); + + it('should serve index.html when accessing directory path with trailing slash', async () => { + // Create a temporary directory with an index.html file + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'express-static-test-')); + const indexHtml = path.join(tmpDir, 'index.html'); + fs.writeFileSync(indexHtml, 'Index Page'); + + try { + server = http.createServer(); + adapter = new ExpressAdapter(server); + + adapter.serveStatic('/tabs/test', tmpDir); + + // Accessing /tabs/test/ with trailing slash should serve index.html + const response = await supertest(server) + .get('/tabs/test/') + .expect(200); + + expect(response.text).toContain('Index Page'); + } finally { + // Clean up + fs.unlinkSync(indexHtml); + fs.rmdirSync(tmpDir); + } + }); + }); +}); diff --git a/packages/apps/src/http/express-adapter.ts b/packages/apps/src/http/express-adapter.ts new file mode 100644 index 000000000..a68dfe2f3 --- /dev/null +++ b/packages/apps/src/http/express-adapter.ts @@ -0,0 +1,126 @@ +import http from 'http'; + +import cors from 'cors'; +import express from 'express'; + +import { ConsoleLogger, ILogger } from '@microsoft/teams.common'; + +import { HttpMethod, IHttpServerAdapter, HttpRouteHandler } from './adapter'; + +/** + * Express adapter for HttpServer + * + * Handles Express-specific HTTP framework concerns: + * - Express app creation and middleware setup + * - Route registration via Express routing + * - Request/response data extraction and sending + * - Server lifecycle management + */ +export class ExpressAdapter implements IHttpServerAdapter { + // Expose Express methods for backwards compatibility + readonly get: express.Application['get']; + readonly post: express.Application['post']; + readonly patch: express.Application['patch']; + readonly put: express.Application['put']; + readonly delete: express.Application['delete']; + readonly route: express.Application['route']; + readonly use: express.Application['use']; + + protected express: express.Application; + protected server: http.Server; + protected logger: ILogger; + protected onError?: (err: Error) => void; + + constructor(server?: http.Server, options?: { logger?: ILogger; onError?: (err: Error) => void }) { + this.express = express(); + this.server = server || http.createServer(); + this.server.on('request', this.express); + this.logger = options?.logger ?? new ConsoleLogger('ExpressAdapter'); + this.onError = options?.onError; + + // Bind Express methods + this.get = this.express.get.bind(this.express); + this.post = this.express.post.bind(this.express); + this.patch = this.express.patch.bind(this.express); + this.put = this.express.put.bind(this.express); + this.delete = this.express.delete.bind(this.express); + this.route = this.express.route.bind(this.express); + this.use = this.express.use.bind(this.express); + } + + /** + * Register a route handler for a given HTTP method and path + */ + registerRoute(method: HttpMethod, path: string, handler: HttpRouteHandler): void { + if (method !== 'POST') { + throw new Error(`Unsupported HTTP method: ${method}`); + } + + const expressHandler = async ( + req: express.Request, + res: express.Response, + next: express.NextFunction + ) => { + try { + const response = await handler({ + body: req.body, + headers: req.headers as Record + }); + res.status(response.status).send(response.body); + } catch (err) { + next(err); + } + }; + + this.express.post(path, express.json(), expressHandler); + } + + /** + * Start the server listening on the specified port + */ + async start(port: number): Promise { + return new Promise((resolve, reject) => { + // Handle startup errors + this.server.once('error', (err) => { + if (this.onError) { + this.onError(err); + } + reject(err); + }); + + this.server.listen(port, () => { + this.logger.info(`listening on port ${port} 🚀`); + + // Set up persistent error listener after startup + if (this.onError) { + this.server.on('error', this.onError); + } + + resolve(); + }); + }); + } + + /** + * Serve static files from a directory + */ + serveStatic(path: string, directory: string): void { + this.express.use(path, cors(), express.static(directory)); + } + + /** + * Stop the server and close all connections + */ + async stop(): Promise { + return new Promise((resolve, reject) => { + this.server.close((err) => { + if (err) { + reject(err); + } else { + this.logger.info('server stopped'); + resolve(); + } + }); + }); + } +} diff --git a/packages/apps/src/http/http-server.spec.ts b/packages/apps/src/http/http-server.spec.ts new file mode 100644 index 000000000..dafdfd2aa --- /dev/null +++ b/packages/apps/src/http/http-server.spec.ts @@ -0,0 +1,222 @@ +import { HttpMethod, IHttpServerAdapter, HttpRouteHandler } from './adapter'; +import { HttpServer } from './http-server'; + +class MockAdapter implements IHttpServerAdapter { + routes: Array<{ method: HttpMethod; path: string; handler: HttpRouteHandler }> = []; + started = false; + stopped = false; + + registerRoute(method: HttpMethod, path: string, handler: HttpRouteHandler): void { + this.routes.push({ method, path, handler }); + } + + async start(_port: number): Promise { + this.started = true; + } + + async stop(): Promise { + this.stopped = true; + } + + /** Simulate a request to a registered route */ + async simulateRequest(path: string, body: unknown, headers: Record = {}) { + const route = this.routes.find(r => r.path === path); + if (!route) throw new Error(`No route registered for ${path}`); + return route.handler({ body, headers }); + } +} + +const defaultOptions = { skipAuth: true, messagingEndpoint: '/api/messages' }; + +describe('HttpServer', () => { + let adapter: MockAdapter; + let server: HttpServer; + + beforeEach(() => { + adapter = new MockAdapter(); + server = new HttpServer(adapter, defaultOptions); + }); + + describe('initialize', () => { + it('should register POST /api/messages route', async () => { + await server.initialize({ credentials: undefined }); + + expect(adapter.routes).toHaveLength(1); + expect(adapter.routes[0].method).toBe('POST'); + expect(adapter.routes[0].path).toBe('/api/messages'); + }); + + it('should register route with custom messaging endpoint', async () => { + const customServer = new HttpServer(adapter, { skipAuth: true, messagingEndpoint: '/bot/incoming' }); + await customServer.initialize({ credentials: undefined }); + + expect(adapter.routes).toHaveLength(1); + expect(adapter.routes[0].path).toBe('/bot/incoming'); + expect(customServer.messagingEndpoint).toBe('/bot/incoming'); + }); + + it('should only initialize once', async () => { + await server.initialize({ credentials: undefined }); + await server.initialize({ credentials: undefined }); + + expect(adapter.routes).toHaveLength(1); + }); + }); + + describe('handleRequest', () => { + beforeEach(async () => { + await server.initialize({ credentials: undefined }); + }); + + it('should process activity and return response', async () => { + server.onRequest = jest.fn().mockResolvedValue({ status: 200, body: { text: 'ok' } }); + + const result = await adapter.simulateRequest('/api/messages', { + type: 'message', + serviceUrl: 'https://smba.trafficmanager.net/teams', + }); + + expect(result.status).toBe(200); + expect(result.body).toEqual({ text: 'ok' }); + expect(server.onRequest).toHaveBeenCalledWith( + expect.objectContaining({ + body: expect.objectContaining({ type: 'message' }), + token: expect.objectContaining({ from: 'azure' }), + }) + ); + }); + + it('should create dummy token when auth is skipped', async () => { + server.onRequest = jest.fn().mockResolvedValue({ status: 200 }); + + await adapter.simulateRequest('/api/messages', { + serviceUrl: 'https://test.botframework.com', + }); + + const event = (server.onRequest as jest.Mock).mock.calls[0][0]; + expect(event.token.appId).toBe(''); + expect(event.token.from).toBe('azure'); + expect(event.token.serviceUrl).toBe('https://test.botframework.com'); + }); + + it('should return 500 when onRequest is not set', async () => { + server.onRequest = undefined; + + const result = await adapter.simulateRequest('/api/messages', { type: 'message' }); + + expect(result.status).toBe(500); + expect(result.body).toEqual({ error: 'Internal server error' }); + }); + + it('should return 500 when onRequest throws', async () => { + server.onRequest = jest.fn().mockRejectedValue(new Error('processing failed')); + + const result = await adapter.simulateRequest('/api/messages', { type: 'message' }); + + expect(result.status).toBe(500); + expect(result.body).toEqual({ error: 'Internal server error' }); + }); + + it('should default response status to 200', async () => { + server.onRequest = jest.fn().mockResolvedValue({ body: 'ok' }); + + const result = await adapter.simulateRequest('/api/messages', { type: 'message' }); + + expect(result.status).toBe(200); + }); + }); + + describe('handleRequest with auth', () => { + let authServer: HttpServer; + + beforeEach(async () => { + authServer = new HttpServer(adapter, { ...defaultOptions, skipAuth: false }); + await authServer.initialize({ + credentials: { clientId: 'test-app', tenantId: 'test-tenant' } as any, + }); + }); + + it('should return 401 when authorization header is missing', async () => { + const result = await adapter.simulateRequest('/api/messages', { type: 'message' }, {}); + + expect(result.status).toBe(401); + expect(result.body).toEqual({ error: 'Missing authorization header' }); + }); + }); + + describe('start', () => { + it('should delegate to adapter.start()', async () => { + await server.start(3978); + + expect(adapter.started).toBe(true); + }); + + it('should parse string port to number', async () => { + const startSpy = jest.spyOn(adapter, 'start'); + + await server.start('4000'); + + expect(startSpy).toHaveBeenCalledWith(4000); + }); + + it('should throw when adapter does not implement start', async () => { + const noStartAdapter = { registerRoute: jest.fn() } as any; + const noStartServer = new HttpServer(noStartAdapter, defaultOptions); + + await expect(noStartServer.start(3000)).rejects.toThrow('Adapter does not implement start()'); + }); + }); + + describe('stop', () => { + it('should delegate to adapter.stop()', async () => { + await server.stop(); + + expect(adapter.stopped).toBe(true); + }); + + it('should warn and skip when adapter does not implement stop', async () => { + const noStopAdapter = { registerRoute: jest.fn() } as any; + const noStopServer = new HttpServer(noStopAdapter, defaultOptions); + + // Should not throw + await noStopServer.stop(); + }); + }); + + describe('registerRoute', () => { + it('should pass through to adapter', () => { + const handler = jest.fn(); + + server.registerRoute('POST', '/custom', handler); + + expect(adapter.routes).toContainEqual( + expect.objectContaining({ method: 'POST', path: '/custom', handler }) + ); + }); + }); + + describe('serveStatic', () => { + it('should pass through to adapter when supported', () => { + const serveStaticSpy = jest.fn(); + (adapter as any).serveStatic = serveStaticSpy; + + server.serveStatic('/static', '/dist'); + + expect(serveStaticSpy).toHaveBeenCalledWith('/static', '/dist'); + }); + + it('should no-op when adapter does not support serveStatic', () => { + const minimalAdapter = { registerRoute: jest.fn() } as any; + const minimalServer = new HttpServer(minimalAdapter, defaultOptions); + + // Should not throw + minimalServer.serveStatic('/static', '/dist'); + }); + }); + + describe('adapter', () => { + it('should expose the underlying adapter', () => { + expect(server.adapter).toBe(adapter); + }); + }); +}); diff --git a/packages/apps/src/http/http-server.ts b/packages/apps/src/http/http-server.ts new file mode 100644 index 000000000..4b1cbc441 --- /dev/null +++ b/packages/apps/src/http/http-server.ts @@ -0,0 +1,220 @@ +import { + Credentials, + InvokeResponse, + IToken +} from '@microsoft/teams.api'; + +import { ConsoleLogger, ILogger } from '@microsoft/teams.common'; + +import { IActivityEvent, ICoreActivity } from '../events'; +import { ServiceTokenValidator } from '../middleware/auth/service-token-validator'; + +import { HttpMethod, IHttpServerAdapter, IHttpServerRequest, IHttpServerResponse, HttpRouteHandler } from './adapter'; + +type AuthResult = + | { success: true; token: IToken } + | { success: false; error: string }; + +export type HttpServerOptions = { + readonly skipAuth?: boolean; + readonly logger?: ILogger; + /** + * URL path for the Teams messaging endpoint + */ + readonly messagingEndpoint: string; +}; + +/** + * Public interface for HttpServer, exposed via DI for plugins + */ +export interface IHttpServer { + handleRequest(request: IHttpServerRequest): Promise; + readonly adapter: IHttpServerAdapter; + readonly messagingEndpoint: string; +} + +/** + * Configurable HTTP server for receiving Teams activities + */ +export class HttpServer implements IHttpServer { + /** + * Callback invoked when a valid activity request arrives + * App should set this to process activities + */ + onRequest?: (event: IActivityEvent) => Promise; + + protected logger: ILogger; + protected credentials?: Credentials; + protected skipAuth: boolean; + protected initialized: boolean = false; + protected serviceTokenValidator?: ServiceTokenValidator; + + private _adapter: IHttpServerAdapter; + private _messagingEndpoint: string; + + /** + * Get the underlying adapter + * Useful for plugins that need adapter-specific features + */ + get adapter(): IHttpServerAdapter { + return this._adapter; + } + + /** + * Get the messaging endpoint path + */ + get messagingEndpoint(): string { + return this._messagingEndpoint; + } + + constructor(adapter: IHttpServerAdapter, options: HttpServerOptions) { + this._adapter = adapter; + this.skipAuth = options.skipAuth ?? false; + this.logger = options.logger ?? new ConsoleLogger('HttpServer'); + this._messagingEndpoint = options.messagingEndpoint; + } + + /** + * Initialize the server with dependencies (registers routes, prepares adapter) + * Can be called multiple times - only initializes once + * Called by App.initialize() + */ + async initialize(deps: { + credentials?: Credentials; + }) { + if (this.initialized) { + this.logger.debug('HttpServer already initialized, skipping'); + return; + } + + this.credentials = deps.credentials; + + // Initialize service token validator if credentials provided and auth not skipped + if (this.credentials && !this.skipAuth) { + this.serviceTokenValidator = new ServiceTokenValidator( + this.credentials.clientId, + this.credentials.tenantId, + undefined, // serviceUrl will be validated from activity body + this.logger + ); + } + + // Register Teams bot endpoint (POST only) + this._adapter.registerRoute('POST', this._messagingEndpoint, async (request) => { + return this.handleRequest(request); + }); + + this.initialized = true; + } + + /** + * Start the HTTP server + * Called by App.start() + */ + async start(port: number | string) { + const portNumber = typeof port === 'string' ? parseInt(port, 10) : port; + if (!this._adapter.start) { + throw new Error( + 'Adapter does not implement start(). ' + + 'Either implement start() in your adapter, or manage server lifecycle manually.' + ); + } + await this._adapter.start(portNumber); + } + + /** + * Stop the HTTP server + * Called by App.stop() if implemented + */ + async stop() { + if (!this._adapter.stop) { + this.logger.warn('Adapter does not implement stop(). Skipping server shutdown.'); + return; + } + await this._adapter.stop(); + } + + /** + * Register a route handler with the adapter + * Used by app.function() and other app methods + */ + registerRoute(method: HttpMethod, path: string, handler: HttpRouteHandler) { + this._adapter.registerRoute(method, path, handler); + } + + /** + * Serve static files from a directory + * Used by app.tab() and other app methods + */ + serveStatic(path: string, directory: string) { + if (this._adapter.serveStatic) { + this._adapter.serveStatic(path, directory); + } + } + + /** + * Handle incoming activity request + * Validates JWT, dispatches to app, returns response + */ + async handleRequest(request: IHttpServerRequest): Promise { + try { + const body = request.body as ICoreActivity; + this.logger.debug('Handling activity', body); + + const auth = await this.authorize(request.headers, body); + if (!auth.success) { + return { status: 401, body: { error: auth.error } }; + } + + if (!this.onRequest) { + throw new Error('HttpServer.onRequest callback not set'); + } + + const response = await this.onRequest({ body, token: auth.token }); + return { status: response.status || 200, body: response.body }; + } catch (err) { + this.logger.error('Error processing activity:', err); + return { status: 500, body: { error: 'Internal server error' } }; + } + } + + /** + * Authorize the request by validating the JWT token. + */ + protected async authorize( + headers: Record, + body: ICoreActivity + ): Promise { + if (this.skipAuth || !this.credentials) { + return { + success: true, + token: { + appId: '', + from: 'azure', + fromId: '', + serviceUrl: body.serviceUrl || '', + isExpired: () => false, + }, + }; + } + + const raw = headers['authorization']; + const authHeader = Array.isArray(raw) ? raw[0] : raw; + if (!authHeader) { + return { success: false, error: 'Missing authorization header' }; + } + + if (!this.serviceTokenValidator) { + throw new Error('Service token validator not initialized - credentials required'); + } + + try { + const token = await this.serviceTokenValidator.check(authHeader, body); + return { success: true, token }; + } catch (err) { + this.logger.error('JWT validation failed', err); + return { success: false, error: 'JWT validation failed' }; + } + } + +} diff --git a/packages/apps/src/http/http-stream.spec.ts b/packages/apps/src/http/http-stream.spec.ts new file mode 100644 index 000000000..f93e313c5 --- /dev/null +++ b/packages/apps/src/http/http-stream.spec.ts @@ -0,0 +1,161 @@ +import { HttpStream } from './http-stream'; + +describe('HttpStream', () => { + let client: any; + let ref: any; + let logger: any; + + beforeEach(() => { + client = { + conversations: { + activities: jest.fn().mockReturnValue({ + create: jest.fn(), + update: jest.fn(), + }), + }, + }; + + ref = { + bot: { id: 'bot', name: 'Bot' }, + conversation: { id: 'conversation-id' }, + }; + + logger = { + debug: jest.fn(), + warn: jest.fn(), + error: jest.fn(), + child: () => logger, + }; + }); + + jest.useFakeTimers(); + + function mockCreate(successAfter = 0) { + let calls = 0; + client.conversations.activities().create.mockImplementation( + async (_activity: any) => { + calls++; + if (calls <= successAfter) { + throw new Error('timeout'); + } + + return { _activity, id: `activity-${calls}` }; + } + ); + return () => calls; + } + + test('stream multiple emits with timer', async () => { + const stream = new HttpStream(client, ref, logger); + mockCreate(); + + for (let i = 0; i < 12; i++) { + stream.emit(`Message ${i + 1}`); + } + + // Initial emit triggers immediate flush + expect(client.conversations.activities().create).toHaveBeenCalledTimes(1); + + await jest.advanceTimersByTimeAsync(200); + // next flush will be after 500ms, so no new calls yet + expect(client.conversations.activities().create).toHaveBeenCalledTimes(1); + stream.emit('Message 13'); + + await jest.advanceTimersByTimeAsync(300); + // 500ms passed since first emit, second flush should happen + expect(client.conversations.activities().create).toHaveBeenCalledTimes(2); + stream.emit('Message 14'); + + await jest.advanceTimersByTimeAsync(500); + // another 500ms passed, third flush should happen + expect(client.conversations.activities().create).toHaveBeenCalledTimes(3); + + const calls = client.conversations.activities().create.mock.calls; + expect(calls[0][0].text).toBe('Message 1'); + expect(calls[1][0].text).toBe('Message 1Message 2Message 3Message 4Message 5Message 6Message 7Message 8Message 9Message 10Message 11'); + expect(calls[2][0].text).toBe('Message 1Message 2Message 3Message 4Message 5Message 6Message 7Message 8Message 9Message 10Message 11Message 12Message 13Message 14'); + }); + + + test('stream error handled gracefully', async () => { + mockCreate(1); + const stream = new HttpStream(client, ref, logger); + + stream.emit('Test message'); + expect(client.conversations.activities().create).toHaveBeenCalledTimes(1); + + // retry after 500ms + await jest.advanceTimersByTimeAsync(500); + + expect(client.conversations.activities().create).toHaveBeenCalledTimes(2); + const calls = client.conversations.activities().create.mock.calls; + expect(calls[0][0].text).toBe('Test message'); + expect(calls[1][0].text).toBe('Test message'); + const res = await stream.close(); + expect(res).toBeDefined(); + }); + + test('update sends typing activity', async () => { + + const stream = new HttpStream(client, ref, logger); + + stream.update('Thinking...'); + + // resolve promise microtask queue + await jest.runAllTicks(); + + const calls = client.conversations.activities().create.mock.calls; + expect(calls[0][0].type).toBe('typing'); + expect(calls[0][0].text).toBe('Thinking...'); + expect(calls[0][0].channelData?.streamType).toBe('informative'); + expect(stream['index']).toBe(0); + }); + + test('stream all timeouts fail handled gracefully', async () => { + const getCallCount = mockCreate(10); + + const stream = new HttpStream(client, ref, logger); + + stream.emit('Test message with all timeouts'); + + // run all timers to exhaust retries + await jest.runAllTimersAsync(); + expect(getCallCount()).toBe(5); + + const res = await stream.close(); + expect(res).toBeUndefined(); + }); + + test('sequence of update and emit', async () => { + + const stream = new HttpStream(client, ref, logger); + + stream.update('Preparing...'); + stream.emit('Final message'); + + await jest.advanceTimersByTimeAsync(500); + + const calls = client.conversations.activities().create.mock.calls; + expect(calls.length).toBe(2); + expect(calls[0][0].type).toBe('typing'); + expect(calls[1][0].text).toContain('Final message'); + + }); + + test('close times out if queue never flushes and id not set', async () => { + const stream = new HttpStream(client, ref, logger); + + stream.emit('Message that will not flush'); + + // promise not resolved yet, so no id set + const res = stream.close(); + + // Fast-forward timers to trigger timeout + await jest.runAllTimersAsync(); + expect(logger.warn).toHaveBeenCalledWith( + 'Timeout while waiting for id and queue to flush' + ); + const result = await res; + expect(result).toBeUndefined(); + }); +}); diff --git a/packages/apps/src/plugins/http/stream.ts b/packages/apps/src/http/http-stream.ts similarity index 66% rename from packages/apps/src/plugins/http/stream.ts rename to packages/apps/src/http/http-stream.ts index bc8373c04..01ad1bfa4 100644 --- a/packages/apps/src/plugins/http/stream.ts +++ b/packages/apps/src/http/http-stream.ts @@ -13,9 +13,24 @@ import { } from '@microsoft/teams.api'; import { ConsoleLogger, EventEmitter, ILogger } from '@microsoft/teams.common'; -import { IStreamer, IStreamerEvents } from '../../types'; -import { promises } from '../../utils'; - +import { IStreamer, IStreamerEvents } from '../types'; +import { promises } from '../utils'; + +/** + * HTTP-based streaming implementation for Microsoft Teams activities. + * + * Allows sending typing indicators and messages in chunks to Teams. + * Queues incoming activities and flushes them periodically to avoid + * rate limits. + * + * Flow: + * 1. `emit()` adds activities to the queue and starts a flush if none scheduled. + * 2. `_flush()` starts by cancelling any pending flush, then processes up to 10 queued activities under a lock. + * 3. Informative typing updates are sent immediately. + * 4. Message text is combined and sent as a typing activity. + * 5. `_flush()` schedules another flush if more items remain in queue. + * 6. `close()` waits for the queue to empty and sends the final message activity. + */ export class HttpStream implements IStreamer { readonly events = new EventEmitter(); @@ -33,18 +48,19 @@ export class HttpStream implements IStreamer { private _timeout?: NodeJS.Timeout; private _logger: ILogger; private _flushing: boolean = false; + private readonly _totalTimeout = 30000; // 30 seconds constructor(client: Client, ref: ConversationReference, logger?: ILogger) { this.client = client; this.ref = ref; - this._logger = logger?.child('stream') || new ConsoleLogger('@teams/http/stream'); + this._logger = logger?.child('stream') || new ConsoleLogger('@teams/http-stream'); } + /** + * Emit a new activity or text to the stream. + * @param activity Activity object or string message. + */ emit(activity: Partial | string) { - if (this._timeout) { - clearTimeout(this._timeout); - this._timeout = undefined; - } if (typeof activity === 'string') { activity = { @@ -54,9 +70,17 @@ export class HttpStream implements IStreamer { } this.queue.push(activity); - this._timeout = setTimeout(this.flush.bind(this), 500); + + // Start flush if not already scheduled + if (!this._timeout) { + this.flush(); + } } + /** + * Send a typing/status update without adding to the main text. + * @param text Status text (ex. "Thinking...") + */ update(text: string) { this.emit({ type: 'typing', @@ -65,6 +89,10 @@ export class HttpStream implements IStreamer { }); } + /** + * Close the stream by sending the final message. + * Waits for all queued activities to flush. + */ async close() { if (!this.index && !this.queue.length && !this._flushing) { this._logger.debug('closed with no content'); @@ -76,8 +104,16 @@ export class HttpStream implements IStreamer { return this._result; } - while (!this.id || this.queue.length) { - await new Promise((resolve) => setTimeout(resolve, 200)); + // Wait until all queued activities are flushed + const start = Date.now(); + + while (this.queue.length || !this.id) { + if (Date.now() - start > this._totalTimeout) { + this._logger.warn('Timeout while waiting for id and queue to flush'); + return; + } + this._logger.debug('waiting for id to be set or queue to be empty'); + await new Promise((resolve) => setTimeout(resolve, 100)); } if (this.text === '' && !this.attachments.length) { @@ -85,6 +121,7 @@ export class HttpStream implements IStreamer { return; } + // Build final message activity const activity = new MessageActivity(this.text) .withId(this.id) .addAttachments(...this.attachments) @@ -98,6 +135,7 @@ export class HttpStream implements IStreamer { this.events.emit('close', res); + // Reset internal state this.index = 0; this.id = undefined; this.text = ''; @@ -109,6 +147,10 @@ export class HttpStream implements IStreamer { return res; } + /** + * Flush queued activities. + * Processes up to 10 items at a time. + */ protected async flush() { // if locked or no queue, return early if (!this.queue.length || this._flushing) return; @@ -170,30 +212,41 @@ export class HttpStream implements IStreamer { await this.pushStreamChunk(activity); } + // Schedule another flush if queue is not empty if (this.queue.length) { this._timeout = setTimeout(this.flush.bind(this), 500); } + } catch (err) { + this._logger.error(err, 'flush failed'); } finally { this._flushing = false; } } + /** + * Push a new chunk to the stream. + * @param activity TypingActivity to send. + */ protected async pushStreamChunk(activity: TypingActivity) { - if (this.id) { - activity.id = this.id; - } - activity.addStreamUpdate(this.index + 1); - - const res = await promises.retry(() => this.send(activity as ActivityParams), { - logger: this._logger - }); - this.events.emit('chunk', res); - this.index++; - if (!this.id) { - this.id = res.id; - } + if (this.id) { + activity.id = this.id; + } + activity.addStreamUpdate(this.index + 1); + + const res = await promises.retry(() => this.send(activity as ActivityParams), { + logger: this._logger + }); + this.events.emit('chunk', res); + this.index++; + if (!this.id) { + this.id = res.id; + } } + /** + * Send or update a streaming activity + * @param activity ActivityParams to send. + */ protected async send(activity: ActivityParams) { activity = { ...activity, diff --git a/packages/apps/src/http/index.ts b/packages/apps/src/http/index.ts new file mode 100644 index 000000000..0d3bc2fe7 --- /dev/null +++ b/packages/apps/src/http/index.ts @@ -0,0 +1,4 @@ +// Public API exports +export { HttpMethod, IHttpServerAdapter, IHttpServerRequest, IHttpServerResponse, HttpRouteHandler } from './adapter'; +export { ExpressAdapter } from './express-adapter'; +export { IHttpServer } from './http-server'; diff --git a/packages/apps/src/index.ts b/packages/apps/src/index.ts index e58521538..a4b22701c 100644 --- a/packages/apps/src/index.ts +++ b/packages/apps/src/index.ts @@ -5,3 +5,6 @@ export * from './contexts'; export * from './oauth'; export * from './events'; export * as manifest from './manifest'; + +// HTTP infrastructure - public API +export * from './http'; diff --git a/packages/apps/src/middleware/auth/jwt-validator.spec.ts b/packages/apps/src/middleware/auth/jwt-validator.spec.ts index 60398f969..6c7896f6a 100644 --- a/packages/apps/src/middleware/auth/jwt-validator.spec.ts +++ b/packages/apps/src/middleware/auth/jwt-validator.spec.ts @@ -2,7 +2,7 @@ import crypto from 'crypto'; import jwt from 'jsonwebtoken'; -import { JwtValidator, createEntraTokenValidator, createServiceTokenValidator } from './jwt-validator'; +import { JwtValidator, createEntraTokenValidator } from './jwt-validator'; // Generate test RSA key pair const { privateKey, publicKey } = crypto.generateKeyPairSync('rsa', { @@ -160,6 +160,51 @@ describe('JwtValidator', () => { expect(result).toEqual(expect.objectContaining(mockTokenPayload)); }); + + it.each([ + ['clientId', mockClientId], + ['api://botid-{clientId}', `api://botid-${mockClientId}`], + ['api://{clientId}', `api://${mockClientId}`], + ])('should accept %s audience', async (_label, aud) => { + const validator = new JwtValidator({ + clientId: mockClientId, + tenantId: mockTenantId, + jwksUriOptions: { type: 'tenantId' } + }); + + const token = createTestToken({ ...mockTokenPayload, aud }); + const result = await validator.validateAccessToken(token); + + expect(result).not.toBeNull(); + }); + + it('should accept custom audience values', async () => { + const customAudience = 'api://my-custom-app.contoso.com/test-client-id'; + const validator = new JwtValidator({ + clientId: mockClientId, + tenantId: mockTenantId, + audience: [customAudience], + jwksUriOptions: { type: 'tenantId' } + }); + + const token = createTestToken({ ...mockTokenPayload, aud: customAudience }); + const result = await validator.validateAccessToken(token); + + expect(result).not.toBeNull(); + }); + + it('should reject unrecognized audience', async () => { + const validator = new JwtValidator({ + clientId: mockClientId, + tenantId: mockTenantId, + jwksUriOptions: { type: 'tenantId' } + }, mockLogger); + + const token = createTestToken({ ...mockTokenPayload, aud: 'api://wrong-client-id' }); + const result = await validator.validateAccessToken(token); + + expect(result).toBeNull(); + }); }); describe('issuer validation', () => { @@ -257,6 +302,23 @@ describe('JwtValidator', () => { ); }); + it.each([ + ['empty object', {} as any], + ['allowedTenantIds: undefined', { allowedTenantIds: undefined }], + ['allowedTenantIds: []', { allowedTenantIds: [] }], + ])('should skip validation when validateIssuer is %s', async (_label, validateIssuer) => { + const validator = new JwtValidator({ + clientId: mockClientId, + tenantId: 'common', + jwksUriOptions: { type: 'tenantId' }, + validateIssuer + }); + + const result = await validator.validateAccessToken(validToken); + + expect(result).toEqual(expect.objectContaining(mockTokenPayload)); + }); + it('should reject token with missing issuer', async () => { const validator = new JwtValidator({ clientId: mockClientId, @@ -571,45 +633,22 @@ describe('JwtValidator', () => { expect(validator.options.validateScope).toBeUndefined(); }); - }); - - describe('createServiceTokenValidator', () => { - it('should create validator with minimal options', () => { - const validator = createServiceTokenValidator(mockClientId, mockTenantId); - - expect(validator).toBeInstanceOf(JwtValidator); - expect(validator.options.clientId).toBe(mockClientId); - expect(validator.options.tenantId).toBe(mockTenantId); - expect(validator.options.validateIssuer).toEqual({ - allowedIssuer: 'https://api.botframework.com' - }); - expect(validator.options.jwksUriOptions).toEqual({ - type: 'uri', - uri: 'https://login.botframework.com/v1/.well-known/keys' - }); - }); - it('should create validator with service URL', () => { - const serviceUrl = 'https://example.com/api'; - const validator = createServiceTokenValidator(mockClientId, mockTenantId, serviceUrl); - - expect(validator.options.validateServiceUrl).toEqual({ - expectedServiceUrl: serviceUrl + it('should pass applicationIdUri as audience', () => { + const validator = createEntraTokenValidator(mockTenantId, mockClientId, { + applicationIdUri: 'api://my-app.contoso.com/test-client-id' }); - }); - - it('should create validator without service URL validation when not provided', () => { - const validator = createServiceTokenValidator(mockClientId, mockTenantId); - expect(validator.options.validateServiceUrl).toBeUndefined(); + expect(validator.options.audience).toEqual(['api://my-app.contoso.com/test-client-id']); }); - it('should create validator with logger', () => { - const validator = createServiceTokenValidator(mockClientId, mockTenantId, undefined, mockLogger); + it('should not set audience when applicationIdUri is not provided', () => { + const validator = createEntraTokenValidator(mockTenantId, mockClientId); - expect(validator).toBeInstanceOf(JwtValidator); + expect(validator.options.audience).toBeUndefined(); }); }); + }); describe('error handling and logging', () => { diff --git a/packages/apps/src/middleware/auth/jwt-validator.ts b/packages/apps/src/middleware/auth/jwt-validator.ts index 8d4693e2d..83f317c14 100644 --- a/packages/apps/src/middleware/auth/jwt-validator.ts +++ b/packages/apps/src/middleware/auth/jwt-validator.ts @@ -13,6 +13,10 @@ export interface IJwtValidationOptions { /** Required: Application/Client ID for audience validation */ clientId: string; + // Additional audience values to accept beyond the defaults + // (clientId, api://clientId, api://botid-clientId) + audience?: string[]; + /** * This may be 'common', 'organizations', 'consumers' for multi-tenant apps, * or a specific tenant ID for single-tenant apps. @@ -73,7 +77,9 @@ export class JwtValidator { const verifyOptions: jwt.VerifyOptions = { audience: [ this.options.clientId, + `api://botid-${this.options.clientId}`, `api://${this.options.clientId}`, + ...(this.options.audience ?? []), ], issuer: undefined, ignoreExpiration: false, @@ -162,46 +168,55 @@ export class JwtValidator { } private validateIssuer(iss: string | undefined): void { - if (!this.options.validateIssuer) { - return; // No issuer validation configured - } - if (!iss) { - throw new Error('Token missing issuer claim'); + const validateIssuer = this.options.validateIssuer; + if (!validateIssuer) { + return; } - if ('allowedIssuer' in this.options.validateIssuer) { - // Validate against a specific allowed issuer - if (iss !== this.options.validateIssuer.allowedIssuer) { - throw new Error(`Token issuer '${iss}' does not match allowed issuer '${this.options.validateIssuer.allowedIssuer}'`); + // Check for allowedIssuer (exact match validation) + if ('allowedIssuer' in validateIssuer) { + if (!validateIssuer.allowedIssuer) { + return; + } + if (!iss) { + throw new Error('Token missing issuer claim'); + } + if (iss !== validateIssuer.allowedIssuer) { + throw new Error(`Token issuer '${iss}' does not match allowed issuer '${validateIssuer.allowedIssuer}'`); } - return; } - if (!this.options.tenantId) { - return; - } + // Check for allowedTenantIds (tenant-based validation) + if ('allowedTenantIds' in validateIssuer) { + if (!validateIssuer.allowedTenantIds?.length) { + return; + } + + if (!iss) { + throw new Error('Token missing issuer claim'); + } - const isMultiTenant = ['common', 'organizations', 'consumers'].includes(this.options.tenantId); - const allowedTenantIds = []; - if (isMultiTenant) { - if (this.options.validateIssuer.allowedTenantIds) { - // find which tenant ids are not 'common', 'organizations', or 'consumers' - for (const tenantId of this.options.validateIssuer.allowedTenantIds) { + if (!this.options.tenantId) { + return; + } + + const isMultiTenant = ['common', 'organizations', 'consumers'].includes(this.options.tenantId); + const allowedTenantIds: string[] = []; + if (isMultiTenant) { + for (const tenantId of validateIssuer.allowedTenantIds) { if (!['common', 'organizations', 'consumers'].includes(tenantId)) { allowedTenantIds.push(tenantId); } } + } else { + // For single-tenant apps, only allow tokens issued by this app's tenant + allowedTenantIds.push(this.options.tenantId); + } + + if (allowedTenantIds.length === 0) { + return; } - } else { - // For single-tenant apps, only allow tokens issued by this app's tenant - // (ignore allowedTenantIds option for single-tenant apps) - allowedTenantIds.push(this.options.tenantId); - } - if (allowedTenantIds.length === 0) { - return; // No allowed tenant IDs configured, so no validation needed - } else { - // Validate against allowed tenant IDs if (!allowedTenantIds.some((tenantId) => iss.startsWith(`https://login.microsoftonline.com/${tenantId}/`))) { throw new Error(`Token issuer '${iss}' not in allowed tenant IDs: ${allowedTenantIds.join(', ')}`); } @@ -251,12 +266,14 @@ export const createEntraTokenValidator = ( options?: { allowedTenantIds?: string[]; requiredScope?: string; + applicationIdUri?: string; logger?: ILogger }, ) => { return new JwtValidator({ clientId, tenantId, + audience: options?.applicationIdUri ? [options.applicationIdUri] : undefined, validateIssuer: { allowedTenantIds: options?.allowedTenantIds }, @@ -267,20 +284,3 @@ export const createEntraTokenValidator = ( }, options?.logger); }; -export const createServiceTokenValidator = ( - appId: string, - tenantId?: string, - serviceUrl?: string, - logger?: ILogger -) => { - return new JwtValidator({ - clientId: appId, - tenantId, - validateIssuer: { allowedIssuer: 'https://api.botframework.com' }, - validateServiceUrl: serviceUrl ? { expectedServiceUrl: serviceUrl } : undefined, - jwksUriOptions: { - type: 'uri', - uri: 'https://login.botframework.com/v1/.well-known/keys' - }, - }, logger); -}; \ No newline at end of file diff --git a/packages/apps/src/middleware/auth/remote-function-validator.spec.ts b/packages/apps/src/middleware/auth/remote-function-validator.spec.ts new file mode 100644 index 000000000..2bbd24345 --- /dev/null +++ b/packages/apps/src/middleware/auth/remote-function-validator.spec.ts @@ -0,0 +1,211 @@ +import { ConsoleLogger } from '@microsoft/teams.common'; + +import { RemoteFunctionValidator } from './remote-function-validator'; + +describe('RemoteFunctionValidator', () => { + const mockLogger = { + debug: jest.fn(), + info: jest.fn(), + warn: jest.fn(), + error: jest.fn(), + child: jest.fn().mockReturnThis() + } as unknown as ConsoleLogger; + + const mockEntraValidator = { + validateAccessToken: jest.fn() + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('check', () => { + it('should validate token and return client context', async () => { + const validator = new RemoteFunctionValidator(mockEntraValidator, mockLogger); + + const mockPayload = { + appId: 'app-123', + tid: 'tenant-123', + oid: 'user-123', + name: 'Test User' + }; + + mockEntraValidator.validateAccessToken.mockResolvedValue(mockPayload); + + const headers = { + 'authorization': 'Bearer valid-token', + 'x-teams-app-session-id': 'session-123', + 'x-teams-page-id': 'page-123', + 'x-teams-channel-id': 'channel-123', + 'x-teams-chat-id': 'chat-123', + 'x-teams-meeting-id': 'meeting-123', + 'x-teams-message-id': 'message-123', + 'x-teams-sub-page-id': 'subpage-123', + 'x-teams-team-id': 'team-123' + }; + + const result = await validator.check(headers); + + expect(result).toEqual({ + appId: 'app-123', + appSessionId: 'session-123', + authToken: 'valid-token', + channelId: 'channel-123', + chatId: 'chat-123', + meetingId: 'meeting-123', + messageId: 'message-123', + pageId: 'page-123', + subPageId: 'subpage-123', + teamId: 'team-123', + tenantId: 'tenant-123', + userId: 'user-123', + userName: 'Test User' + }); + + expect(mockEntraValidator.validateAccessToken).toHaveBeenCalledWith('valid-token'); + }); + + it('should return null if pageId is missing', async () => { + const validator = new RemoteFunctionValidator(mockEntraValidator, mockLogger); + + const headers = { + 'authorization': 'Bearer valid-token', + 'x-teams-app-session-id': 'session-123' + // x-teams-page-id missing + }; + + const result = await validator.check(headers); + + expect(result).toBeNull(); + expect(mockLogger.debug).toHaveBeenCalledWith('unauthorized - missing required headers or invalid token'); + }); + + it('should return null if appSessionId is missing', async () => { + const validator = new RemoteFunctionValidator(mockEntraValidator, mockLogger); + + const headers = { + 'authorization': 'Bearer valid-token', + 'x-teams-page-id': 'page-123' + // x-teams-app-session-id missing + }; + + const result = await validator.check(headers); + + expect(result).toBeNull(); + }); + + it('should return null if authorization header is missing', async () => { + const validator = new RemoteFunctionValidator(mockEntraValidator, mockLogger); + + const headers = { + 'x-teams-app-session-id': 'session-123', + 'x-teams-page-id': 'page-123' + // authorization missing + }; + + const result = await validator.check(headers); + + expect(result).toBeNull(); + }); + + it('should return null if token validation fails', async () => { + const validator = new RemoteFunctionValidator(mockEntraValidator, mockLogger); + + mockEntraValidator.validateAccessToken.mockResolvedValue(null); + + const headers = { + 'authorization': 'Bearer invalid-token', + 'x-teams-app-session-id': 'session-123', + 'x-teams-page-id': 'page-123' + }; + + const result = await validator.check(headers); + + expect(result).toBeNull(); + }); + + it('should extract token from Bearer prefix', async () => { + const validator = new RemoteFunctionValidator(mockEntraValidator, mockLogger); + + const mockPayload = { + appId: 'app-123', + tid: 'tenant-123', + oid: 'user-123', + name: 'Test User' + }; + + mockEntraValidator.validateAccessToken.mockResolvedValue(mockPayload); + + const headers = { + 'authorization': 'Bearer test-token', + 'x-teams-app-session-id': 'session-123', + 'x-teams-page-id': 'page-123' + }; + + await validator.check(headers); + + expect(mockEntraValidator.validateAccessToken).toHaveBeenCalledWith('test-token'); + }); + + it('should handle authorization header with different casing', async () => { + const validator = new RemoteFunctionValidator(mockEntraValidator, mockLogger); + + const mockPayload = { + appId: 'app-123', + tid: 'tenant-123', + oid: 'user-123', + name: 'Test User' + }; + + mockEntraValidator.validateAccessToken.mockResolvedValue(mockPayload); + + const headers = { + 'authorization': 'BEARER test-token', + 'x-teams-app-session-id': 'session-123', + 'x-teams-page-id': 'page-123' + }; + + await validator.check(headers); + + expect(mockEntraValidator.validateAccessToken).toHaveBeenCalledWith('test-token'); + }); + + it('should handle optional headers as undefined', async () => { + const validator = new RemoteFunctionValidator(mockEntraValidator, mockLogger); + + const mockPayload = { + appId: 'app-123', + tid: 'tenant-123', + oid: 'user-123', + name: 'Test User' + }; + + mockEntraValidator.validateAccessToken.mockResolvedValue(mockPayload); + + const headers = { + 'authorization': 'Bearer valid-token', + 'x-teams-app-session-id': 'session-123', + 'x-teams-page-id': 'page-123' + // All optional headers missing + }; + + const result = await validator.check(headers); + + expect(result).toEqual({ + appId: 'app-123', + appSessionId: 'session-123', + authToken: 'valid-token', + channelId: undefined, + chatId: undefined, + meetingId: undefined, + messageId: undefined, + pageId: 'page-123', + subPageId: undefined, + teamId: undefined, + tenantId: 'tenant-123', + userId: 'user-123', + userName: 'Test User' + }); + }); + }); +}); diff --git a/packages/apps/src/middleware/auth/remote-function-validator.ts b/packages/apps/src/middleware/auth/remote-function-validator.ts new file mode 100644 index 000000000..81c3a98ce --- /dev/null +++ b/packages/apps/src/middleware/auth/remote-function-validator.ts @@ -0,0 +1,88 @@ +import { ILogger } from '@microsoft/teams.common'; + +import { IClientContext } from '../../contexts'; + +import { JwtValidator } from './jwt-validator'; + +/** + * Remote function validator for /api/functions/* requests + * Wraps an Entra token validator and provides a simple check() method + */ +export class RemoteFunctionValidator { + private entraTokenValidator: Pick; + private logger: ILogger; + + constructor(entraTokenValidator: Pick, logger: ILogger) { + this.entraTokenValidator = entraTokenValidator; + this.logger = logger; + } + + /** + * Create a remote function validator for Entra tokens + */ + static create( + tenantId: string, + clientId: string, + logger: ILogger, + options?: { + allowedTenantIds?: string[]; + requiredScope?: string; + } + ): RemoteFunctionValidator { + const jwtValidator = new JwtValidator({ + clientId, + tenantId, + validateIssuer: { + allowedTenantIds: options?.allowedTenantIds + }, + validateScope: options?.requiredScope ? { requiredScope: options.requiredScope } : undefined, + jwksUriOptions: { + type: 'tenantId' + } + }, logger); + + return new RemoteFunctionValidator(jwtValidator, logger); + } + + async check(headers: Record): Promise { + const h = (key: string) => { + const v = headers[key]; + return Array.isArray(v) ? v[0] : v; + }; + const appSessionId = h('x-teams-app-session-id'); + const pageId = h('x-teams-page-id'); + const authorization = h('authorization')?.split(' '); + const authToken = + authorization?.length === 2 && authorization[0].toLowerCase() === 'bearer' + ? authorization[1] + : ''; + + const tokenPayload = await this.entraTokenValidator.validateAccessToken(authToken); + + if ( + !pageId || + !appSessionId || + !authToken || + !tokenPayload + ) { + this.logger.debug('unauthorized - missing required headers or invalid token'); + return null; + } + + return { + appId: tokenPayload?.['appId'], + appSessionId, + authToken, + channelId: h('x-teams-channel-id'), + chatId: h('x-teams-chat-id'), + meetingId: h('x-teams-meeting-id'), + messageId: h('x-teams-message-id'), + pageId, + subPageId: h('x-teams-sub-page-id'), + teamId: h('x-teams-team-id'), + tenantId: tokenPayload['tid'], + userId: tokenPayload['oid'], + userName: tokenPayload['name'], + }; + } +} diff --git a/packages/apps/src/middleware/auth/service-token-validator.spec.ts b/packages/apps/src/middleware/auth/service-token-validator.spec.ts new file mode 100644 index 000000000..3104440bd --- /dev/null +++ b/packages/apps/src/middleware/auth/service-token-validator.spec.ts @@ -0,0 +1,171 @@ +import { JwtValidator } from './jwt-validator'; +import { ServiceTokenValidator } from './service-token-validator'; + +// Mock JwtValidator +jest.mock('./jwt-validator'); + +describe('ServiceTokenValidator', () => { + const mockClientId = 'test-client-id'; + const mockTenantId = 'test-tenant-id'; + const mockServiceUrl = 'https://smba.trafficmanager.net/amer/'; + + let mockValidateAccessToken: jest.Mock; + + beforeEach(() => { + mockValidateAccessToken = jest.fn(); + (JwtValidator as jest.Mock).mockImplementation(() => ({ + validateAccessToken: mockValidateAccessToken + })); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('check', () => { + it('should extract token from Bearer prefix and convert payload to IToken', async () => { + const validator = new ServiceTokenValidator(mockClientId, mockTenantId); + + const mockPayload = { + appid: mockClientId, + sub: 'bot-id', + serviceurl: mockServiceUrl + }; + + mockValidateAccessToken.mockResolvedValue(mockPayload); + + const authHeader = 'Bearer test-token'; + const body = { serviceUrl: mockServiceUrl }; + + const result = await validator.check(authHeader, body); + + expect(mockValidateAccessToken).toHaveBeenCalledWith('test-token', { + validateServiceUrl: { expectedServiceUrl: mockServiceUrl } + }); + + expect(result).toEqual({ + appId: mockClientId, + from: 'azure', + fromId: 'bot-id', + serviceUrl: mockServiceUrl, + isExpired: expect.any(Function) + }); + expect(result.isExpired()).toBe(false); + }); + + it('should handle token without Bearer prefix', async () => { + const validator = new ServiceTokenValidator(mockClientId, mockTenantId); + + const mockPayload = { + appid: mockClientId, + sub: 'bot-id', + serviceurl: mockServiceUrl + }; + + mockValidateAccessToken.mockResolvedValue(mockPayload); + + const token = 'test-token'; + const body = { serviceUrl: mockServiceUrl }; + + await validator.check(token, body); + + expect(mockValidateAccessToken).toHaveBeenCalledWith('test-token', { + validateServiceUrl: { expectedServiceUrl: mockServiceUrl } + }); + }); + + it('should throw error when payload is null', async () => { + const validator = new ServiceTokenValidator(mockClientId, mockTenantId); + + mockValidateAccessToken.mockResolvedValue(null); + + const authHeader = 'Bearer invalid-token'; + const body = { serviceUrl: mockServiceUrl }; + + await expect(validator.check(authHeader, body)).rejects.toThrow('Invalid token'); + }); + + it('should pass serviceUrl validation option from request body', async () => { + const validator = new ServiceTokenValidator(mockClientId, mockTenantId); + + const mockPayload = { + appid: mockClientId, + sub: 'bot-id', + serviceurl: mockServiceUrl + }; + + mockValidateAccessToken.mockResolvedValue(mockPayload); + + const authHeader = 'Bearer test-token'; + const body = { serviceUrl: mockServiceUrl }; + + await validator.check(authHeader, body); + + expect(mockValidateAccessToken).toHaveBeenCalledWith('test-token', { + validateServiceUrl: { expectedServiceUrl: mockServiceUrl } + }); + }); + + it('should not pass serviceUrl validation when body.serviceUrl is missing', async () => { + const validator = new ServiceTokenValidator(mockClientId, mockTenantId); + + const mockPayload = { + appid: mockClientId, + sub: 'bot-id', + serviceurl: mockServiceUrl + }; + + mockValidateAccessToken.mockResolvedValue(mockPayload); + + const authHeader = 'Bearer test-token'; + const body = {}; + + await validator.check(authHeader, body); + + expect(mockValidateAccessToken).toHaveBeenCalledWith('test-token', { + validateServiceUrl: undefined + }); + }); + + it('should use credentials for fallback appId when payload.appid is missing', async () => { + const validator = new ServiceTokenValidator(mockClientId, mockTenantId); + + const mockPayload = { + // appid missing + sub: 'bot-id', + serviceurl: mockServiceUrl + }; + + mockValidateAccessToken.mockResolvedValue(mockPayload); + + const authHeader = 'Bearer test-token'; + const body = { serviceUrl: mockServiceUrl }; + + const result = await validator.check(authHeader, body); + + expect(result.appId).toBe(mockClientId); + }); + + it('should prefer payload.serviceurl over body.serviceUrl', async () => { + const validator = new ServiceTokenValidator(mockClientId, mockTenantId); + + const payloadServiceUrl = 'https://payload.example.com'; + const bodyServiceUrl = 'https://body.example.com'; + + const mockPayload = { + appid: mockClientId, + sub: 'bot-id', + serviceurl: payloadServiceUrl + }; + + mockValidateAccessToken.mockResolvedValue(mockPayload); + + const authHeader = 'Bearer test-token'; + const body = { serviceUrl: bodyServiceUrl }; + + const result = await validator.check(authHeader, body); + + expect(result.serviceUrl).toBe(bodyServiceUrl); + }); + }); +}); diff --git a/packages/apps/src/middleware/auth/service-token-validator.ts b/packages/apps/src/middleware/auth/service-token-validator.ts new file mode 100644 index 000000000..b1f569df1 --- /dev/null +++ b/packages/apps/src/middleware/auth/service-token-validator.ts @@ -0,0 +1,58 @@ +import { Credentials, IToken } from '@microsoft/teams.api'; +import { ILogger } from '@microsoft/teams.common'; + +import { JwtValidator } from './jwt-validator'; + +/** + * Service token validator for Bot Framework /api/messages requests + * Validates Bot Framework service tokens + */ +export class ServiceTokenValidator { + private jwtValidator: JwtValidator; + private credentials?: Credentials; + + constructor( + appId: string, + tenantId?: string, + serviceUrl?: string, + logger?: ILogger + ) { + this.jwtValidator = new JwtValidator({ + clientId: appId, + tenantId, + validateIssuer: { allowedIssuer: 'https://api.botframework.com' }, + validateServiceUrl: serviceUrl ? { expectedServiceUrl: serviceUrl } : undefined, + jwksUriOptions: { + type: 'uri', + uri: 'https://login.botframework.com/v1/.well-known/keys' + }, + }, logger); + + this.credentials = { clientId: appId, tenantId }; + } + + async check(authHeader: string, body: any): Promise { + // Extract token from "Bearer " format + const token = authHeader.startsWith('Bearer ') + ? authHeader.substring(7) + : authHeader; + + // Validate token using JWT validator + const payload = await this.jwtValidator.validateAccessToken(token, { + validateServiceUrl: body.serviceUrl ? { expectedServiceUrl: body.serviceUrl } : undefined + }); + + if (!payload) { + throw new Error('Invalid token'); + } + + // Convert JWT payload to IToken + return { + appId: payload.appid as string || this.credentials?.clientId || '', + from: 'azure', + fromId: payload.sub as string || '', + serviceUrl: body.serviceUrl || payload.serviceurl as string || '', + isExpired: () => false, // Already validated by JWT validator + }; + } +} diff --git a/packages/apps/src/middleware/index.ts b/packages/apps/src/middleware/index.ts index eae45761b..fb5e77f59 100644 --- a/packages/apps/src/middleware/index.ts +++ b/packages/apps/src/middleware/index.ts @@ -1,4 +1,6 @@ export { createEntraTokenValidator, JwtValidator } from './auth/jwt-validator'; +export { RemoteFunctionValidator } from './auth/remote-function-validator'; +export { ServiceTokenValidator } from './auth/service-token-validator'; export * from './jwt-validation-middleware'; export * from './strip-mentions-text'; export * from './with-remote-function-jwt-validation'; diff --git a/packages/apps/src/middleware/jwt-validation-middleware.ts b/packages/apps/src/middleware/jwt-validation-middleware.ts index 100c11a1a..04e730f76 100644 --- a/packages/apps/src/middleware/jwt-validation-middleware.ts +++ b/packages/apps/src/middleware/jwt-validation-middleware.ts @@ -1,9 +1,9 @@ import express from 'express'; -import { Activity, Credentials, IToken, JsonWebToken } from '@microsoft/teams.api'; +import { Activity, Credentials, IToken } from '@microsoft/teams.api'; import { ConsoleLogger, ILogger } from '@microsoft/teams.common'; -import { createServiceTokenValidator, JwtValidator } from './auth/jwt-validator'; +import { ServiceTokenValidator } from './auth/service-token-validator'; export type JwtValidationParams = { credentials?: Credentials; @@ -19,9 +19,9 @@ export function withJwtValidation(params: JwtValidationParams) { const logger = inputLogger?.child('jwt-validation-middleware') ?? new ConsoleLogger('jwt-validation-middleware'); // Create service token validator if credentials are provided - let serviceTokenValidator: JwtValidator | null; + let validator: ServiceTokenValidator | null; if (credentials?.clientId) { - serviceTokenValidator = createServiceTokenValidator( + validator = new ServiceTokenValidator( credentials.clientId, credentials.tenantId, undefined, @@ -29,7 +29,7 @@ export function withJwtValidation(params: JwtValidationParams) { ); } else { logger.debug('No credentials provided, skipping service token validation'); - serviceTokenValidator = null; + validator = null; } return async ( @@ -37,31 +37,28 @@ export function withJwtValidation(params: JwtValidationParams) { res: express.Response, next: express.NextFunction ) => { - if (!serviceTokenValidator) { + if (!validator) { logger.debug('No service token validator configured, skipping validation'); next(); return; } - const authorization = req.headers.authorization?.replace('Bearer ', ''); - if (!authorization) { + const authHeader = req.headers.authorization; + if (!authHeader) { res.status(401).send('unauthorized'); return; } - const activity: Activity = req.body; - // Use cached validator with per-request service URL validation - const validationResult = await serviceTokenValidator.validateAccessToken(authorization, activity.serviceUrl ? { - validateServiceUrl: { expectedServiceUrl: activity.serviceUrl } - } : undefined); - if (validationResult) { + try { + const token = await validator.check(authHeader, activity); logger.debug(`validated service token for activity ${activity.id}`); // Store the validated token in the request for use in subsequent handlers - req.validatedToken = new JsonWebToken(authorization); + req.validatedToken = token; next(); - } else { + } catch (err) { + logger.error('Token validation failed:', err); res.status(401).send('Invalid token'); } }; diff --git a/packages/apps/src/middleware/with-remote-function-jwt-validation.spec.ts b/packages/apps/src/middleware/with-remote-function-jwt-validation.spec.ts index 1725552e0..15ab5ec36 100644 --- a/packages/apps/src/middleware/with-remote-function-jwt-validation.spec.ts +++ b/packages/apps/src/middleware/with-remote-function-jwt-validation.spec.ts @@ -1,5 +1,9 @@ +import { RemoteFunctionValidator } from './auth/remote-function-validator'; import { withRemoteFunctionJwtValidation } from './with-remote-function-jwt-validation'; +// Mock RemoteFunctionValidator +jest.mock('./auth/remote-function-validator'); + const mockLogger = { error: jest.fn(), info: jest.fn(), @@ -9,36 +13,43 @@ const mockLogger = { log: jest.fn(), child: jest.fn().mockReturnThis(), }; + const tokenValidatorMock = { validateAccessToken: jest.fn(), }; -const mockRequestHeaders = { - Authorization: 'Bearer valid-token', - 'X-Teams-App-Session-Id': 'test-app-session-id', - 'X-Teams-Page-Id': 'test-page-id', - 'X-Teams-Channel-Id': 'test-channel-id', - 'X-Teams-Chat-Id': 'test-chat-id', - 'X-Teams-Meeting-Id': 'test-meeting-id', - 'X-Teams-Message-Id': 'test-message-id', - 'X-Teams-Sub-Page-Id': 'test-sub-page-id', - 'X-Teams-Team-Id': 'test-team-id', -} as const; describe('withRemoteFunctionJwtValidation Middleware', () => { let mockRequest: any; let mockResponse: any; let mockNext: jest.Mock; - const mockRequestStatus = jest.fn(); - const mockRequestStatusSend = jest.fn(); + let mockValidatorCheck: jest.Mock; beforeEach(() => { + mockValidatorCheck = jest.fn(); + (RemoteFunctionValidator as unknown as jest.Mock).mockImplementation(() => ({ + check: mockValidatorCheck + })); + mockRequest = { - header: (headerName: keyof typeof mockRequestHeaders) => mockRequestHeaders[headerName], - context: {}, + headers: { + 'authorization': 'Bearer valid-token', + 'x-teams-app-session-id': 'test-app-session-id', + 'x-teams-page-id': 'test-page-id', + 'x-teams-channel-id': 'test-channel-id', + 'x-teams-chat-id': 'test-chat-id', + 'x-teams-meeting-id': 'test-meeting-id', + 'x-teams-message-id': 'test-message-id', + 'x-teams-sub-page-id': 'test-sub-page-id', + 'x-teams-team-id': 'test-team-id', + }, + context: undefined, }; + mockResponse = { - status: mockRequestStatus.mockReturnValue({ send: mockRequestStatusSend }), + status: jest.fn().mockReturnThis(), + send: jest.fn(), }; + mockNext = jest.fn(); }); @@ -47,22 +58,7 @@ describe('withRemoteFunctionJwtValidation Middleware', () => { }); it('should set context and call next if authentication is successful', async () => { - // Mock a valid authentication scenario - tokenValidatorMock.validateAccessToken.mockResolvedValue({ - appId: 'test-app-id', - tid: 'test-tenant-id', - oid: 'test-user-id', - }); - - const handleRequest = withRemoteFunctionJwtValidation({ - logger: mockLogger, - entraTokenValidator: tokenValidatorMock, - }); - await handleRequest(mockRequest, mockResponse, mockNext); - - expect(mockNext).toHaveBeenCalled(); - expect(mockResponse.status).not.toHaveBeenCalled(); - expect(mockRequest.context).toEqual({ + const mockContext = { appId: 'test-app-id', appSessionId: 'test-app-session-id', authToken: 'valid-token', @@ -75,81 +71,130 @@ describe('withRemoteFunctionJwtValidation Middleware', () => { teamId: 'test-team-id', tenantId: 'test-tenant-id', userId: 'test-user-id', + userName: 'Test User' + }; + + mockValidatorCheck.mockResolvedValue(mockContext); + + const handleRequest = withRemoteFunctionJwtValidation({ + logger: mockLogger, + entraTokenValidator: tokenValidatorMock, + }); + + await handleRequest(mockRequest, mockResponse, mockNext); + + expect(mockValidatorCheck).toHaveBeenCalledWith({ + 'authorization': 'Bearer valid-token', + 'x-teams-app-session-id': 'test-app-session-id', + 'x-teams-page-id': 'test-page-id', + 'x-teams-channel-id': 'test-channel-id', + 'x-teams-chat-id': 'test-chat-id', + 'x-teams-meeting-id': 'test-meeting-id', + 'x-teams-message-id': 'test-message-id', + 'x-teams-sub-page-id': 'test-sub-page-id', + 'x-teams-team-id': 'test-team-id', }); + expect(mockRequest.context).toEqual(mockContext); + expect(mockNext).toHaveBeenCalled(); + expect(mockResponse.status).not.toHaveBeenCalled(); }); - it.each` - missingHeader - ${'X-Teams-App-Session-Id'} - ${'X-Teams-Page-Id'} - `('should return 401 if the $missingHeader header is missing', async ({ missingHeader }) => { - mockRequest.header = (headerName: keyof typeof mockRequestHeaders) => - headerName === missingHeader ? undefined : mockRequestHeaders[headerName]; + it('should convert Express headers to lowercase', async () => { + mockRequest.headers = { + 'Authorization': 'Bearer valid-token', + 'X-Teams-App-Session-Id': 'test-app-session-id', + 'X-Teams-Page-Id': 'test-page-id', + }; + + mockValidatorCheck.mockResolvedValue({ + appId: 'test-app-id', + pageId: 'test-page-id', + }); const handleRequest = withRemoteFunctionJwtValidation({ logger: mockLogger, entraTokenValidator: tokenValidatorMock, }); + await handleRequest(mockRequest, mockResponse, mockNext); - expect(mockRequestStatus).toHaveBeenCalledWith(401); - expect(mockRequestStatusSend).toHaveBeenCalledWith('unauthorized'); - expect(mockNext).not.toHaveBeenCalled(); + expect(mockValidatorCheck).toHaveBeenCalledWith({ + 'authorization': 'Bearer valid-token', + 'x-teams-app-session-id': 'test-app-session-id', + 'x-teams-page-id': 'test-page-id', + }); }); - it.each` - authorizationHeader | expected - ${undefined} | ${''} - ${'Bearer '} | ${''} - ${'Bearer invalid data '} | ${''} - ${'Bearer invalid-data '} | ${''} - ${'pop valid-token'} | ${''} - ${'Bearer valid-token'} | ${'valid-token'} - ${'BEARER valid-token'} | ${'valid-token'} - ${'bearer valid-token'} | ${'valid-token'} - `( - 'should invoke validateAccessToken with "$expected" when authorization header value is "$authorizationHeader"', - async ({ authorizationHeader, expected }) => { - mockRequest.header = (headerName: keyof typeof mockRequestHeaders) => - headerName === 'Authorization' ? authorizationHeader : mockRequestHeaders[headerName]; - - const handleRequest = withRemoteFunctionJwtValidation({ - logger: mockLogger, - entraTokenValidator: tokenValidatorMock, - }); - await handleRequest(mockRequest, mockResponse, mockNext); - expect(tokenValidatorMock.validateAccessToken).toHaveBeenCalledWith(expected); - } - ); + it('should skip non-string header values', async () => { + mockRequest.headers = { + 'authorization': 'Bearer valid-token', + 'x-teams-app-session-id': 'test-app-session-id', + 'x-teams-page-id': 'test-page-id', + 'x-forwarded-for': ['1.2.3.4', '5.6.7.8'], // array value - should be skipped + }; + + mockValidatorCheck.mockResolvedValue({ + appId: 'test-app-id', + pageId: 'test-page-id', + }); + + const handleRequest = withRemoteFunctionJwtValidation({ + logger: mockLogger, + entraTokenValidator: tokenValidatorMock, + }); + + await handleRequest(mockRequest, mockResponse, mockNext); + + expect(mockValidatorCheck).toHaveBeenCalledWith({ + 'authorization': 'Bearer valid-token', + 'x-teams-app-session-id': 'test-app-session-id', + 'x-teams-page-id': 'test-page-id', + // x-forwarded-for should not be included + }); + }); it('should return 401 if the token validator is missing', async () => { const handleRequest = withRemoteFunctionJwtValidation({ logger: mockLogger, entraTokenValidator: undefined, }); + await handleRequest(mockRequest, mockResponse, mockNext); - expect(mockRequestStatus).toHaveBeenCalledWith(401); - expect(mockRequestStatusSend).toHaveBeenCalledWith('unauthorized'); + expect(mockLogger.debug).toHaveBeenCalledWith('unauthorized - no token validator configured'); + expect(mockResponse.status).toHaveBeenCalledWith(401); + expect(mockResponse.send).toHaveBeenCalledWith('unauthorized'); expect(mockNext).not.toHaveBeenCalled(); }); it('should return 401 if token validation fails', async () => { + mockValidatorCheck.mockResolvedValue(null); + const handleRequest = withRemoteFunctionJwtValidation({ logger: mockLogger, entraTokenValidator: tokenValidatorMock, }); - tokenValidatorMock.validateAccessToken.mockResolvedValue(null); - await handleRequest(mockRequest, mockResponse, mockNext); - expect(mockLogger.debug).toHaveBeenCalledWith('unauthorized'); - const send = jest.fn(); - const response: any = { - status: jest.fn().mockReturnValue({ send }), - }; - await handleRequest(mockRequest, response, mockNext); + expect(mockResponse.status).toHaveBeenCalledWith(401); + expect(mockResponse.send).toHaveBeenCalledWith('unauthorized'); expect(mockNext).not.toHaveBeenCalled(); }); + + it('should create RemoteFunctionValidator with correct params', async () => { + mockValidatorCheck.mockResolvedValue({ + appId: 'test-app-id', + pageId: 'test-page-id', + }); + + const handleRequest = withRemoteFunctionJwtValidation({ + logger: mockLogger, + entraTokenValidator: tokenValidatorMock, + }); + + await handleRequest(mockRequest, mockResponse, mockNext); + + expect(RemoteFunctionValidator).toHaveBeenCalledWith(tokenValidatorMock, mockLogger); + }); }); diff --git a/packages/apps/src/middleware/with-remote-function-jwt-validation.ts b/packages/apps/src/middleware/with-remote-function-jwt-validation.ts index 8d110818c..519b2b548 100644 --- a/packages/apps/src/middleware/with-remote-function-jwt-validation.ts +++ b/packages/apps/src/middleware/with-remote-function-jwt-validation.ts @@ -6,6 +6,7 @@ import { ILogger } from '@microsoft/teams.common'; import { IClientContext } from '../contexts'; import { JwtValidator } from './auth/jwt-validator'; +import { RemoteFunctionValidator } from './auth/remote-function-validator'; export type WithRemoteFunctionJwtValidationParams = Partial & { entraTokenValidator?: Pick; @@ -25,50 +26,38 @@ export function withRemoteFunctionJwtValidation( const entraTokenValidator = params.entraTokenValidator; const log = params.logger; + // Create the validator once + const validator = entraTokenValidator + ? new RemoteFunctionValidator(entraTokenValidator, log) + : null; + return async ( req: JwtRemoteFunctionRequest, res: express.Response, next: express.NextFunction ) => { - const appSessionId = req.header('X-Teams-App-Session-Id'); - const pageId = req.header('X-Teams-Page-Id'); - const authorization = req.header('Authorization')?.split(' '); - const authToken = - authorization?.length === 2 && authorization[0].toLowerCase() === 'bearer' - ? authorization[1] - : ''; - - const tokenPayload = !entraTokenValidator - ? null - : await entraTokenValidator.validateAccessToken(authToken); - if ( - !pageId || - !appSessionId || - !authToken || - !entraTokenValidator || - !tokenPayload - ) { - log.debug('unauthorized'); + if (!validator) { + log.debug('unauthorized - no token validator configured'); res.status(401).send('unauthorized'); return; } - req.context = { - appId: tokenPayload?.['appId'], - appSessionId, - authToken, - channelId: req.header('X-Teams-Channel-Id'), - chatId: req.header('X-Teams-Chat-Id'), - meetingId: req.header('X-Teams-Meeting-Id'), - messageId: req.header('X-Teams-Message-Id'), - pageId, - subPageId: req.header('X-Teams-Sub-Page-Id'), - teamId: req.header('X-Teams-Team-Id'), - tenantId: tokenPayload['tid'], - userId: tokenPayload['oid'], - userName: tokenPayload['name'], - }; + // Convert Express headers to plain object + const headers: Record = {}; + Object.keys(req.headers).forEach(key => { + const value = req.headers[key]; + if (typeof value === 'string') { + headers[key.toLowerCase()] = value; + } + }); + + const context = await validator.check(headers); + if (!context) { + res.status(401).send('unauthorized'); + return; + } + req.context = context; next(); }; } diff --git a/packages/apps/src/plugins/http/index.ts b/packages/apps/src/plugins/http/index.ts index 327f3e6c1..1110b6451 100644 --- a/packages/apps/src/plugins/http/index.ts +++ b/packages/apps/src/plugins/http/index.ts @@ -1,2 +1 @@ export * from './plugin'; -export * from './stream'; diff --git a/packages/apps/src/plugins/http/plugin.spec.ts b/packages/apps/src/plugins/http/plugin.spec.ts index de37e4957..3a597fddd 100644 --- a/packages/apps/src/plugins/http/plugin.spec.ts +++ b/packages/apps/src/plugins/http/plugin.spec.ts @@ -1,70 +1,171 @@ -import e from 'express'; - -import { IMessageActivity, IToken, MessageActivity } from '@microsoft/teams.api'; +import http from 'http'; import { App } from '../../app'; - -import { JwtValidatedRequest } from '../../middleware'; -import { IPluginStartEvent } from '../../types'; +import { ExpressAdapter } from '../../http'; +import { HttpServer } from '../../http/http-server'; import { HttpPlugin } from './plugin'; -export class TestHttpPlugin extends HttpPlugin { - async onStart(_event: IPluginStartEvent) { - // No-op for tests - } +describe('HttpPlugin', () => { + describe('constructor', () => { + it('should create with default options', () => { + const plugin = new HttpPlugin(); + expect(plugin).toBeDefined(); + expect(plugin.get).toBeDefined(); + expect(plugin.post).toBeDefined(); + expect(plugin.use).toBeDefined(); + }); + + it('should create with custom http.Server', () => { + const server = http.createServer(); + const plugin = new HttpPlugin(server); + expect(plugin).toBeDefined(); + }); + + it('should create with skipAuth option', () => { + const plugin = new HttpPlugin(undefined, { skipAuth: true }); + expect(plugin).toBeDefined(); + }); + }); - async onStop() { - // No-op for tests - } + describe('asServer', () => { + it('should return HttpServer instance', () => { + const plugin = new HttpPlugin(); + const server = plugin.asServer(); + expect(server).toBeInstanceOf(HttpServer); + }); + }); - async OnRequestTest(req: JwtValidatedRequest, res: e.Response, _next: e.NextFunction) { - await this.onRequest(req, res, _next); - } -} + describe('Express method delegation', () => { + it('should expose Express methods', () => { + const plugin = new HttpPlugin(); -describe('HttpPlugin', () => { - let plugin: TestHttpPlugin; - let app: App; - const token: IToken = { - appId: 'app-id', - serviceUrl: 'https://service.url', - from: 'bot', - fromId: 'bot-id', - toString: () => 'token', - isExpired: () => false, - }; - const activity: IMessageActivity = new MessageActivity(); - - beforeEach(() => { - plugin = new TestHttpPlugin(); - app = new App({ - plugins: [plugin], + // These should be function references + expect(typeof plugin.get).toBe('function'); + expect(typeof plugin.post).toBe('function'); + expect(typeof plugin.patch).toBe('function'); + expect(typeof plugin.put).toBe('function'); + expect(typeof plugin.delete).toBe('function'); + expect(typeof plugin.route).toBe('function'); + expect(typeof plugin.use).toBe('function'); }); - app.start(); }); - afterEach(() => { - app.stop(); + describe('static', () => { + it('should call expressAdapter.serveStatic', () => { + const plugin = new HttpPlugin(); + const serveStaticSpy = jest.spyOn((plugin as any).expressAdapter, 'serveStatic'); + + plugin.static('/test', './dist'); + + expect(serveStaticSpy).toHaveBeenCalledWith('/test', './dist'); + }); }); - describe('OnRequest', () => { - it('should process incoming request', async () => { - const req = { - body: activity, - validatedToken: token, - } as JwtValidatedRequest; + describe('backwards compatibility with App', () => { + it('should work when passed in plugins array', () => { + const plugin = new HttpPlugin(); + const app = new App({ + plugins: [plugin], + }); + + expect(app.http).toBe(plugin); + expect(app.server).toBeDefined(); + expect(app.server).toBeInstanceOf(HttpServer); + }); + + it('should pass skipAuth option through to server', () => { + const plugin = new HttpPlugin(undefined, { skipAuth: true }); + const app = new App({ + plugins: [plugin], + }); + + // Server should be configured with skipAuth + expect(app.server).toBeDefined(); + expect((app.server as any).skipAuth).toBe(true); + }); - app.use(() => { - return { status: 200, body: 'some data' }; + it('should pass custom http.Server through to adapter', () => { + const customServer = http.createServer(); + const plugin = new HttpPlugin(customServer); + const app = new App({ + plugins: [plugin], }); - const res = { send: jest.fn(), status: jest.fn().mockReturnThis() } as any; - const next = jest.fn(); + // Server adapter should be using the custom server + const adapter = app.server.adapter as ExpressAdapter; + expect((adapter as any).server).toBe(customServer); + }); + + it('should work equivalently to new httpServerAdapter approach', () => { + // Old way with HttpPlugin + const oldPlugin = new HttpPlugin(); + const oldApp = new App({ + plugins: [oldPlugin], + }); + + // New way with httpServerAdapter + const newApp = new App({ + httpServerAdapter: new ExpressAdapter(), + }); + + // Both should have server + expect(oldApp.server).toBeInstanceOf(HttpServer); + expect(newApp.server).toBeInstanceOf(HttpServer); + + // Both should have adapter + expect(oldApp.server.adapter).toBeInstanceOf(ExpressAdapter); + expect(newApp.server.adapter).toBeInstanceOf(ExpressAdapter); + }); + + it('should expose deprecated app.http getter', () => { + const plugin = new HttpPlugin(); + const app = new App({ + plugins: [plugin], + }); + + // Deprecated getter should work + expect(app.http).toBe(plugin); + + // But should be same underlying server + expect(app.http!.asServer()).toBe(app.server); + }); + + it('should allow direct plugin usage for adding routes', () => { + const plugin = new HttpPlugin(); + const mockHandler = jest.fn(); + + // Should be able to call Express methods directly + plugin.post('/custom-route', mockHandler); + + // Route should be registered on the underlying adapter + const adapter = plugin.asServer().adapter as ExpressAdapter; + expect(adapter).toBeDefined(); + }); + + it('should not conflict with other plugins', () => { + const plugin = new HttpPlugin(); + + const app = new App({ + plugins: [plugin], + }); + + // HttpPlugin should be registered + expect(app.http).toBe(plugin); + expect(app.server).toBeDefined(); + + // App should still be able to register routes + const mockHandler = jest.fn(async () => ({ status: 200 })); + app.server.registerRoute('POST', '/test', mockHandler); + + expect(app.server).toBeDefined(); + }); + }); - await plugin.OnRequestTest(req, res, next); - expect(res.status).toHaveBeenCalledWith(200); - expect(res.send).toHaveBeenCalledWith('some data'); + describe('onInit lifecycle', () => { + it('should have onInit method', async () => { + const plugin = new HttpPlugin(); + await expect(plugin.onInit()).resolves.toBeUndefined(); }); }); }); diff --git a/packages/apps/src/plugins/http/plugin.ts b/packages/apps/src/plugins/http/plugin.ts index 32b838eb8..33bb61bea 100644 --- a/packages/apps/src/plugins/http/plugin.ts +++ b/packages/apps/src/plugins/http/plugin.ts @@ -3,66 +3,27 @@ import http from 'http'; import cors from 'cors'; import express from 'express'; -import { - Activity, - ActivityParams, - Client, - ConversationReference, - Credentials, - InvokeResponse, - IToken -} from '@microsoft/teams.api'; - -import { ILogger } from '@microsoft/teams.common'; -import * as $http from '@microsoft/teams.common/http'; - import pkg from '../../../package.json'; -import { IActivityEvent, IErrorEvent } from '../../events'; -import { Manifest } from '../../manifest'; -import { JwtValidatedRequest, withJwtValidation } from '../../middleware/jwt-validation-middleware'; -import { - Dependency, - Event, - IPluginStartEvent, - ISender, - IStreamer, - Logger, - Plugin, -} from '../../types'; - - -import { HttpStream } from './stream'; +import { ExpressAdapter } from '../../http'; +import { HttpServer } from '../../http/http-server'; +import { Plugin } from '../../types'; /** - * Can send/receive activities via http + * @deprecated Use the httpServerAdapter option instead: + * new App({ httpServerAdapter: new ExpressAdapter() }) + * + * This wrapper will be removed in a future version. + * + * NOTE: This plugin is named "HttpPlugin" for historical reasons and backwards compatibility. + * It is the default HTTP plugin that uses Express as the underlying framework. */ @Plugin({ name: 'http', version: pkg.version, - description: 'the default plugin for sending/receiving activities', + description: 'Deprecated: Use httpServerAdapter option instead', }) -export class HttpPlugin implements ISender { - @Logger() - readonly logger!: ILogger; - - @Dependency() - readonly client!: $http.Client; - - @Dependency() - readonly manifest!: Partial; - - @Dependency({ optional: true }) - readonly credentials?: Credentials; - - @Dependency({ optional: true }) - readonly botToken?: () => IToken; - - @Event('error') - readonly $onError!: (event: IErrorEvent) => void; - - @Event('activity') - readonly $onActivity!: (event: IActivityEvent) => Promise; - +export class HttpPlugin { + // Expose Express methods for backwards compatibility readonly get: express.Application['get']; readonly post: express.Application['post']; readonly patch: express.Application['patch']; @@ -71,34 +32,43 @@ export class HttpPlugin implements ISender { readonly route: express.Application['route']; readonly use: express.Application['use']; - get server() { - return this._server; - } - protected _server: http.Server; + protected expressAdapter: ExpressAdapter; + protected server: HttpServer; - get port() { - return this._port; - } - protected _port?: number | string; + constructor(server?: http.Server, options?: { skipAuth?: boolean; messagingEndpoint?: `/${string}` }) { + this.expressAdapter = new ExpressAdapter(server); + this.server = new HttpServer(this.expressAdapter, { + ...options, + messagingEndpoint: options?.messagingEndpoint ?? '/api/messages', + }); - protected express: express.Application; - protected skipAuth: boolean; + // Expose Express methods + this.get = this.expressAdapter.get; + this.post = this.expressAdapter.post; + this.patch = this.expressAdapter.patch; + this.put = this.expressAdapter.put; + this.delete = this.expressAdapter.delete; + this.route = this.expressAdapter.route; + this.use = this.expressAdapter.use; + } - constructor(server?: http.Server, options?: { skipAuth?: boolean }) { - this.skipAuth = options?.skipAuth ?? false; - this.express = express(); - this._server = server || http.createServer(); - this._server.on('request', this.express); - this.get = this.express.get.bind(this.express); - this.post = this.express.post.bind(this.express); - this.patch = this.express.patch.bind(this.express); - this.put = this.express.put.bind(this.express); - this.delete = this.express.delete.bind(this.express); - this.route = this.express.route.bind(this.express); - this.use = this.express.use.bind(this.express); + /** + * App.constructor calls this to extract the HttpServer + * @internal + */ + asServer(): HttpServer { + return this.server; + } - this.express.use(cors()); - this.express.use('/api*', express.json()); + /** + * Plugin lifecycle hook + */ + async onInit() { + // TODO: Setting cors globally and body parsing for all routes in /api + // is actually a mistake. When HttpPlugin is officially deprecated, this + // behavior will go away as well. + this.use(cors()); + this.use('/api', express.json()); } /** @@ -107,114 +77,7 @@ export class HttpPlugin implements ISender { * @param dist the dist file path to serve */ static(path: string, dist: string) { - this.express.use(path, express.static(dist)); + this.expressAdapter.serveStatic(path, dist); return this; } - - onInit() { - const messageHandlers = [this.onRequest.bind(this)]; - if (!this.skipAuth) { - // Setup /api/messages route with JWT validation middleware - const jwtMiddleware = withJwtValidation({ - credentials: this.credentials, - logger: this.logger - }); - messageHandlers.unshift(jwtMiddleware); - } - this.express.post('/api/messages', ...messageHandlers); - } - - async onStart({ port }: IPluginStartEvent) { - this._port = port; - - this.express.get('/', (_, res) => { - res.send(this.manifest); - }); - - return await new Promise((resolve, reject) => { - this._server.on('error', (err) => { - this.$onError({ error: err }); - reject(err); - }); - - this._server.listen(port, () => { - this.logger.info(`listening on port ${port} 🚀`); - resolve(); - }); - }); - } - - onStop() { - this._server.close(); - } - - async send(activity: ActivityParams, ref: ConversationReference) { - const api = new Client( - ref.serviceUrl, - this.client.clone({ - token: this.botToken, - }) - ); - - activity = { - ...activity, - from: ref.bot, - conversation: ref.conversation, - }; - - if (activity.id) { - const res = await api.conversations - .activities(ref.conversation.id) - .update(activity.id, activity); - return { ...activity, ...res }; - } - - const res = await api.conversations.activities(ref.conversation.id).create(activity); - return { ...activity, ...res }; - } - - createStream(ref: ConversationReference): IStreamer { - return new HttpStream( - new Client( - ref.serviceUrl, - this.client.clone({ - token: this.botToken, - }) - ), - ref, - this.logger - ); - } - /** - * validates an incoming http request - * @param req the incoming http request - * @param res the http response - */ - protected async onRequest( - req: JwtValidatedRequest, - res: express.Response, - _next: express.NextFunction - ) { - const activity: Activity = req.body; - let token: IToken | undefined; - if (req.validatedToken) { - token = req.validatedToken; - } else { - token = { - appId: '', - from: 'azure', - fromId: '', - serviceUrl: activity.serviceUrl || '', - isExpired: () => false, - }; - } - - const response = await this.$onActivity({ - sender: this, - activity, - token, - }); - - res.status(response.status || 200).send(response.body); - } } diff --git a/packages/apps/src/test-utils.ts b/packages/apps/src/test-utils.ts new file mode 100644 index 000000000..c97e6497e --- /dev/null +++ b/packages/apps/src/test-utils.ts @@ -0,0 +1,51 @@ +/** + * Test utilities for creating Apps in test environments + */ + +import { App, AppOptions } from './app'; +import { HttpMethod, IHttpServerAdapter, HttpRouteHandler } from './http/adapter'; +import { IPlugin } from './types'; + +/** + * Mock HTTP adapter for testing + * Provides no-op implementations for all methods + */ +export class TestAdapter implements IHttpServerAdapter { + registerRoute(_method: HttpMethod, _path: string, _handler: HttpRouteHandler): void { + // No-op for tests + } + + serveStatic(_path: string, _directory: string): void { + // No-op for tests + } + + async start(_port: number): Promise { + // No-op for tests + } + + async stop(): Promise { + // No-op for tests + } +} + +/** + * Creates an App instance configured for testing + * Automatically uses TestAdapter if no httpServerAdapter is provided + * + * @param options App configuration options + * @returns App instance with TestAdapter + * + * @example + * const app = createTestApp({ + * clientId: 'test-client-id', + * clientSecret: 'test-client-secret' + * }); + */ +export function createTestApp( + options?: AppOptions +): App { + return new App({ + ...options, + httpServerAdapter: options?.httpServerAdapter ?? new TestAdapter() + }); +} diff --git a/packages/apps/src/types/event.ts b/packages/apps/src/types/event.ts deleted file mode 100644 index aef92719f..000000000 --- a/packages/apps/src/types/event.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { IPlugin } from './plugin'; - -/** - * some event emitted from - * either the App or a Plugin - */ -export interface IEvent { - /** - * the sender of the event - */ - sender?: IPlugin; -} diff --git a/packages/apps/src/types/index.ts b/packages/apps/src/types/index.ts index 3b39802fe..8646dd2c0 100644 --- a/packages/apps/src/types/index.ts +++ b/packages/apps/src/types/index.ts @@ -1,5 +1,4 @@ export * from './app-events'; -export * from './event'; export * from './event-handler'; export * from './plugin'; export * from './prefixed'; diff --git a/packages/apps/src/types/plugin/decorators/dependency.ts b/packages/apps/src/types/plugin/decorators/dependency.ts index 868e8092f..18097ecbe 100644 --- a/packages/apps/src/types/plugin/decorators/dependency.ts +++ b/packages/apps/src/types/plugin/decorators/dependency.ts @@ -69,6 +69,13 @@ export function Storage() { return Dependency({ name: 'IStorage' }); } +/** + * inject the `App` `IHttpServer` instance + */ +export function HttpServer() { + return Dependency({ name: 'IHttpServer' }); +} + /** * options for a plugins dependency * that should get injected into it @@ -83,6 +90,7 @@ export type DependencyOptions = | GraphTokenDependencyOptions | LoggerDependencyOptions | StorageDependencyOptions + | HttpServerDependencyOptions | PluginDependencyOptions; export type IdDependencyOptions = { @@ -189,13 +197,26 @@ export type StorageDependencyOptions = { readonly optional?: false; }; +export type HttpServerDependencyOptions = { + /** + * the name used to resolve the dependency + */ + readonly name: 'IHttpServer'; + + /** + * if optional, the app will not throw + * if the dependency is not found + */ + readonly optional?: false; +}; + export type PluginDependencyOptions = { /** * the name used to resolve the dependency */ readonly name?: Omit< string, - 'id' | 'name' | 'manifest' | 'credentials' | 'botToken' | 'graphToken' | 'ILogger' | 'IStorage' + 'id' | 'name' | 'manifest' | 'credentials' | 'botToken' | 'graphToken' | 'ILogger' | 'IStorage' | 'IHttpServer' >; /** diff --git a/packages/apps/src/types/plugin/decorators/index.ts b/packages/apps/src/types/plugin/decorators/index.ts index 0481bc06c..9822f8fa3 100644 --- a/packages/apps/src/types/plugin/decorators/index.ts +++ b/packages/apps/src/types/plugin/decorators/index.ts @@ -1,3 +1,3 @@ export { Plugin, PluginOptions } from './plugin'; -export { Dependency, DependencyOptions, Logger, Storage } from './dependency'; +export { Dependency, DependencyOptions, Logger, Storage, HttpServer } from './dependency'; export { Event } from './event'; diff --git a/packages/apps/src/types/plugin/plugin-activity-event.ts b/packages/apps/src/types/plugin/plugin-activity-event.ts index 142580ba7..20c816108 100644 --- a/packages/apps/src/types/plugin/plugin-activity-event.ts +++ b/packages/apps/src/types/plugin/plugin-activity-event.ts @@ -1,17 +1,10 @@ import { Activity, ConversationReference, IToken } from '@microsoft/teams.api'; -import { ISender } from './sender'; - /** * the event emitted by a plugin * when an activity is received */ export interface IPluginActivityEvent extends ConversationReference { - /** - * the sender - */ - readonly sender: ISender; - /** * inbound request token */ diff --git a/packages/apps/src/types/plugin/plugin-activity-response-event.ts b/packages/apps/src/types/plugin/plugin-activity-response-event.ts index 88c9a4ef8..05138a0a0 100644 --- a/packages/apps/src/types/plugin/plugin-activity-response-event.ts +++ b/packages/apps/src/types/plugin/plugin-activity-response-event.ts @@ -1,17 +1,10 @@ import { Activity, ConversationReference, InvokeResponse } from '@microsoft/teams.api'; -import { ISender } from './sender'; - /** * the event emitted by a plugin * before an activity response is sent */ export interface IPluginActivityResponseEvent extends ConversationReference { - /** - * the sender - */ - readonly sender: ISender; - /** * inbound request activity payload */ diff --git a/packages/apps/src/types/plugin/plugin-activity-sent-event.ts b/packages/apps/src/types/plugin/plugin-activity-sent-event.ts index f1c53f56f..c580e5744 100644 --- a/packages/apps/src/types/plugin/plugin-activity-sent-event.ts +++ b/packages/apps/src/types/plugin/plugin-activity-sent-event.ts @@ -1,17 +1,10 @@ import { ConversationReference, SentActivity } from '@microsoft/teams.api'; -import { ISender } from './sender'; - /** * the event emitted by a plugin * when an activity is sent */ export interface IPluginActivitySentEvent extends ConversationReference { - /** - * the sender of the activity - */ - readonly sender: ISender; - /** * the sent activity */ diff --git a/packages/apps/src/types/plugin/sender.ts b/packages/apps/src/types/plugin/sender.ts index ae3b226b9..5f3d47df3 100644 --- a/packages/apps/src/types/plugin/sender.ts +++ b/packages/apps/src/types/plugin/sender.ts @@ -2,21 +2,18 @@ import { ActivityParams, ConversationReference, SentActivity } from '@microsoft/ import { IStreamer } from '../streamer'; -import { IPlugin } from './plugin'; - /** - * a plugin that can send activities + * Interface for activity sending (NOT a plugin) + * Separates sending concerns from transport concerns */ -export interface ISender extends IPlugin { +export interface IActivitySender { /** - * called by the `App` - * to send an activity + * Send an activity */ send(activity: ActivityParams, ref: ConversationReference): Promise; /** - * called by the `App` - * to create a new activity stream + * Create a new activity stream */ createStream(ref: ConversationReference): IStreamer; -}; +} diff --git a/packages/apps/src/utils/promises/retry.ts b/packages/apps/src/utils/promises/retry.ts index 50a6a3887..be8aeaf2a 100644 --- a/packages/apps/src/utils/promises/retry.ts +++ b/packages/apps/src/utils/promises/retry.ts @@ -2,7 +2,7 @@ import { ILogger } from '@microsoft/teams.common'; export type RetryOptions = { /** - * the max number of retry attempts + * the max number of attempts * @default 5 */ readonly max?: number; @@ -27,7 +27,7 @@ export async function retry(factory: () => Promise, options?: RetryO try { return await factory(); } catch (err) { - if (max > 0) { + if (max > 1) { log?.debug(`delaying ${delay}ms...`); await new Promise((resolve) => setTimeout(resolve, delay)); log?.debug('retrying...'); diff --git a/packages/botbuilder/eslint.config.js b/packages/botbuilder/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/packages/botbuilder/eslint.config.js +++ b/packages/botbuilder/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/packages/botbuilder/package.json b/packages/botbuilder/package.json index a4228fbfb..8d0d709f3 100644 --- a/packages/botbuilder/package.json +++ b/packages/botbuilder/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.botbuilder", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -37,15 +37,16 @@ "build": "npx tsc", "test": "npx jest" }, + "dependencies": { + "@microsoft/teams.api": "*", + "@microsoft/teams.common": "*" + }, "peerDependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.graph": "2.0.5", + "@microsoft/teams.apps": "*", "botbuilder": "4.23.1" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.0.2", "jest": "^29.7.0", diff --git a/packages/botbuilder/src/plugin.spec.ts b/packages/botbuilder/src/plugin.spec.ts index 0f6bc5ede..03203258a 100644 --- a/packages/botbuilder/src/plugin.spec.ts +++ b/packages/botbuilder/src/plugin.spec.ts @@ -1,13 +1,31 @@ import { CloudAdapter, TurnContext } from 'botbuilder'; import e from 'express'; -import { IMessageActivity, IToken, MessageActivity } from '@microsoft/teams.api'; +import { IMessageActivity, MessageActivity } from '@microsoft/teams.api'; -import { App, IPluginStartEvent } from '@microsoft/teams.apps'; -import { JwtValidatedRequest } from '@microsoft/teams.apps/dist/middleware'; +import { App, IPluginStartEvent, ExpressAdapter } from '@microsoft/teams.apps'; import { BotBuilderPlugin } from './plugin'; +// Mock adapter that extends ExpressAdapter to pass instanceof check +// while avoiding real server operations in tests +class MockExpressAdapter extends ExpressAdapter { + constructor() { + // Don't create real server - pass undefined + super(undefined); + } + + // Override to prevent actual server start + async start(_port: number): Promise { + return Promise.resolve(); + } + + // Override to prevent server close operations + async stop(): Promise { + return Promise.resolve(); + } +} + class TestBotBuilderPlugin extends BotBuilderPlugin { async onStart(_event: IPluginStartEvent) { // No-op for tests @@ -17,8 +35,8 @@ class TestBotBuilderPlugin extends BotBuilderPlugin { // No-op for tests } - async OnRequestTest(req: JwtValidatedRequest, res: e.Response, _next: e.NextFunction) { - await this.onRequest(req, res, _next); + async OnRequestTest(req: e.Request, res: e.Response, next: e.NextFunction) { + await this.onRequest(req, res, next); } } @@ -27,14 +45,6 @@ describe('BotBuilderPlugin', () => { let app: App; let adapter: { process: jest.Mock }; let adapterProcessFn: (req: any, res: any, fn: (context: TurnContext) => Promise) => Promise; - const token: IToken = { - appId: 'app-id', - serviceUrl: 'https://service.url', - from: 'bot', - fromId: 'bot-id', - toString: () => 'token', - isExpired: () => false, - }; const activity: IMessageActivity = new MessageActivity(); beforeEach(() => { @@ -47,6 +57,8 @@ describe('BotBuilderPlugin', () => { }); app = new App({ plugins: [plugin], + httpServerAdapter: new MockExpressAdapter(), + skipAuth: true, }); app.start(); }); @@ -59,8 +71,8 @@ describe('BotBuilderPlugin', () => { it('should default to teams sdk if no activity handler registered', async () => { const req = { body: activity, - validatedToken: token, - } as JwtValidatedRequest; + headers: {}, + } as e.Request; app.use(() => { return { status: 200, body: 'some data' }; diff --git a/packages/botbuilder/src/plugin.ts b/packages/botbuilder/src/plugin.ts index b4454916f..3df4b5f7b 100644 --- a/packages/botbuilder/src/plugin.ts +++ b/packages/botbuilder/src/plugin.ts @@ -1,5 +1,3 @@ -import http from 'http'; - import { ActivityHandler, CloudAdapter, @@ -9,19 +7,17 @@ import { import express from 'express'; -import { $Activity, Activity, Credentials, InvokeResponse, IToken } from '@microsoft/teams.api'; +import { Credentials, IToken } from '@microsoft/teams.api'; import { Dependency, - Event, - HttpPlugin, - IActivityEvent, - IErrorEvent, - ISender, + ExpressAdapter, + HttpServer, + IHttpServer, + IPlugin, Logger, Plugin, manifest, } from '@microsoft/teams.apps'; -import { JwtValidatedRequest } from '@microsoft/teams.apps/dist/middleware'; import { ILogger } from '@microsoft/teams.common'; import * as $http from '@microsoft/teams.common/http'; @@ -30,21 +26,22 @@ import pkg from '../package.json'; export type BotBuilderPluginOptions = { readonly adapter?: CloudAdapter; readonly handler?: ActivityHandler; - readonly server?: http.Server; - readonly skipAuth?: boolean; }; @Plugin({ - name: 'http', + name: 'botbuilder', version: pkg.version, }) -export class BotBuilderPlugin extends HttpPlugin implements ISender { +export class BotBuilderPlugin implements IPlugin { @Logger() declare readonly logger: ILogger; @Dependency() declare readonly client: $http.Client; + @HttpServer() + declare readonly httpServer: IHttpServer; + @Dependency() declare readonly manifest: Partial; @@ -57,24 +54,24 @@ export class BotBuilderPlugin extends HttpPlugin implements ISender { @Dependency({ optional: true }) declare readonly botToken?: () => IToken; - @Event('error') - declare readonly $onError: (event: IErrorEvent) => void; - - @Event('activity') - declare readonly $onActivity: (event: IActivityEvent) => Promise; - - protected adapter?: CloudAdapter; + protected cloudAdapter?: CloudAdapter; protected handler?: ActivityHandler; constructor(options?: BotBuilderPluginOptions) { - super(options?.server, { skipAuth: options?.skipAuth }); - this.adapter = options?.adapter; + this.cloudAdapter = options?.adapter; this.handler = options?.handler; } - onInit() { - super.onInit(); - if (!this.adapter) { + async onInit() { + const adapter = this.httpServer.adapter; + if (!(adapter instanceof ExpressAdapter)) { + throw new Error( + 'BotBuilderPlugin requires ExpressAdapter. ' + + 'Please use: new App({ httpServerAdapter: new ExpressAdapter() })' + ); + } + + if (!this.cloudAdapter) { const clientId = this.credentials?.clientId; const clientSecret = this.credentials && 'clientSecret' in this.credentials @@ -83,7 +80,7 @@ export class BotBuilderPlugin extends HttpPlugin implements ISender { const tenantId = this.credentials && 'tenantId' in this.credentials ? this.credentials?.tenantId : undefined; - this.adapter = new CloudAdapter( + this.cloudAdapter = new CloudAdapter( new ConfigurationBotFrameworkAuthentication( {}, new ConfigurationServiceClientCredentialFactory({ @@ -95,33 +92,28 @@ export class BotBuilderPlugin extends HttpPlugin implements ISender { ) ); } + + // Register messaging endpoint route with BotBuilder handler + adapter.post( + this.httpServer.messagingEndpoint, + express.json(), + (req: express.Request, res: express.Response, next: express.NextFunction) => { + this.onRequest(req, res, next).catch(next); + } + ); } protected async onRequest( - req: JwtValidatedRequest, + req: express.Request, res: express.Response, next: express.NextFunction ) { - if (!this.adapter) { + if (!this.cloudAdapter) { throw new Error('plugin not registered'); } - const activity: Activity = req.body; try { - let token: IToken | undefined; - if (req.validatedToken) { - token = req.validatedToken; - } else { - token = { - appId: '', - from: 'azure', - fromId: '', - serviceUrl: activity.serviceUrl || '', - isExpired: () => false, - }; - } - - await this.adapter.process(req, res, async (context) => { + await this.cloudAdapter.process(req, res, async (context) => { if (!context.activity.id) return; if (this.handler) { @@ -129,13 +121,14 @@ export class BotBuilderPlugin extends HttpPlugin implements ISender { } if (res.headersSent) { + this.logger.debug('Request handled by botbuilder. Not sending to TeamsSDK'); return next(); } - const response = await this.$onActivity({ - sender: this, - token, - activity: new $Activity(context.activity as any) as Activity, + // Now send it to the TeamsSDK handler + const response = await this.httpServer.handleRequest({ + body: req.body, + headers: req.headers as Record, }); res.status(response.status || 200).send(response.body); diff --git a/packages/cards/eslint.config.js b/packages/cards/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/packages/cards/eslint.config.js +++ b/packages/cards/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/packages/cards/package.json b/packages/cards/package.json index c73ab13f8..4a3c1b5ae 100644 --- a/packages/cards/package.json +++ b/packages/cards/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.cards", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -35,7 +35,7 @@ "test": "npx jest" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "jest": "^29.7.0", "rimraf": "^6.0.1", diff --git a/packages/cli/configs/atk/basic/python/.vscode/tasks.json b/packages/cli/configs/atk/basic/python/.vscode/tasks.json index 7d65a6b37..aa3fc1c17 100644 --- a/packages/cli/configs/atk/basic/python/.vscode/tasks.json +++ b/packages/cli/configs/atk/basic/python/.vscode/tasks.json @@ -71,7 +71,7 @@ { "label": "setup-env", "type": "shell", - "command": "uv sync", + "command": "pip install -e .", "problemMatcher": [], "group": { "kind": "build", diff --git a/packages/cli/configs/atk/oauth/python/.vscode/tasks.json b/packages/cli/configs/atk/oauth/python/.vscode/tasks.json index 69e450062..6c65be5c2 100644 --- a/packages/cli/configs/atk/oauth/python/.vscode/tasks.json +++ b/packages/cli/configs/atk/oauth/python/.vscode/tasks.json @@ -71,7 +71,7 @@ { "label": "setup-env", "type": "shell", - "command": "uv sync", + "command": "pip install -e .", "problemMatcher": [], "group": { "kind": "build", diff --git a/packages/cli/configs/atk/oauth/python/teamsapp.yml.hbs b/packages/cli/configs/atk/oauth/python/teamsapp.yml.hbs index ce53b5b4c..a9f8302ab 100644 --- a/packages/cli/configs/atk/oauth/python/teamsapp.yml.hbs +++ b/packages/cli/configs/atk/oauth/python/teamsapp.yml.hbs @@ -106,8 +106,8 @@ deploy: - uses: script with: run: | - uv sync - uv export --no-hashes -o src/requirements.txt + pip install . + pip freeze > src/requirements.txt - uses: azureAppService/zipDeploy with: artifactFolder: src diff --git a/packages/cli/eslint.config.js b/packages/cli/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/packages/cli/eslint.config.js +++ b/packages/cli/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/packages/cli/package.json b/packages/cli/package.json index 3d13e5fd9..9ab38badb 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.cli", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -40,7 +40,7 @@ "test": "npx jest" }, "dependencies": { - "@microsoft/teams.common": "2.0.5", + "@microsoft/teams.common": "*", "change-case": "^5.4.4", "handlebars": "^4.7.8", "yaml": "^2.7.0", @@ -48,7 +48,7 @@ "zod": "^3.24.2" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.10.7", "@types/yargs": "^17.0.33", diff --git a/packages/cli/src/commands/new/python.ts b/packages/cli/src/commands/new/python.ts index f506b9135..1bda67347 100644 --- a/packages/cli/src/commands/new/python.ts +++ b/packages/cli/src/commands/new/python.ts @@ -1,4 +1,3 @@ -import cp from 'node:child_process'; import fs from 'node:fs'; import path from 'node:path'; import url from 'node:url'; @@ -16,11 +15,22 @@ const ArgsSchema = z.object({ name: z.string(), template: z.string(), atk: z.string().optional(), - start: z.boolean().optional(), clientId: z.string().optional(), clientSecret: z.string().optional(), }); +/** + * Prints next steps to start the app. + */ +function printNextSteps(name: string): void { + console.log(new String().bold('Next steps to start the app:').toString()); + console.log(new String().cyan(` cd ${name}`).toString()); + console.log(new String().cyan(' python -m venv .venv').toString()); + console.log(new String().gray(' # activate your venv, then:').toString()); + console.log(new String().cyan(' pip install -e .').toString()); + console.log(new String().cyan(' python src/main.py').toString()); +} + export function Python(_: IContext): CommandModule<{}, z.infer> { const isPython = Settings.load().language == 'python'; const atkPath = path.resolve(url.fileURLToPath(import.meta.url), '../..', 'configs', 'atk'); @@ -54,12 +64,6 @@ export function Python(_: IContext): CommandModule<{}, z.infer { + handler: async ({ name, template, atk, clientId, clientSecret }) => { const projectDir = path.join(process.cwd(), name); const builder = Project.builder() .withPath(projectDir) @@ -135,35 +139,14 @@ export function Python(_: IContext): CommandModule<{}, z.infer(); - +builder.AddTeams().AddTeamsDevTools(); var app = builder.Build(); +var teams = app.UseTeams(); -if (app.Environment.IsDevelopment()) +teams.OnMessage(async context => { - app.MapOpenApi(); -} + await context.Typing(); + await context.Send($"you said '{context.Activity.Text}'"); +}); -app.UseTeams(); -app.Run(); +app.Run(); \ No newline at end of file diff --git a/packages/cli/templates/csharp/echo/{{name}}.hbs/{{name}}.csproj.hbs b/packages/cli/templates/csharp/echo/{{name}}.hbs/{{name}}.csproj.hbs index 994489e7b..7787f2116 100644 --- a/packages/cli/templates/csharp/echo/{{name}}.hbs/{{name}}.csproj.hbs +++ b/packages/cli/templates/csharp/echo/{{name}}.hbs/{{name}}.csproj.hbs @@ -1,28 +1,18 @@ - 0.0.0 - true - - - - net9.0 + net10.0 enable enable - + - - - - - - - + + diff --git a/packages/cli/templates/python/ai/README.md b/packages/cli/templates/python/ai/README.md index 237f55b87..4317a018a 100644 --- a/packages/cli/templates/python/ai/README.md +++ b/packages/cli/templates/python/ai/README.md @@ -5,10 +5,12 @@ This is a minimal Microsoft Teams SDK AI agent template using [microsoft-teams]( ## Structure - `src/main.py`: Main application code for the Teams bot. -- `pyproject.toml`: Project dependencies and metadata (use [uv](https://github.com/astral-sh/uv) for dependency management). +- `pyproject.toml`: Project dependencies and metadata. - `apppackage/`: Teams app manifest and related files. ## Getting Started -1. Install [uv](https://github.com/astral-sh/uv). -2. Run `uv run start` +1. Create a virtual environment: `python -m venv .venv` +2. Activate it: `. .venv/bin/activate` (Unix) or `.venv\Scripts\activate` (Windows) +3. Install dependencies: `pip install -e .` +4. Run the app: `python src/main.py` diff --git a/packages/cli/templates/python/echo/README.md b/packages/cli/templates/python/echo/README.md index 9c33c674e..341bccba0 100644 --- a/packages/cli/templates/python/echo/README.md +++ b/packages/cli/templates/python/echo/README.md @@ -5,10 +5,12 @@ This is a minimal Microsoft Teams echo bot template using [microsoft-teams](http ## Structure - `src/main.py`: Main application code for the Teams bot. -- `pyproject.toml`: Project dependencies and metadata (use [uv](https://github.com/astral-sh/uv) for dependency management). +- `pyproject.toml`: Project dependencies and metadata. - `apppackage/`: Teams app manifest and related files. ## Getting Started -1. Install [uv](https://github.com/astral-sh/uv). -2. Run `uv run start` +1. Create a virtual environment: `python -m venv .venv` +2. Activate it: `. .venv/bin/activate` (Unix) or `.venv\Scripts\activate` (Windows) +3. Install dependencies: `pip install -e .` +4. Run the app: `python src/main.py` diff --git a/packages/cli/templates/python/graph/README.md b/packages/cli/templates/python/graph/README.md index e86cf2199..c090a6277 100644 --- a/packages/cli/templates/python/graph/README.md +++ b/packages/cli/templates/python/graph/README.md @@ -5,10 +5,12 @@ This is a minimal Microsoft Teams graph bot template using [microsoft-teams](htt ## Structure - `src/main.py`: Main application code for the Teams bot. -- `pyproject.toml`: Project dependencies and metadata (use [uv](https://github.com/astral-sh/uv) for dependency management). +- `pyproject.toml`: Project dependencies and metadata. - `apppackage/`: Teams app manifest and related files. ## Getting Started -1. Install [uv](https://github.com/astral-sh/uv). -2. Run `uv run start` +1. Create a virtual environment: `python -m venv .venv` +2. Activate it: `. .venv/bin/activate` (Unix) or `.venv\Scripts\activate` (Windows) +3. Install dependencies: `pip install -e .` +4. Run the app: `python src/main.py` diff --git a/packages/cli/templates/typescript/ai/AGENTS.md b/packages/cli/templates/typescript/ai/AGENTS.md new file mode 100644 index 000000000..aae2a0d8d --- /dev/null +++ b/packages/cli/templates/typescript/ai/AGENTS.md @@ -0,0 +1,30 @@ +# Agent Instructions for Teams SDK based agents + +This is a Microsoft Teams bot project built with the new Teams SDK and OpenAI integration. + +IMPORTANT: To actually run this bot inside a real Microsoft Teams instance, fetch and follow the instructions in the linked AGENTS.md below (comprehensive development guidance, Azure setup instructions, and troubleshooting): + +https://raw.githubusercontent.com/microsoft/teams.ts/main/AGENTS_TEMPLATE.md + +## Project-Specific Notes + +- This bot uses **OpenAI GPT-4o** for chat completions +- Conversation history is stored via **LocalStorage** +- Run with `npm run dev` for local development + +## Quick Reference + +| Command | Description | +|---------|-------------| +| `npm install` | Install dependencies | +| `npm run dev` | Start development server with hot reload | +| `npm run build` | Build for production | + +## Environment Variables + +| Variable | Required | Description | +|----------|----------|-------------| +| `OPENAI_API_KEY` | Yes | OpenAI API key for GPT-4o | +| `CLIENT_ID` | Yes | Azure AD App Registration ID | +| `CLIENT_SECRET` | Yes | Azure AD App client secret | +| `TENANT_ID` | Yes | Azure AD Tenant ID | diff --git a/packages/cli/templates/typescript/ai/package.json.hbs b/packages/cli/templates/typescript/ai/package.json.hbs index 8010a218a..25571dc6a 100644 --- a/packages/cli/templates/typescript/ai/package.json.hbs +++ b/packages/cli/templates/typescript/ai/package.json.hbs @@ -17,12 +17,8 @@ }, "dependencies": { "@microsoft/teams.ai": "latest", -"@microsoft/teams.api": "latest", "@microsoft/teams.apps": "latest", -"@microsoft/teams.cards": "latest", -"@microsoft/teams.common": "latest", "@microsoft/teams.dev": "latest", -"@microsoft/teams.graph": "latest", "@microsoft/teams.openai": "latest" }, "devDependencies": { diff --git a/packages/cli/templates/typescript/echo/package.json.hbs b/packages/cli/templates/typescript/echo/package.json.hbs index 51905e349..9f88590b4 100644 --- a/packages/cli/templates/typescript/echo/package.json.hbs +++ b/packages/cli/templates/typescript/echo/package.json.hbs @@ -16,11 +16,7 @@ "dev": "tsx watch -r dotenv/config src/index.ts" }, "dependencies": { -"@microsoft/teams.api": "latest", "@microsoft/teams.apps": "latest", -"@microsoft/teams.cards": "latest", -"@microsoft/teams.common": "latest", -"@microsoft/teams.graph": "latest", "@microsoft/teams.dev": "latest" }, "devDependencies": { diff --git a/packages/cli/templates/typescript/graph/package.json.hbs b/packages/cli/templates/typescript/graph/package.json.hbs index a9a220394..37de300af 100644 --- a/packages/cli/templates/typescript/graph/package.json.hbs +++ b/packages/cli/templates/typescript/graph/package.json.hbs @@ -16,12 +16,9 @@ "dev": "tsx watch -r dotenv/config src/index.ts" }, "dependencies": { -"@microsoft/teams.api": "latest", "@microsoft/teams.apps": "latest", "@microsoft/teams.cards": "latest", -"@microsoft/teams.common": "latest", "@microsoft/teams.dev": "latest", -"@microsoft/teams.graph": "latest", "@microsoft/teams.graph-endpoints": "latest" }, "devDependencies": { diff --git a/packages/cli/templates/typescript/graph/src/index.ts b/packages/cli/templates/typescript/graph/src/index.ts index 67ff5c281..d007226c7 100644 --- a/packages/cli/templates/typescript/graph/src/index.ts +++ b/packages/cli/templates/typescript/graph/src/index.ts @@ -42,4 +42,10 @@ app.event('signin', async ({ send, userGraph }) => { ); }); +app.on('signin.failure', async ({ activity, log, send }) => { + const { code, message } = activity.value; + log.error(`sign-in failed: ${code} - ${message}`); + await send('Sign-in failed.'); +}); + app.start(process.env.PORT || 3978).catch(console.error); diff --git a/packages/cli/templates/typescript/mcp/package.json.hbs b/packages/cli/templates/typescript/mcp/package.json.hbs index fdbe79975..f22c81bf3 100644 --- a/packages/cli/templates/typescript/mcp/package.json.hbs +++ b/packages/cli/templates/typescript/mcp/package.json.hbs @@ -18,15 +18,11 @@ -r dotenv/config ." }, "dependencies": { -"@microsoft/teams.api": "latest", "@microsoft/teams.apps": "latest", -"@microsoft/teams.cards": "latest", -"@microsoft/teams.common": "latest", "@microsoft/teams.dev": "latest", -"@microsoft/teams.graph": "latest", "@microsoft/teams.mcp": "latest", "@microsoft/teams.openai": "latest", -"@modelcontextprotocol/sdk": "^1.7.0" +"@modelcontextprotocol/sdk": "^1.25.2" }, "devDependencies": { "@modelcontextprotocol/inspector": "^0.6.0", diff --git a/packages/cli/templates/typescript/mcpclient/package.json.hbs b/packages/cli/templates/typescript/mcpclient/package.json.hbs index 24b17979a..257db1fe8 100644 --- a/packages/cli/templates/typescript/mcpclient/package.json.hbs +++ b/packages/cli/templates/typescript/mcpclient/package.json.hbs @@ -16,15 +16,11 @@ "dev": "tsx watch -r dotenv/config src/index.ts" }, "dependencies": { -"@microsoft/teams.api": "latest", "@microsoft/teams.apps": "latest", -"@microsoft/teams.cards": "latest", -"@microsoft/teams.common": "latest", "@microsoft/teams.dev": "latest", -"@microsoft/teams.graph": "latest", "@microsoft/teams.mcpclient": "latest", "@microsoft/teams.openai": "latest", -"@modelcontextprotocol/sdk": "^1.9.0" +"@modelcontextprotocol/sdk": "^1.25.2" }, "devDependencies": { "@types/node": "^22.5.4", diff --git a/packages/cli/templates/typescript/mcpclient/src/index.ts.hbs b/packages/cli/templates/typescript/mcpclient/src/index.ts.hbs index ac4966e65..f3d130b59 100644 --- a/packages/cli/templates/typescript/mcpclient/src/index.ts.hbs +++ b/packages/cli/templates/typescript/mcpclient/src/index.ts.hbs @@ -18,8 +18,10 @@ const prompt = new ChatPrompt( instructions: "You are a helpful assistant. You MUST use tool calls to do all your work.", model: new OpenAIChatModel({ - model: "gpt-4o-mini", - apiKey: process.env.OPENAI_API_KEY, + apiKey: process.env.AZURE_OPENAI_API_KEY || process.env.OPENAI_API_KEY, + endpoint: process.env.AZURE_OPENAI_ENDPOINT, + apiVersion: process.env.AZURE_OPENAI_API_VERSION, + model: process.env.AZURE_OPENAI_MODEL_DEPLOYMENT_NAME!, }), logger }, diff --git a/packages/cli/templates/typescript/tab/package.json.hbs b/packages/cli/templates/typescript/tab/package.json.hbs index 38d3714bf..c5bc82b13 100644 --- a/packages/cli/templates/typescript/tab/package.json.hbs +++ b/packages/cli/templates/typescript/tab/package.json.hbs @@ -17,13 +17,9 @@ "build:client": "npx vite build --outDir dist/client" }, "dependencies": { -"@microsoft/teams.api": "latest", "@microsoft/teams.apps": "latest", -"@microsoft/teams.cards": "latest", "@microsoft/teams.client": "latest", -"@microsoft/teams.common": "latest", "@microsoft/teams.dev": "latest", -"@microsoft/teams.graph": "latest", "@microsoft/teams.graph-endpoints": "latest", "react": "^19.2.1", "react-dom": "^19.2.1" diff --git a/packages/client/eslint.config.js b/packages/client/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/packages/client/eslint.config.js +++ b/packages/client/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/packages/client/package.json b/packages/client/package.json index 992467a80..bf518af79 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.client", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -38,16 +38,16 @@ }, "dependencies": { "@azure/msal-browser": "^4.9.1", + "@microsoft/teams.api": "*", + "@microsoft/teams.common": "*", + "@microsoft/teams.graph": "*", "uuid": "^11.0.5" }, "peerDependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.graph": "2.0.5", "@microsoft/teams-js": "^2.35.0" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "jest": "^29.7.0", "rimraf": "^6.0.1", diff --git a/packages/common/eslint.config.js b/packages/common/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/packages/common/eslint.config.js +++ b/packages/common/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/packages/common/package.json b/packages/common/package.json index 6becebd90..1a4a55076 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.common", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -80,7 +80,7 @@ "axios": "^1.12.0" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "jest": "^29.7.0", "rimraf": "^6.0.1", diff --git a/packages/config/eslint.config.js b/packages/config/eslint.config.js index 83005fa8f..12146cac5 100644 --- a/packages/config/eslint.config.js +++ b/packages/config/eslint.config.js @@ -1,165 +1,188 @@ -const eslint = require('@eslint/js'); -const tseslint = require('typescript-eslint'); -const importPlugin = require('eslint-plugin-import'); +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; +import importPlugin from 'eslint-plugin-import'; +import stylistic from '@stylistic/eslint-plugin'; + +import { fileURLToPath } from "node:url"; +import { dirname } from "node:path"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); /** @type {import("eslint").Linter.Config} */ -module.exports = (async () => { - const stylistic = await import('@stylistic/eslint-plugin'); - - return tseslint.config( - { - ignores: [ - '**/dist/**', - '**/coverage/**', - '**/node_modules/**', - '**/coverage/**' - ] +export default tseslint.config( + { + ignores: [ + '**/dist/**', + '**/coverage/**', + '**/node_modules/**', + '**/coverage/**' + ] + }, + { + extends: [ + eslint.configs.recommended, + importPlugin.flatConfigs.recommended, + ...tseslint.configs.recommended + ], + plugins: { + '@stylistic': stylistic }, - { - extends: [ - eslint.configs.recommended, - importPlugin.flatConfigs.recommended, - ...tseslint.configs.recommended - ], - plugins: { - '@stylistic': stylistic.default + ignores: [ + '**/dist/**', + '**/coverage/**', + '**/node_modules/**', + '**/coverage/**' + ], + files: ['src/**/*.ts'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname, + }, }, - ignores: [ - '**/dist/**', - '**/coverage/**', - '**/node_modules/**', - '**/coverage/**' + rules: { + 'grouped-accessor-pairs': ['error', 'getBeforeSet'], + + // imports + 'import/no-unresolved': 'off', + 'import/named': 'off', + 'import/order': [ + 'error', + { + 'newlines-between': 'always-and-inside-groups', + 'groups': ['builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'object', 'type'], + 'pathGroups': [ + { + 'pattern': '@microsoft/**', + 'group': 'external', + 'position': 'after' + } + ], + 'alphabetize': { + 'order': 'asc', + 'caseInsensitive': true + }, + 'pathGroupsExcludedImportTypes': [] + } ], - files: ['src/**/*.ts'], - rules: { - 'grouped-accessor-pairs': ['error', 'getBeforeSet'], - - // imports - 'import/no-unresolved': 'off', - 'import/named': 'off', - 'import/order': [ - 'error', - { - 'newlines-between': 'always-and-inside-groups', - 'groups': ['builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'object', 'type'], - 'pathGroups': [ - { - 'pattern': '@microsoft/**', - 'group': 'external', - 'position': 'after' - } + + // typescript + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-duplicate-enum-values': 'off', + '@typescript-eslint/no-empty-object-type': 'off', + '@typescript-eslint/member-ordering': [ + 'error', + { + 'default': { + 'memberTypes': [ + // Fields + 'public-static-field', + 'protected-static-field', + 'private-static-field', + '#private-static-field', + + 'public-decorated-field', + 'protected-decorated-field', + 'private-decorated-field', + + 'public-instance-field', + 'protected-instance-field', + 'private-instance-field', + '#private-instance-field', + + 'public-abstract-field', + 'protected-abstract-field', + + 'public-field', + 'protected-field', + 'private-field', + '#private-field', + + 'static-field', + 'instance-field', + 'abstract-field', + + 'decorated-field', + + 'field', + + // Static initialization + 'static-initialization', + + // Constructors + 'public-constructor', + 'protected-constructor', + 'private-constructor', + + 'constructor', + + // Methods + 'public-static-method', + 'protected-static-method', + 'private-static-method', + '#private-static-method', + + 'public-decorated-method', + 'protected-decorated-method', + 'private-decorated-method', + + 'public-instance-method', + 'protected-instance-method', + 'private-instance-method', + '#private-instance-method', + + 'public-abstract-method', + 'protected-abstract-method', + + 'public-method', + 'protected-method', + 'private-method', + '#private-method', + + 'static-method', + 'instance-method', + 'abstract-method', + + 'decorated-method' ], - 'alphabetize': { - 'order': 'asc', - 'caseInsensitive': true - }, - 'pathGroupsExcludedImportTypes': [] - } - ], - - // typescript - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/no-duplicate-enum-values': 'off', - '@typescript-eslint/no-empty-object-type': 'off', - '@typescript-eslint/member-ordering': [ - 'error', - { - 'default': { - 'memberTypes': [ - // Fields - 'public-static-field', - 'protected-static-field', - 'private-static-field', - '#private-static-field', - - 'public-decorated-field', - 'protected-decorated-field', - 'private-decorated-field', - - 'public-instance-field', - 'protected-instance-field', - 'private-instance-field', - '#private-instance-field', - - 'public-abstract-field', - 'protected-abstract-field', - - 'public-field', - 'protected-field', - 'private-field', - '#private-field', - - 'static-field', - 'instance-field', - 'abstract-field', - - 'decorated-field', - - 'field', - - // Static initialization - 'static-initialization', - - // Constructors - 'public-constructor', - 'protected-constructor', - 'private-constructor', - - 'constructor', - - // Methods - 'public-static-method', - 'protected-static-method', - 'private-static-method', - '#private-static-method', - - 'public-decorated-method', - 'protected-decorated-method', - 'private-decorated-method', - - 'public-instance-method', - 'protected-instance-method', - 'private-instance-method', - '#private-instance-method', - - 'public-abstract-method', - 'protected-abstract-method', - - 'public-method', - 'protected-method', - 'private-method', - '#private-method', - - 'static-method', - 'instance-method', - 'abstract-method', - - 'decorated-method' - ], - } } - ], - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'interface', - format: ['PascalCase'], - custom: { - regex: '^I[A-Z]', - match: true, - }, + } + ], + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'interface', + format: ['PascalCase'], + custom: { + regex: '^I[A-Z]', + match: true, }, - ], - - // stylistic - '@stylistic/linebreak-style': ['error', 'unix'], - '@stylistic/quotes': ['error', 'single'], - '@stylistic/semi': ['error', 'always'], - '@stylistic/space-before-blocks': 'error', - '@stylistic/block-spacing': 'error', - '@stylistic/keyword-spacing': 'error' - }, + }, + ], + + // stylistic + '@stylistic/linebreak-style': ['error', 'unix'], + '@stylistic/quotes': ['error', 'single'], + '@stylistic/semi': ['error', 'always'], + '@stylistic/space-before-blocks': 'error', + '@stylistic/block-spacing': 'error', + '@stylistic/keyword-spacing': 'error' + }, + languageOptions: { + parser: tseslint.parser, + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname + } + } + }, + { + files: ['src/**/*.spec.ts'], + languageOptions: { + parserOptions: { + projectService: false + } } - ); -})(); + } +); diff --git a/packages/config/package.json b/packages/config/package.json index e4b387542..c94b19317 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.config", - "version": "2.0.5", + "version": "0.0.0", "private": true, "license": "MIT", "homepage": "https://github.com/microsoft/teams.ts", diff --git a/packages/dev/eslint.config.js b/packages/dev/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/packages/dev/eslint.config.js +++ b/packages/dev/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/packages/dev/package.json b/packages/dev/package.json index 07fdd3711..8ce54c776 100644 --- a/packages/dev/package.json +++ b/packages/dev/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.dev", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -36,21 +36,20 @@ "test": "npx jest" }, "dependencies": { + "@microsoft/teams.api": "*", + "@microsoft/teams.cards": "*", + "@microsoft/teams.common": "*", "axios": "^1.12.0", - "express": "^4.21.0", + "express": "^5.0.0", "jsonwebtoken": "^9.0.2", "uuid": "^11.0.5", "ws": "^8.18.1" }, "peerDependencies": { - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", - "@microsoft/teams.graph": "2.0.5" + "@microsoft/teams.apps": "*" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/express": "^5.0.0", "@types/jest": "^29.5.12", "@types/jsonwebtoken": "^9.0.7", diff --git a/packages/dev/src/plugin.ts b/packages/dev/src/plugin.ts index 435c1a48e..de84379d2 100644 --- a/packages/dev/src/plugin.ts +++ b/packages/dev/src/plugin.ts @@ -7,16 +7,13 @@ import * as uuid from 'uuid'; import { WebSocket, WebSocketServer } from 'ws'; -import { ActivityParams, ConversationReference, IToken } from '@microsoft/teams.api'; +import { InvokeResponse, IToken } from '@microsoft/teams.api'; import { - HttpPlugin, Logger, IPluginActivityEvent, IPluginActivityResponseEvent, IPluginActivitySentEvent, IPluginStartEvent, - ISender, - IStreamer, Plugin, Dependency, Event, @@ -47,7 +44,7 @@ export type DevtoolsPluginOptions = { '\n' ), }) -export class DevtoolsPlugin implements ISender { +export class DevtoolsPlugin { @Logger() readonly log!: ILogger; @@ -57,14 +54,11 @@ export class DevtoolsPlugin implements ISender { @Dependency({ optional: true }) readonly name?: IToken; - @Dependency() - readonly httpPlugin!: HttpPlugin; - @Event('error') readonly $onError!: (event: IErrorEvent) => void; @Event('activity') - readonly $onActivity!: (event: IActivityEvent) => void; + readonly $onActivity!: (event: IActivityEvent) => Promise; protected http: http.Server; protected express: express.Application; @@ -80,7 +74,8 @@ export class DevtoolsPlugin implements ISender { this.ws = new WebSocketServer({ server: this.http, path: '/devtools/sockets' }); this.ws.on('connection', this.onSocketConnection.bind(this)); this.express.use('/devtools', express.static(dist)); - this.express.get('/devtools/*', (_, res) => { + // Catch-all route for SPA - must come after static middleware + this.express.get('/devtools/*splat', (_, res) => { res.sendFile(path.join(dist, 'index.html')); }); this.options = options; @@ -119,9 +114,12 @@ export class DevtoolsPlugin implements ISender { return new Promise((resolve, reject) => { this.pending[activity.id] = { resolve, reject }; this.$onActivity({ - sender: this.httpPlugin, token, - activity, + body: activity, + }).catch((err) => { + this.log.error('Error processing activity:', err); + reject(err); + delete this.pending[activity.id]; }); }); }, @@ -170,14 +168,6 @@ export class DevtoolsPlugin implements ISender { delete this.pending[activity.id]; } - async send(activity: ActivityParams, ref: ConversationReference) { - return await this.httpPlugin.send(activity, ref); - } - - createStream(ref: ConversationReference): IStreamer { - return this.httpPlugin.createStream(ref); - } - protected onSocketConnection(socket: WebSocket) { const id = uuid.v4(); this.sockets.set(id, socket); diff --git a/packages/dev/src/routes/v3/conversations/activities/create.ts b/packages/dev/src/routes/v3/conversations/activities/create.ts index 5e4161160..a93642efb 100644 --- a/packages/dev/src/routes/v3/conversations/activities/create.ts +++ b/packages/dev/src/routes/v3/conversations/activities/create.ts @@ -24,6 +24,24 @@ export function create({ port, log, process }: RouteContext) { } try { + const activity = { + ...req.body, + type: req.body.type || 'message', + id: req.body.id || uuid.v4(), + channelId: 'msteams', + from: { + id: 'devtools', + name: 'devtools', + role: 'user', + }, + conversation: { + id: req.params.conversationId, + conversationType: 'personal', + isGroup: false, + name: 'default', + }, + }; + process( new JsonWebToken( jwt.sign( @@ -33,22 +51,7 @@ export function create({ port, log, process }: RouteContext) { 'secret' ) ), - { - ...req.body, - id: req.body.id || uuid.v4(), - channelId: 'msteams', - from: { - id: 'devtools', - name: 'devtools', - role: 'user', - }, - conversation: { - id: req.params.conversationId, - conversationType: 'personal', - isGroup: false, - name: 'default', - }, - } + activity as Activity ); res.status(201).send({ id }); diff --git a/packages/devtools/eslint.config.js b/packages/devtools/eslint.config.js index 4b7fecce3..953aa5548 100644 --- a/packages/devtools/eslint.config.js +++ b/packages/devtools/eslint.config.js @@ -14,6 +14,9 @@ module.exports = tseslint.config( languageOptions: { ecmaVersion: 2020, globals: globals.browser, + parserOptions: { + tsconfigRootDir: __dirname, + }, }, plugins: { 'react-compiler': reactCompiler, @@ -28,5 +31,12 @@ module.exports = tseslint.config( '@typescript-eslint/no-explicit-any': 'off', 'order-imports/order-imports': 'error', }, + languageOptions: { + parser: tseslint.parser, + parserOptions: { + projectService: true, + tsconfigRootDir: __dirname + } + } } ); diff --git a/packages/devtools/package.json b/packages/devtools/package.json index ba242dead..449b52281 100644 --- a/packages/devtools/package.json +++ b/packages/devtools/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.devtools", - "version": "2.0.5", + "version": "0.0.0", "private": true, "files": [ "dist", @@ -20,10 +20,10 @@ "@codemirror/lang-json": "^6.0.1", "@fluentui/react-components": "^9.6.0", "@fluentui/react-icons": "^2.0.274", - "@microsoft/teams.api": "2.0.5", - "@microsoft/teams.apps": "2.0.5", - "@microsoft/teams.cards": "2.0.5", - "@microsoft/teams.common": "2.0.5", + "@microsoft/teams.api": "*", + "@microsoft/teams.apps": "*", + "@microsoft/teams.cards": "*", + "@microsoft/teams.common": "*", "@uiw/codemirror-themes-all": "^4.23.9", "codemirror": "^6.0.1", "date-fns": "^4.1.0", @@ -33,10 +33,10 @@ "mdast-util-gfm": "^3.1.0", "micromark-extension-gfm": "^3.0.0", "prettier": "^3.2.5", - "react": "^19.2.1", - "react-dom": "^19.2.1", + "react": "^19.2.2", + "react-dom": "^19.2.2", "react-markdown": "^10.0.0", - "react-router": "^7.5.2", + "react-router": "^7.12.0", "remark-breaks": "^4.0.0", "zustand": "^5.0.3" }, diff --git a/packages/graph-endpoints-beta/eslint.config.js b/packages/graph-endpoints-beta/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/packages/graph-endpoints-beta/eslint.config.js +++ b/packages/graph-endpoints-beta/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/packages/graph-endpoints-beta/package.json b/packages/graph-endpoints-beta/package.json index 5feafe1e4..ef220e43e 100644 --- a/packages/graph-endpoints-beta/package.json +++ b/packages/graph-endpoints-beta/package.json @@ -1,7 +1,7 @@ { "name": "@microsoft/teams.graph-endpoints-beta", "sideEffects": false, - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -51,7 +51,7 @@ "gen:endpoints": "npx cross-env NODE_OPTIONS='--max-old-space-size=16384' npx @microsoft/teams.graph-tools generate-endpoints ../graph/openapi-beta.yaml ./src beta" }, "devDependencies": { - "@microsoft/teams.graph-tools": "2.0.5", + "@microsoft/teams.graph-tools": "*", "rimraf": "^6.0.1", "tsup": "^8.4.0", "typescript": "^5.4.5" diff --git a/packages/graph-endpoints/eslint.config.js b/packages/graph-endpoints/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/packages/graph-endpoints/eslint.config.js +++ b/packages/graph-endpoints/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/packages/graph-endpoints/package.json b/packages/graph-endpoints/package.json index a47bdfcb8..cdbd56b5e 100644 --- a/packages/graph-endpoints/package.json +++ b/packages/graph-endpoints/package.json @@ -1,7 +1,7 @@ { "name": "@microsoft/teams.graph-endpoints", "sideEffects": false, - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -51,7 +51,7 @@ "gen:endpoints": "npx cross-env NODE_OPTIONS='--max-old-space-size=16384' npx @microsoft/teams.graph-tools generate-endpoints ../graph/openapi.yaml ./src v1.0" }, "devDependencies": { - "@microsoft/teams.graph-tools": "2.0.5", + "@microsoft/teams.graph-tools": "*", "rimraf": "^6.0.1", "tsup": "^8.4.0", "typescript": "^5.4.5" diff --git a/packages/graph-tools/eslint.config.js b/packages/graph-tools/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/packages/graph-tools/eslint.config.js +++ b/packages/graph-tools/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/packages/graph-tools/package.json b/packages/graph-tools/package.json index c2621ea35..d1d155b15 100644 --- a/packages/graph-tools/package.json +++ b/packages/graph-tools/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.graph-tools", - "version": "2.0.5", + "version": "0.0.0", "private": true, "license": "MIT", "description": "Tools for generating TypeScript Graph API endpoints from OpenAPI specifications", @@ -52,7 +52,7 @@ "yaml": "^2.6.1" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.10.2", "jest": "^29.7.0", diff --git a/packages/graph/eslint.config.js b/packages/graph/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/packages/graph/eslint.config.js +++ b/packages/graph/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/packages/graph/package.json b/packages/graph/package.json index 0181db543..851fdb9dd 100644 --- a/packages/graph/package.json +++ b/packages/graph/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.graph", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -34,11 +34,11 @@ "test": "npx jest" }, "dependencies": { - "@microsoft/teams.common": "2.0.5", - "qs": "^6.13.0" + "@microsoft/teams.common": "*", + "qs": "^6.14.2" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.0.2", "@types/qs": "^6.9.15", diff --git a/packages/openai/eslint.config.js b/packages/openai/eslint.config.js index 52f4934dc..5ccf8112f 100644 --- a/packages/openai/eslint.config.js +++ b/packages/openai/eslint.config.js @@ -1 +1 @@ -module.exports = require('@microsoft/teams.config/eslint.config'); +module.exports = require('@microsoft/teams.config/eslint.config').default; diff --git a/packages/openai/package.json b/packages/openai/package.json index 36ed001d9..8b65daadc 100644 --- a/packages/openai/package.json +++ b/packages/openai/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/teams.openai", - "version": "2.0.5", + "version": "0.0.0", "license": "MIT", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -35,15 +35,15 @@ "test": "npx jest" }, "dependencies": { - "@azure/openai": "^2.0.0" + "@azure/openai": "^2.0.0", + "@microsoft/teams.ai": "*", + "@microsoft/teams.common": "*" }, "peerDependencies": { - "@microsoft/teams.ai": "2.0.5", - "@microsoft/teams.common": "2.0.5", "openai": "^4.55.0" }, "devDependencies": { - "@microsoft/teams.config": "2.0.5", + "@microsoft/teams.config": "*", "@types/jest": "^29.5.12", "@types/node": "^22.0.2", "jest": "^29.7.0", diff --git a/scripts/version.js b/scripts/version.js new file mode 100644 index 000000000..546343859 --- /dev/null +++ b/scripts/version.js @@ -0,0 +1,64 @@ +#!/usr/bin/env node + +const { execSync } = require('child_process'); +const fs = require('fs'); +const path = require('path'); +const glob = require('glob'); + +const rootDir = path.resolve(__dirname, '..'); + +// Get version from nbgv +let version; +try { + version = execSync('nbgv get-version -v NpmPackageVersion', { + cwd: rootDir, + encoding: 'utf8', + stdio: ['pipe', 'pipe', 'pipe'] + }).trim(); +} catch (error) { + console.error('Failed to get version from nbgv:', error.message); + console.error('Make sure version.json exists and is committed to git.'); + process.exit(1); +} + +if (!version || version === '0.0.0') { + console.error('nbgv returned invalid version:', version); + console.error('Make sure version.json exists and is committed to git.'); + process.exit(1); +} + +console.log(`Setting version to ${version} (from nbgv)...\n`); + +// Use forward slashes for glob patterns (works cross-platform) +const files = [ + path.join(rootDir, 'package.json'), + ...glob.sync('packages/*/package.json', { cwd: rootDir, absolute: true }), + ...glob.sync('external/*/package.json', { cwd: rootDir, absolute: true }) +]; + +files.forEach(file => { + const content = fs.readFileSync(file, 'utf8'); + const pkg = JSON.parse(content); + const relativePath = path.relative(rootDir, file); + + // Update version for @microsoft/teams.* packages + if (pkg.name && pkg.name.startsWith('@microsoft/teams')) { + pkg.version = version; + } + + // Update internal dependencies + ['dependencies', 'devDependencies', 'peerDependencies'].forEach(depType => { + if (pkg[depType]) { + Object.keys(pkg[depType]).forEach(dep => { + if (dep.startsWith('@microsoft/teams.')) { + pkg[depType][dep] = version; + } + }); + } + }); + + fs.writeFileSync(file, JSON.stringify(pkg, null, 2) + '\n'); + console.log(` ${relativePath}`); +}); + +console.log(`\nDone. Updated ${files.length} files to version ${version}`); diff --git a/turbo/generators/templates/package/package.json.hbs b/turbo/generators/templates/package/package.json.hbs index 308139f16..b84fb7126 100644 --- a/turbo/generators/templates/package/package.json.hbs +++ b/turbo/generators/templates/package/package.json.hbs @@ -29,7 +29,7 @@ "lint:fix": "npx eslint --fix", "test": "npx jest" }, - "peerDependencies": { + "dependencies": { "@microsoft/teams.common": "*" }, "devDependencies": { diff --git a/version.json b/version.json new file mode 100644 index 000000000..12107b37d --- /dev/null +++ b/version.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/main/src/NerdBank.GitVersioning/version.schema.json", + "version": "2.0.6-preview.{height}", + "publicReleaseRefSpec": [ + "^refs/heads/main$", + "^refs/heads/release$" + ] +}