From f50123cbde2c9be31d963f20a373b316d043839e Mon Sep 17 00:00:00 2001 From: "Hazel A. Saenz" <34319979+hsaenzG@users.noreply.github.com> Date: Thu, 24 Sep 2026 14:48:21 -0600 Subject: [PATCH] feat(deploy): add Next.js Vercel adapter with Bedrock/OpenAI support - Add complete Next.js application with Vercel deployment configuration - Implement dual model provider support (Amazon Bedrock and OpenAI) - Create pluggable session backend (memory, file, and S3 storage options) - Add Docker setup with standalone Next.js build for containerized deployment - Include AgentCore server for stateful agent operations - Add chat API route with streaming support - Configure environment templates and deployment documentation - Provide architecture diagrams and deployment guides - Update deploy module README with new adapter reference --- .../02-nextjs-vercel-adapter/.dockerignore | 11 + .../02-nextjs-vercel-adapter/.env.example | 33 + .../02-nextjs-vercel-adapter/.gitignore | 45 + .../02-nextjs-vercel-adapter/AGENTS.md | 9 + .../02-nextjs-vercel-adapter/Dockerfile | 25 + .../02-nextjs-vercel-adapter/README.md | 170 + .../agentcore/Dockerfile | 21 + .../agentcore/server.ts | 99 + .../app/api/chat/route.ts | 136 + .../02-nextjs-vercel-adapter/app/favicon.ico | Bin 0 -> 25931 bytes .../02-nextjs-vercel-adapter/app/globals.css | 26 + .../02-nextjs-vercel-adapter/app/layout.tsx | 32 + .../02-nextjs-vercel-adapter/app/page.tsx | 161 + .../eslint.config.mjs | 18 + .../images/0-architecture.svg | 45 + .../images/1-vercel-serverless.svg | 48 + .../images/2-agentcore-container.svg | 49 + .../images/3-docker-node-host.svg | 48 + .../images/architecture.png | Bin 0 -> 123370 bytes .../images/aws-icons/aws-cloud-logo-32.svg | 8 + .../images/aws-icons/bedrock-64.svg | 12 + .../images/aws-icons/ecr-64.svg | 10 + .../images/aws-icons/s3-64.svg | 12 + .../images/openai-logo.svg | 3 + .../02-nextjs-vercel-adapter/lib/agent.ts | 36 + .../02-nextjs-vercel-adapter/lib/hooks.ts | 40 + .../02-nextjs-vercel-adapter/lib/model.ts | 49 + .../02-nextjs-vercel-adapter/lib/session.ts | 58 + .../02-nextjs-vercel-adapter/lib/tools.ts | 65 + .../02-nextjs-vercel-adapter/next.config.ts | 19 + .../package-lock.json | 8987 +++++++++++++++++ .../02-nextjs-vercel-adapter/package.json | 34 + .../postcss.config.mjs | 7 + .../02-nextjs-vercel-adapter/public/file.svg | 1 + .../02-nextjs-vercel-adapter/public/globe.svg | 1 + .../02-nextjs-vercel-adapter/public/next.svg | 1 + .../public/strands-wordmark.png | Bin 0 -> 16713 bytes .../public/vercel-logo.svg | 3 + .../public/vercel.svg | 1 + .../public/window.svg | 1 + .../02-nextjs-vercel-adapter/template.json | 59 + .../02-nextjs-vercel-adapter/tsconfig.json | 34 + .../02-nextjs-vercel-adapter/vercel.json | 9 + typescript/02-deploy/README.md | 1 + 44 files changed, 10427 insertions(+) create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/.dockerignore create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/.env.example create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/.gitignore create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/AGENTS.md create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/Dockerfile create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/README.md create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/agentcore/Dockerfile create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/agentcore/server.ts create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/app/api/chat/route.ts create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/app/favicon.ico create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/app/globals.css create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/app/layout.tsx create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/app/page.tsx create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/eslint.config.mjs create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/images/0-architecture.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/images/1-vercel-serverless.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/images/2-agentcore-container.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/images/3-docker-node-host.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/images/architecture.png create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/aws-cloud-logo-32.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/bedrock-64.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/ecr-64.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/s3-64.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/images/openai-logo.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/lib/agent.ts create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/lib/hooks.ts create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/lib/model.ts create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/lib/session.ts create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/lib/tools.ts create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/next.config.ts create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/package-lock.json create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/package.json create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/postcss.config.mjs create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/public/file.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/public/globe.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/public/next.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/public/strands-wordmark.png create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/public/vercel-logo.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/public/vercel.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/public/window.svg create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/template.json create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/tsconfig.json create mode 100644 typescript/02-deploy/02-nextjs-vercel-adapter/vercel.json diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/.dockerignore b/typescript/02-deploy/02-nextjs-vercel-adapter/.dockerignore new file mode 100644 index 00000000..7b81f7f9 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/.dockerignore @@ -0,0 +1,11 @@ +node_modules +.next +.git +.env +.env.* +!.env.example +.sessions +npm-debug.log +Dockerfile +.dockerignore +README.md diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/.env.example b/typescript/02-deploy/02-nextjs-vercel-adapter/.env.example new file mode 100644 index 00000000..247bcfa3 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/.env.example @@ -0,0 +1,33 @@ +# --------------------------------------------------------------------------- +# Model provider — the Vercel AI SDK owns the provider; Strands wraps it. +# --------------------------------------------------------------------------- +# Which provider to use: "bedrock" (default) or "openai". +MODEL_PROVIDER=bedrock + +# --- Amazon Bedrock (default) --- +# Uses the standard AWS credential chain. On Vercel, set these as env vars. +AWS_REGION=us-east-2 +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +# Optional session token if using temporary credentials. +# AWS_SESSION_TOKEN= +# Override the default Bedrock model id if desired. +# Amazon Nova Pro (free-tier friendly) via cross-region inference profile. +BEDROCK_MODEL_ID=us.amazon.nova-pro-v1:0 + +# --- OpenAI (optional; set MODEL_PROVIDER=openai) --- +OPENAI_API_KEY= +OPENAI_MODEL_ID=gpt-4o-mini + +# --------------------------------------------------------------------------- +# Sessions — Strands persists conversation state via pluggable storage. +# --------------------------------------------------------------------------- +# "memory" (default), "file", or "s3". +SESSION_BACKEND=memory + +# --- file backend --- +SESSION_DIR=./.sessions + +# --- s3 backend (recommended for serverless / AgentCore container path) --- +SESSION_S3_BUCKET= +SESSION_S3_PREFIX=sessions/ diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/.gitignore b/typescript/02-deploy/02-nextjs-vercel-adapter/.gitignore new file mode 100644 index 00000000..21f6df48 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/.gitignore @@ -0,0 +1,45 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* +!.env.example + +# strands session store (file backend) +/.sessions + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/AGENTS.md b/typescript/02-deploy/02-nextjs-vercel-adapter/AGENTS.md new file mode 100644 index 00000000..643577df --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/AGENTS.md @@ -0,0 +1,9 @@ + + +# This is NOT the Next.js you know + +This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` (resolved from this file's directory; in monorepos the `next` package may not be visible from the repo root) before writing any code. Heed deprecation notices. + +This block is written and re-added by `next dev` — verify at `node_modules/next/dist/server/lib/generate-agent-files.js`. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean. + + diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/Dockerfile b/typescript/02-deploy/02-nextjs-vercel-adapter/Dockerfile new file mode 100644 index 00000000..f6c34745 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/Dockerfile @@ -0,0 +1,25 @@ +# syntax=docker/dockerfile:1 + +# ---- Build the Next.js app (standalone output) ---- +FROM node:22-slim AS builder +WORKDIR /app + +COPY package.json package-lock.json ./ +RUN npm ci + +COPY . . +RUN npm run build + +# ---- Run ---- +FROM node:22-slim AS runner +WORKDIR /app +ENV NODE_ENV=production +ENV PORT=3000 + +# Standalone output bundles only what the server needs. +COPY --from=builder /app/.next/standalone ./ +COPY --from=builder /app/.next/static ./.next/static +COPY --from=builder /app/public ./public + +EXPOSE 3000 +CMD ["node", "server.js"] diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/README.md b/typescript/02-deploy/02-nextjs-vercel-adapter/README.md new file mode 100644 index 00000000..1acae1a7 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/README.md @@ -0,0 +1,170 @@ +# Strands × Vercel AI SDK — Next.js Template + +A `create-next-app`-shaped chat sample where the **Vercel AI SDK owns the client and the providers**, and **[Strands Agents](https://strandsagents.com) runs the loop, tools, sessions, and hooks** inside the Next.js route handler through the **`VercelModel` adapter**. One-click deploy to Vercel, plus a container path to Amazon Bedrock AgentCore. + +## Overview + +### Sample Details + +| Information | Details | +|------------------------|-------------------------------------------------------------------------| +| **Agent Architecture** | Single-agent | +| **Native Tools** | `calculator`, `current_time` | +| **Custom Tools** | None (Zod-typed tools defined inline in `lib/tools.ts`) | +| **MCP Servers** | None | +| **Use Case Vertical** | Developer tooling / Conversational AI | +| **Complexity** | Intermediate | +| **Model Provider** | Amazon Bedrock (default) or OpenAI | +| **SDK Used** | Strands Agents SDK (TypeScript) + Vercel AI SDK | + +### Architecture + +![Architecture — AI SDK on the client, Strands on the server](./images/architecture.png) + +The route handler translates Strands stream events into the AI SDK UI message +stream protocol (`text-delta`, `tool-input-available`, `tool-output-available`), +so `useChat` renders tokens and tool activity as they arrive. + +### Key Features + +- **AI SDK on the client** — `useChat` from `@ai-sdk/react` manages the conversation and streaming UI. +- **Strands on the server** — the agent loop, Zod-typed tools, session persistence, and lifecycle hooks run in `app/api/chat/route.ts`. +- **`VercelModel` adapter** — Strands wraps any Vercel AI SDK provider (`@ai-sdk/amazon-bedrock`, `@ai-sdk/openai`, …). Switch providers with one env var, no code changes. +- **One-click deploy to Vercel** — ships as a serverless Node function. +- **Container path to Amazon Bedrock AgentCore** — the same agent, served over the AgentCore HTTP contract (`/ping` + `/invocations`) on an ARM64 container. + +## Prerequisites + +- Node.js **18+** +- One model provider configured: + - **Amazon Bedrock** (default): AWS credentials and [model access](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html) enabled for the configured model, **or** + - **OpenAI**: an `OPENAI_API_KEY`. +- (Optional) Docker, for the AgentCore / Node host container paths. + +## Setup + +1. **Configure environment variables:** + ```bash + cp .env.example .env.local + # then fill in credentials (see Configuration below) + ``` + +2. **Install dependencies:** + ```bash + npm install + ``` + +## Usage + +**Run the dev server:** +```bash +npm run dev +``` + +Open http://localhost:3000. Try: + +- *"what is 128 divided by 4?"* → calls the `calculator` tool +- *"what time is it in America/Mexico_City?"* → calls the `current_time` tool + +## Configuration + +All configuration is via environment variables — see [`.env.example`](./.env.example). + +### Model provider (the AI SDK owns the provider; Strands wraps it) + +| Variable | Default | Description | +|---|---|---| +| `MODEL_PROVIDER` | `bedrock` | `bedrock` or `openai`. | +| `AWS_REGION` | `us-east-1` | Region for Amazon Bedrock. | +| `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` | — | AWS credentials (Bedrock). | +| `BEDROCK_MODEL_ID` | `us.anthropic.claude-sonnet-4-20250514-v1:0` | Bedrock model id. | +| `OPENAI_API_KEY` | — | Required when `MODEL_PROVIDER=openai`. | +| `OPENAI_MODEL_ID` | `gpt-4o-mini` | OpenAI model id. | + +To switch to OpenAI, set `MODEL_PROVIDER=openai` and `OPENAI_API_KEY` — no code changes. + +### Sessions (Strands persists conversation state) + +| Variable | Default | Description | +|---|---|---| +| `SESSION_BACKEND` | `memory` | `memory`, `file`, or `s3`. | +| `SESSION_DIR` | `./.sessions` | Directory for the `file` backend. | +| `SESSION_S3_BUCKET` | — | Bucket for the `s3` backend. | +| `SESSION_S3_PREFIX` | `sessions/` | Key prefix for the `s3` backend. | + +## Deploy to Vercel + +![Vercel serverless architecture](./images/1-vercel-serverless.svg) + +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fstrands-agents%2Fsamples%2Ftree%2Fmain%2Ftypescript%2F02-deploy%2F02-nextjs-vercel-adapter&project-name=strands-nextjs-vercel-adapter&repository-name=strands-nextjs-vercel-adapter&env=MODEL_PROVIDER,AWS_REGION,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY&envDescription=Model%20provider%20and%20credentials.%20See%20.env.example.&envLink=https%3A%2F%2Fgithub.com%2Fstrands-agents%2Fsamples%2Fblob%2Fmain%2Ftypescript%2F02-deploy%2F02-nextjs-vercel-adapter%2F.env.example) + +The `/api/chat` route runs on the Node.js runtime. Set your provider env vars in +the Vercel dashboard (see Configuration). For persistence across serverless +instances, use `SESSION_BACKEND=s3`. + +## Container path → Amazon Bedrock AgentCore + +The same Strands agent (`lib/agent.ts`) is also served over the AgentCore HTTP +contract: `GET /ping` and `POST /invocations` (SSE streaming) on `0.0.0.0:8080`, +ARM64. + +![Amazon Bedrock AgentCore container architecture](./images/2-agentcore-container.svg) + +```bash +# Run the AgentCore runtime locally +npm run agentcore +curl localhost:8080/ping +curl -N -X POST localhost:8080/invocations \ + -H 'content-type: application/json' \ + -d '{"prompt":"what is 21 * 2?","sessionId":"demo"}' + +# Build the ARM64 image for AgentCore +docker build --platform linux/arm64 -f agentcore/Dockerfile -t strands-agentcore . +``` + +Push the image to Amazon ECR and create an AgentCore Runtime pointing at it. Use +`SESSION_BACKEND=s3` so conversation state survives across instances. See the +[AgentCore HTTP protocol contract](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-http-protocol-contract.html). + +## Container path → any Node host + +A production `Dockerfile` (standalone Next.js output) is included for running the +full web app anywhere: + +![Docker on any Node host architecture](./images/3-docker-node-host.svg) + +```bash +docker build -t strands-nextjs . +docker run -p 3000:3000 --env-file .env.local strands-nextjs +``` + +## Project Structure + +| Component | File(s) | Description | +|---|---|---| +| Chat UI | `app/page.tsx` | Client chat UI (`useChat`). | +| API route | `app/api/chat/route.ts` | Strands loop bridged to the AI SDK UI stream. | +| Model | `lib/model.ts` | Provider selection → `VercelModel`. | +| Tools | `lib/tools.ts` | Zod-typed tools. | +| Hooks | `lib/hooks.ts` | `LoggingPlugin` — lifecycle hooks. | +| Sessions | `lib/session.ts` | Pluggable session storage. | +| Agent | `lib/agent.ts` | Assembles the `Agent`. | +| AgentCore | `agentcore/` | Container path to Amazon Bedrock AgentCore. | + +## Additional Resources + +- [Strands Agents](https://strandsagents.com) · [`VercelModel` adapter](https://github.com/strands-agents/harness-sdk/blob/main/strands-ts/src/models/vercel.ts) +- [Vercel AI SDK](https://ai-sdk.dev) · [`useChat`](https://ai-sdk.dev/docs/reference/ai-sdk-ui/use-chat) +- [Amazon Bedrock AgentCore](https://docs.aws.amazon.com/bedrock-agentcore/) + +--- + +## Disclaimer + +This sample is provided for educational and demonstration purposes only. It is not intended for production use without further development, testing, and hardening. + +For production deployments, consider: +- Implementing appropriate content filtering and safety measures +- Following security best practices for your deployment environment +- Conducting thorough testing and validation +- Reviewing and adjusting configurations for your specific requirements diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/agentcore/Dockerfile b/typescript/02-deploy/02-nextjs-vercel-adapter/agentcore/Dockerfile new file mode 100644 index 00000000..ae38411c --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/agentcore/Dockerfile @@ -0,0 +1,21 @@ +# syntax=docker/dockerfile:1 +# +# Amazon Bedrock AgentCore Runtime image. +# AgentCore requires an ARM64 container that serves /ping + /invocations on :8080. +# Build: docker build --platform linux/arm64 -f agentcore/Dockerfile -t strands-agentcore . +FROM --platform=linux/arm64 node:22-slim +WORKDIR /app + +COPY package.json package-lock.json ./ +RUN npm ci + +COPY lib ./lib +COPY agentcore ./agentcore +COPY tsconfig.json ./ + +ENV NODE_ENV=production +ENV PORT=8080 +EXPOSE 8080 + +# tsx runs the TypeScript entrypoint directly (no separate build step). +CMD ["npx", "tsx", "agentcore/server.ts"] diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/agentcore/server.ts b/typescript/02-deploy/02-nextjs-vercel-adapter/agentcore/server.ts new file mode 100644 index 00000000..5df006b2 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/agentcore/server.ts @@ -0,0 +1,99 @@ +/** + * Amazon Bedrock AgentCore Runtime entrypoint. + * + * This is the **container path**: the same Strands agent from `lib/agent.ts`, + * exposed over the AgentCore HTTP contract instead of a Next.js route. + * + * - Host: 0.0.0.0, Port: 8080 (ARM64 container) + * - GET /ping -> health check { "status": "Healthy" } + * - POST /invocations -> agent call; streams SSE (`data: {...}` lines) + * + * See: https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-http-protocol-contract.html + * + * Run locally: npm run agentcore + * Build image: see agentcore/Dockerfile + */ +import { createServer, type IncomingMessage, type ServerResponse } from "node:http"; +import { createAgent } from "../lib/agent"; + +const PORT = Number(process.env.PORT ?? 8080); +const HOST = "0.0.0.0"; + +function readBody(req: IncomingMessage): Promise { + return new Promise((resolve, reject) => { + const chunks: Buffer[] = []; + req.on("data", (c) => chunks.push(c as Buffer)); + req.on("end", () => resolve(Buffer.concat(chunks).toString("utf8"))); + req.on("error", reject); + }); +} + +function sse(res: ServerResponse, data: unknown): void { + res.write(`data: ${JSON.stringify(data)}\n\n`); +} + +const server = createServer(async (req, res) => { + // Health check. + if (req.method === "GET" && req.url === "/ping") { + res.writeHead(200, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ status: "Healthy" })); + return; + } + + // Agent invocation (streaming). + if (req.method === "POST" && req.url === "/invocations") { + try { + const raw = await readBody(req); + const payload = raw ? (JSON.parse(raw) as { prompt?: string; sessionId?: string }) : {}; + const prompt = payload.prompt ?? ""; + const sessionId = payload.sessionId ?? "default-session"; + + const agent = await createAgent(sessionId); + + res.writeHead(200, { + "Content-Type": "text/event-stream", + "Cache-Control": "no-cache", + Connection: "keep-alive", + }); + + for await (const event of agent.stream(prompt)) { + if ( + event.type === "modelStreamUpdateEvent" && + event.event.type === "modelContentBlockDeltaEvent" && + event.event.delta.type === "textDelta" && + event.event.delta.text + ) { + sse(res, { type: "text", text: event.event.delta.text }); + } else if (event.type === "beforeToolCallEvent") { + sse(res, { + type: "tool-call", + toolName: event.toolUse.name, + input: event.toolUse.input, + }); + } else if (event.type === "afterToolCallEvent") { + sse(res, { type: "tool-result", toolName: event.toolUse.name }); + } + } + + sse(res, { type: "done" }); + res.end(); + } catch (error) { + const message = error instanceof Error ? error.message : "Unknown error"; + if (!res.headersSent) { + res.writeHead(500, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ status: "error", error: message })); + } else { + sse(res, { type: "error", error: message }); + res.end(); + } + } + return; + } + + res.writeHead(404, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ status: "not_found" })); +}); + +server.listen(PORT, HOST, () => { + console.log(`AgentCore runtime listening on http://${HOST}:${PORT}`); +}); diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/app/api/chat/route.ts b/typescript/02-deploy/02-nextjs-vercel-adapter/app/api/chat/route.ts new file mode 100644 index 00000000..3e02a558 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/app/api/chat/route.ts @@ -0,0 +1,136 @@ +/** + * Chat route handler — where the two SDKs meet. + * + * The **Vercel AI SDK owns the client**: the browser talks to this endpoint with + * `useChat`, sending `UIMessage[]`. On the server, **Strands runs the loop**: + * we build an `Agent` (model via `VercelModel`, tools, session, hooks) and stream + * its events. We translate Strands stream events into the AI SDK UI message + * stream protocol so `useChat` renders tokens and tool activity as they arrive. + */ +import { + createUIMessageStream, + createUIMessageStreamResponse, + type UIMessage, +} from "ai"; +import { createAgent } from "@/lib/agent"; + +// Strands + the AWS/AI SDKs need the Node.js runtime (not Edge). +export const runtime = "nodejs"; +export const maxDuration = 60; + +interface ChatRequestBody { + messages: UIMessage[]; + /** Optional stable id so the conversation persists across requests. */ + id?: string; +} + +export async function POST(req: Request): Promise { + const { messages, id }: ChatRequestBody = await req.json(); + + // Use the chat id as the Strands session id so history persists per conversation. + const sessionId = id ?? "default-session"; + const agent = await createAgent(sessionId); + + // Strands persists its own history via the SessionManager, so we only forward + // the latest user turn each request. Pull its text straight from the UI parts. + const lastUser = [...messages].reverse().find((m) => m.role === "user"); + const promptText = textFromParts(lastUser?.parts); + + const stream = createUIMessageStream({ + execute: async ({ writer }) => { + const textId = crypto.randomUUID(); + let textOpen = false; + + const openText = () => { + if (!textOpen) { + writer.write({ type: "text-start", id: textId }); + textOpen = true; + } + }; + const closeText = () => { + if (textOpen) { + writer.write({ type: "text-end", id: textId }); + textOpen = false; + } + }; + + for await (const event of agent.stream(promptText)) { + switch (event.type) { + // Streaming model output: forward text deltas as they arrive. + case "modelStreamUpdateEvent": { + const inner = event.event; + if ( + inner.type === "modelContentBlockDeltaEvent" && + inner.delta.type === "textDelta" && + inner.delta.text + ) { + openText(); + writer.write({ + type: "text-delta", + id: textId, + delta: inner.delta.text, + }); + } + break; + } + + // A tool is about to run: surface it as a tool-input in the UI stream. + case "beforeToolCallEvent": { + closeText(); + writer.write({ + type: "tool-input-available", + toolCallId: event.toolUse.toolUseId, + toolName: event.toolUse.name, + input: event.toolUse.input, + }); + break; + } + + // Tool finished: surface its output. + case "afterToolCallEvent": { + writer.write({ + type: "tool-output-available", + toolCallId: event.toolUse.toolUseId, + output: serializeToolResult(event.result), + }); + break; + } + } + } + + closeText(); + }, + onError: (error) => { + console.error("[chat] stream error:", error); + return error instanceof Error ? error.message : "Unknown error"; + }, + }); + + return createUIMessageStreamResponse({ stream }); +} + +/** Extract plain text from a UIMessage's parts. */ +function textFromParts(parts: UIMessage["parts"] | undefined): string { + if (!parts) return ""; + return parts + .map((part) => (part.type === "text" ? part.text : "")) + .join(""); +} + +/** Flatten a Strands ToolResultBlock into a JSON-serializable value for the UI. */ +function serializeToolResult(result: unknown): unknown { + if (result && typeof result === "object" && "content" in result) { + const content = (result as { content?: unknown }).content; + if (Array.isArray(content)) { + const text = content + .map((c) => + c && typeof c === "object" && "text" in c + ? String((c as { text: unknown }).text) + : "", + ) + .join(""); + if (text) return text; + } + } + return result; +} diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/app/favicon.ico b/typescript/02-deploy/02-nextjs-vercel-adapter/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 zcmeHv30#a{`}aL_*G&7qml|y<+KVaDM2m#dVr!KsA!#An?kSQM(q<_dDNCpjEux83 zLb9Z^XxbDl(w>%i@8hT6>)&Gu{h#Oeyszu?xtw#Zb1mO{pgX9699l+Qppw7jXaYf~-84xW z)w4x8?=youko|}Vr~(D$UXIbiXABHh`p1?nn8Po~fxRJv}|0e(BPs|G`(TT%kKVJAdg5*Z|x0leQq0 zkdUBvb#>9F()jo|T~kx@OM8$9wzs~t2l;K=woNssA3l6|sx2r3+kdfVW@e^8e*E}v zA1y5{bRi+3Z`uD3{F7LgFJDdvm;nJilkzDku>BwXH(8ItVCXk*-lSJnR?-2UN%hJ){&rlvg`CDTj z)Bzo!3v7Ou#83zEDEFcKt(f1E0~=rqeEbTnMvWR#{+9pg%7G8y>u1OVRUSoox-ovF z2Ydma(;=YuBY(eI|04{hXzZD6_f(v~H;C~y5=DhAC{MMS>2fm~1H_t2$56pc$NH8( z5bH|<)71dV-_oCHIrzrT`2s-5w_+2CM0$95I6X8p^r!gHp+j_gd;9O<1~CEQQGS8) zS9Qh3#p&JM-G8rHekNmKVewU;pJRcTAog68KYo^dRo}(M>36U4Us zfgYWSiHZL3;lpWT=zNAW>Dh#mB!_@Lg%$ms8N-;aPqMn+C2HqZgz&9~Eu z4|Kp<`$q)Uw1R?y(~S>ePdonHxpV1#eSP1B;Ogo+-Pk}6#0GsZZ5!||ev2MGdh}_m z{DeR7?0-1^zVs&`AV6Vt;r3`I`OI_wgs*w=eO%_#7Kepl{B@xiyCANc(l zzIyd4y|c6PXWq9-|KM8(zIk8LPk(>a)zyFWjhT!$HJ$qX1vo@d25W<fvZQ2zUz5WRc(UnFMKHwe1| zWmlB1qdbiA(C0jmnV<}GfbKtmcu^2*P^O?MBLZKt|As~ge8&AAO~2K@zbXelK|4T<{|y4`raF{=72kC2Kn(L4YyenWgrPiv z@^mr$t{#X5VuIMeL!7Ab6_kG$&#&5p*Z{+?5U|TZ`B!7llpVmp@skYz&n^8QfPJzL z0G6K_OJM9x+Wu2gfN45phANGt{7=C>i34CV{Xqlx(fWpeAoj^N0Biu`w+MVcCUyU* zDZuzO0>4Z6fbu^T_arWW5n!E45vX8N=bxTVeFoep_G#VmNlQzAI_KTIc{6>c+04vr zx@W}zE5JNSU>!THJ{J=cqjz+4{L4A{Ob9$ZJ*S1?Ggg3klFp!+Y1@K+pK1DqI|_gq z5ZDXVpge8-cs!o|;K73#YXZ3AShj50wBvuq3NTOZ`M&qtjj#GOFfgExjg8Gn8>Vq5 z`85n+9|!iLCZF5$HJ$Iu($dm?8~-ofu}tEc+-pyke=3!im#6pk_Wo8IA|fJwD&~~F zc16osQ)EBo58U7XDuMexaPRjU@h8tXe%S{fA0NH3vGJFhuyyO!Uyl2^&EOpX{9As0 zWj+P>{@}jxH)8|r;2HdupP!vie{sJ28b&bo!8`D^x}TE$%zXNb^X1p@0PJ86`dZyj z%ce7*{^oo+6%&~I!8hQy-vQ7E)0t0ybH4l%KltWOo~8cO`T=157JqL(oq_rC%ea&4 z2NcTJe-HgFjNg-gZ$6!Y`SMHrlj}Etf7?r!zQTPPSv}{so2e>Fjs1{gzk~LGeesX%r(Lh6rbhSo_n)@@G-FTQy93;l#E)hgP@d_SGvyCp0~o(Y;Ee8{ zdVUDbHm5`2taPUOY^MAGOw*>=s7=Gst=D+p+2yON!0%Hk` zz5mAhyT4lS*T3LS^WSxUy86q&GnoHxzQ6vm8)VS}_zuqG?+3td68_x;etQAdu@sc6 zQJ&5|4(I?~3d-QOAODHpZ=hlSg(lBZ!JZWCtHHSj`0Wh93-Uk)_S%zsJ~aD>{`A0~ z9{AG(e|q3g5B%wYKRxiL2Y$8(4w6bzchKuloQW#e&S3n+P- z8!ds-%f;TJ1>)v)##>gd{PdS2Oc3VaR`fr=`O8QIO(6(N!A?pr5C#6fc~Ge@N%Vvu zaoAX2&(a6eWy_q&UwOhU)|P3J0Qc%OdhzW=F4D|pt0E4osw;%<%Dn58hAWD^XnZD= z>9~H(3bmLtxpF?a7su6J7M*x1By7YSUbxGi)Ot0P77`}P3{)&5Un{KD?`-e?r21!4vTTnN(4Y6Lin?UkSM z`MXCTC1@4A4~mvz%Rh2&EwY))LeoT=*`tMoqcEXI>TZU9WTP#l?uFv+@Dn~b(>xh2 z;>B?;Tz2SR&KVb>vGiBSB`@U7VIWFSo=LDSb9F{GF^DbmWAfpms8Sx9OX4CnBJca3 zlj9(x!dIjN?OG1X4l*imJNvRCk}F%!?SOfiOq5y^mZW)jFL@a|r-@d#f7 z2gmU8L3IZq0ynIws=}~m^#@&C%J6QFo~Mo4V`>v7MI-_!EBMMtb%_M&kvAaN)@ZVw z+`toz&WG#HkWDjnZE!6nk{e-oFdL^$YnbOCN}JC&{$#$O27@|Tn-skXr)2ml2~O!5 zX+gYoxhoc7qoU?C^3~&!U?kRFtnSEecWuH0B0OvLodgUAi}8p1 zrO6RSXHH}DMc$&|?D004DiOVMHV8kXCP@7NKB zgaZq^^O<7PoKEp72kby@W0Z!Y*Ay{&vfg#C&gG@YVR9g?FEocMUi1gSN$+V+ayF45{a zuDZDTN}mS|;BO%gEf}pjBfN2-gIrU#G5~cucA;dokXW89%>AyXJJI z9X4UlIWA|ZYHgbI z5?oFk@A=Ik7lrEQPDH!H+b`7_Y~aDb_qa=B2^Y&Ow41cU=4WDd40dp5(QS-WMN-=Y z9g;6_-JdNU;|6cPwf$ak*aJIcwL@1n$#l~zi{c{EW?T;DaW*E8DYq?Umtz{nJ&w-M zEMyTDrC&9K$d|kZe2#ws6)L=7K+{ zQw{XnV6UC$6-rW0emqm8wJoeZK)wJIcV?dST}Z;G0Arq{dVDu0&4kd%N!3F1*;*pW zR&qUiFzK=@44#QGw7k1`3t_d8&*kBV->O##t|tonFc2YWrL7_eqg+=+k;!F-`^b8> z#KWCE8%u4k@EprxqiV$VmmtiWxDLgnGu$Vs<8rppV5EajBXL4nyyZM$SWVm!wnCj-B!Wjqj5-5dNXukI2$$|Bu3Lrw}z65Lc=1G z^-#WuQOj$hwNGG?*CM_TO8Bg-1+qc>J7k5c51U8g?ZU5n?HYor;~JIjoWH-G>AoUP ztrWWLbRNqIjW#RT*WqZgPJXU7C)VaW5}MiijYbABmzoru6EmQ*N8cVK7a3|aOB#O& zBl8JY2WKfmj;h#Q!pN%9o@VNLv{OUL?rixHwOZuvX7{IJ{(EdPpuVFoQqIOa7giLVkBOKL@^smUA!tZ1CKRK}#SSM)iQHk)*R~?M!qkCruaS!#oIL1c z?J;U~&FfH#*98^G?i}pA{ z9Jg36t4=%6mhY(quYq*vSxptes9qy|7xSlH?G=S@>u>Ebe;|LVhs~@+06N<4CViBk zUiY$thvX;>Tby6z9Y1edAMQaiH zm^r3v#$Q#2T=X>bsY#D%s!bhs^M9PMAcHbCc0FMHV{u-dwlL;a1eJ63v5U*?Q_8JO zT#50!RD619#j_Uf))0ooADz~*9&lN!bBDRUgE>Vud-i5ck%vT=r^yD*^?Mp@Q^v+V zG#-?gKlr}Eeqifb{|So?HM&g91P8|av8hQoCmQXkd?7wIJwb z_^v8bbg`SAn{I*4bH$u(RZ6*xUhuA~hc=8czK8SHEKTzSxgbwi~9(OqJB&gwb^l4+m`k*Q;_?>Y-APi1{k zAHQ)P)G)f|AyjSgcCFps)Fh6Bca*Xznq36!pV6Az&m{O8$wGFD? zY&O*3*J0;_EqM#jh6^gMQKpXV?#1?>$ml1xvh8nSN>-?H=V;nJIwB07YX$e6vLxH( zqYwQ>qxwR(i4f)DLd)-$P>T-no_c!LsN@)8`e;W@)-Hj0>nJ-}Kla4-ZdPJzI&Mce zv)V_j;(3ERN3_@I$N<^|4Lf`B;8n+bX@bHbcZTopEmDI*Jfl)-pFDvo6svPRoo@(x z);_{lY<;);XzT`dBFpRmGrr}z5u1=pC^S-{ce6iXQlLGcItwJ^mZx{m$&DA_oEZ)B{_bYPq-HA zcH8WGoBG(aBU_j)vEy+_71T34@4dmSg!|M8Vf92Zj6WH7Q7t#OHQqWgFE3ARt+%!T z?oLovLVlnf?2c7pTc)~cc^($_8nyKwsN`RA-23ed3sdj(ys%pjjM+9JrctL;dy8a( z@en&CQmnV(()bu|Y%G1-4a(6x{aLytn$T-;(&{QIJB9vMox11U-1HpD@d(QkaJdEb zG{)+6Dos_L+O3NpWo^=gR?evp|CqEG?L&Ut#D*KLaRFOgOEK(Kq1@!EGcTfo+%A&I z=dLbB+d$u{sh?u)xP{PF8L%;YPPW53+@{>5W=Jt#wQpN;0_HYdw1{ksf_XhO4#2F= zyPx6Lx2<92L-;L5PD`zn6zwIH`Jk($?Qw({erA$^bC;q33hv!d!>%wRhj# zal^hk+WGNg;rJtb-EB(?czvOM=H7dl=vblBwAv>}%1@{}mnpUznfq1cE^sgsL0*4I zJ##!*B?=vI_OEVis5o+_IwMIRrpQyT_Sq~ZU%oY7c5JMIADzpD!Upz9h@iWg_>>~j zOLS;wp^i$-E?4<_cp?RiS%Rd?i;f*mOz=~(&3lo<=@(nR!_Rqiprh@weZlL!t#NCc zO!QTcInq|%#>OVgobj{~ixEUec`E25zJ~*DofsQdzIa@5^nOXj2T;8O`l--(QyU^$t?TGY^7#&FQ+2SS3B#qK*k3`ye?8jUYSajE5iBbJls75CCc(m3dk{t?- zopcER9{Z?TC)mk~gpi^kbbu>b-+a{m#8-y2^p$ka4n60w;Sc2}HMf<8JUvhCL0B&Btk)T`ctE$*qNW8L$`7!r^9T+>=<=2qaq-;ll2{`{Rg zc5a0ZUI$oG&j-qVOuKa=*v4aY#IsoM+1|c4Z)<}lEDvy;5huB@1RJPquU2U*U-;gu z=En2m+qjBzR#DEJDO`WU)hdd{Vj%^0V*KoyZ|5lzV87&g_j~NCjwv0uQVqXOb*QrQ zy|Qn`hxx(58c70$E;L(X0uZZ72M1!6oeg)(cdKO ze0gDaTz+ohR-#d)NbAH4x{I(21yjwvBQfmpLu$)|m{XolbgF!pmsqJ#D}(ylp6uC> z{bqtcI#hT#HW=wl7>p!38sKsJ`r8}lt-q%Keqy%u(xk=yiIJiUw6|5IvkS+#?JTBl z8H5(Q?l#wzazujH!8o>1xtn8#_w+397*_cy8!pQGP%K(Ga3pAjsaTbbXJlQF_+m+-UpUUent@xM zg%jqLUExj~o^vQ3Gl*>wh=_gOr2*|U64_iXb+-111aH}$TjeajM+I20xw(((>fej-@CIz4S1pi$(#}P7`4({6QS2CaQS4NPENDp>sAqD z$bH4KGzXGffkJ7R>V>)>tC)uax{UsN*dbeNC*v}#8Y#OWYwL4t$ePR?VTyIs!wea+ z5Urmc)X|^`MG~*dS6pGSbU+gPJoq*^a=_>$n4|P^w$sMBBy@f*Z^Jg6?n5?oId6f{ z$LW4M|4m502z0t7g<#Bx%X;9<=)smFolV&(V^(7Cv2-sxbxopQ!)*#ZRhTBpx1)Fc zNm1T%bONzv6@#|dz(w02AH8OXe>kQ#1FMCzO}2J_mST)+ExmBr9cva-@?;wnmWMOk z{3_~EX_xadgJGv&H@zK_8{(x84`}+c?oSBX*Ge3VdfTt&F}yCpFP?CpW+BE^cWY0^ zb&uBN!Ja3UzYHK-CTyA5=L zEMW{l3Usky#ly=7px648W31UNV@K)&Ub&zP1c7%)`{);I4b0Q<)B}3;NMG2JH=X$U zfIW4)4n9ZM`-yRj67I)YSLDK)qfUJ_ij}a#aZN~9EXrh8eZY2&=uY%2N0UFF7<~%M zsB8=erOWZ>Ct_#^tHZ|*q`H;A)5;ycw*IcmVxi8_0Xk}aJA^ath+E;xg!x+As(M#0=)3!NJR6H&9+zd#iP(m0PIW8$ z1Y^VX`>jm`W!=WpF*{ioM?C9`yOR>@0q=u7o>BP-eSHqCgMDj!2anwH?s%i2p+Q7D zzszIf5XJpE)IG4;d_(La-xenmF(tgAxK`Y4sQ}BSJEPs6N_U2vI{8=0C_F?@7<(G; zo$~G=8p+076G;`}>{MQ>t>7cm=zGtfbdDXm6||jUU|?X?CaE?(<6bKDYKeHlz}DA8 zXT={X=yp_R;HfJ9h%?eWvQ!dRgz&Su*JfNt!Wu>|XfU&68iRikRrHRW|ZxzRR^`eIGt zIeiDgVS>IeExKVRWW8-=A=yA`}`)ZkWBrZD`hpWIxBGkh&f#ijr449~m`j6{4jiJ*C!oVA8ZC?$1RM#K(_b zL9TW)kN*Y4%^-qPpMP7d4)o?Nk#>aoYHT(*g)qmRUb?**F@pnNiy6Fv9rEiUqD(^O zzyS?nBrX63BTRYduaG(0VVG2yJRe%o&rVrLjbxTaAFTd8s;<<@Qs>u(<193R8>}2_ zuwp{7;H2a*X7_jryzriZXMg?bTuegABb^87@SsKkr2)0Gyiax8KQWstw^v#ix45EVrcEhr>!NMhprl$InQMzjSFH54x5k9qHc`@9uKQzvL4ihcq{^B zPrVR=o_ic%Y>6&rMN)hTZsI7I<3&`#(nl+3y3ys9A~&^=4?PL&nd8)`OfG#n zwAMN$1&>K++c{^|7<4P=2y(B{jJsQ0a#U;HTo4ZmWZYvI{+s;Td{Yzem%0*k#)vjpB zia;J&>}ICate44SFYY3vEelqStQWFihx%^vQ@Do(sOy7yR2@WNv7Y9I^yL=nZr3mb zXKV5t@=?-Sk|b{XMhA7ZGB@2hqsx}4xwCW!in#C zI@}scZlr3-NFJ@NFaJlhyfcw{k^vvtGl`N9xSo**rDW4S}i zM9{fMPWo%4wYDG~BZ18BD+}h|GQKc-g^{++3MY>}W_uq7jGHx{mwE9fZiPCoxN$+7 zrODGGJrOkcPQUB(FD5aoS4g~7#6NR^ma7-!>mHuJfY5kTe6PpNNKC9GGRiu^L31uG z$7v`*JknQHsYB!Tm_W{a32TM099djW%5e+j0Ve_ct}IM>XLF1Ap+YvcrLV=|CKo6S zb+9Nl3_YdKP6%Cxy@6TxZ>;4&nTneadr z_ES90ydCev)LV!dN=#(*f}|ZORFdvkYBni^aLbUk>BajeWIOcmHP#8S)*2U~QKI%S zyrLmtPqb&TphJ;>yAxri#;{uyk`JJqODDw%(Z=2`1uc}br^V%>j!gS)D*q*f_-qf8&D;W1dJgQMlaH5er zN2U<%Smb7==vE}dDI8K7cKz!vs^73o9f>2sgiTzWcwY|BMYHH5%Vn7#kiw&eItCqa zIkR2~Q}>X=Ar8W|^Ms41Fm8o6IB2_j60eOeBB1Br!boW7JnoeX6Gs)?7rW0^5psc- zjS16yb>dFn>KPOF;imD}e!enuIniFzv}n$m2#gCCv4jM#ArwlzZ$7@9&XkFxZ4n!V zj3dyiwW4Ki2QG{@i>yuZXQizw_OkZI^-3otXC{!(lUpJF33gI60ak;Uqitp74|B6I zgg{b=Iz}WkhCGj1M=hu4#Aw173YxIVbISaoc z-nLZC*6Tgivd5V`K%GxhBsp@SUU60-rfc$=wb>zdJzXS&-5(NRRodFk;Kxk!S(O(a0e7oY=E( zAyS;Ow?6Q&XA+cnkCb{28_1N8H#?J!*$MmIwLq^*T_9-z^&UE@A(z9oGYtFy6EZef LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/app/globals.css b/typescript/02-deploy/02-nextjs-vercel-adapter/app/globals.css new file mode 100644 index 00000000..a2dc41ec --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/app/globals.css @@ -0,0 +1,26 @@ +@import "tailwindcss"; + +:root { + --background: #ffffff; + --foreground: #171717; +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --font-sans: var(--font-geist-sans); + --font-mono: var(--font-geist-mono); +} + +@media (prefers-color-scheme: dark) { + :root { + --background: #0a0a0a; + --foreground: #ededed; + } +} + +body { + background: var(--background); + color: var(--foreground); + font-family: Arial, Helvetica, sans-serif; +} diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/app/layout.tsx b/typescript/02-deploy/02-nextjs-vercel-adapter/app/layout.tsx new file mode 100644 index 00000000..acb0e105 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/app/layout.tsx @@ -0,0 +1,32 @@ +import type { Metadata } from "next"; +import { Geist, Geist_Mono } from "next/font/google"; +import "./globals.css"; + +const geistSans = Geist({ + variable: "--font-geist-sans", + subsets: ["latin"], +}); + +const geistMono = Geist_Mono({ + variable: "--font-geist-mono", + subsets: ["latin"], +}); + +export const metadata: Metadata = { + title: "Strands × Vercel AI SDK — Next.js Template", + description: + "A Next.js chat template where the Vercel AI SDK owns the client and providers, and Strands Agents runs the loop, tools, sessions, and hooks in the route handler via the VercelModel adapter.", +}; + +export default function RootLayout({ + children, +}: Readonly<{ children: React.ReactNode }>) { + return ( + + {children} + + ); +} diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/app/page.tsx b/typescript/02-deploy/02-nextjs-vercel-adapter/app/page.tsx new file mode 100644 index 00000000..a4306dc8 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/app/page.tsx @@ -0,0 +1,161 @@ +"use client"; + +/** + * Chat client — owned by the Vercel AI SDK. + * + * `useChat` manages the conversation state and streams responses from + * `/api/chat`, where Strands runs the agent loop. We keep this deliberately + * minimal (create-next-app-shaped) so it's easy to restyle. + */ +import { useState } from "react"; +import Image from "next/image"; +import { useChat } from "@ai-sdk/react"; +import { DefaultChatTransport, type UIMessage } from "ai"; + +// A stable id lets the server persist this conversation across requests. +const CHAT_ID = "demo-conversation"; + +export default function Home() { + const [input, setInput] = useState(""); + const { messages, sendMessage, status, error, stop } = useChat({ + id: CHAT_ID, + transport: new DefaultChatTransport({ api: "/api/chat" }), + }); + + const isBusy = status === "submitted" || status === "streaming"; + + function handleSubmit(e: React.FormEvent) { + e.preventDefault(); + const text = input.trim(); + if (!text || isBusy) return; + sendMessage({ text }); + setInput(""); + } + + return ( +
+
+
+ Strands + × + Vercel +
+

+ Next.js template — the AI SDK owns the client & providers; Strands + runs the loop, tools, sessions & hooks via the VercelModel adapter. +

+
+ +
+ {messages.length === 0 && ( +

+ Ask something. Try "what is 128 divided by 4?" or + "what time is it in America/Mexico_City?" to see tool calls. +

+ )} + + {messages.map((message) => ( + + ))} + + {error && ( +

+ {error.message} +

+ )} +
+ +
+ setInput(e.target.value)} + placeholder="Send a message…" + disabled={isBusy} + /> + {isBusy ? ( + + ) : ( + + )} +
+
+ ); +} + +function MessageBubble({ message }: { message: UIMessage }) { + const isUser = message.role === "user"; + return ( +
+
+ {message.parts.map((part, i) => { + if (part.type === "text") { + return {part.text}; + } + // Tool activity surfaces as dynamic-tool or tool- parts. + if (part.type === "dynamic-tool" || part.type.startsWith("tool-")) { + const toolPart = part as { + type: string; + toolName?: string; + state?: string; + input?: unknown; + output?: unknown; + }; + const name = + toolPart.toolName ?? part.type.replace(/^tool-/, ""); + return ( +
+
🔧 {name}
+ {toolPart.input != null && ( +
input: {JSON.stringify(toolPart.input)}
+ )} + {toolPart.output != null && ( +
output: {JSON.stringify(toolPart.output)}
+ )} +
+ ); + } + return null; + })} +
+
+ ); +} diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/eslint.config.mjs b/typescript/02-deploy/02-nextjs-vercel-adapter/eslint.config.mjs new file mode 100644 index 00000000..05e726d1 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/eslint.config.mjs @@ -0,0 +1,18 @@ +import { defineConfig, globalIgnores } from "eslint/config"; +import nextVitals from "eslint-config-next/core-web-vitals"; +import nextTs from "eslint-config-next/typescript"; + +const eslintConfig = defineConfig([ + ...nextVitals, + ...nextTs, + // Override default ignores of eslint-config-next. + globalIgnores([ + // Default ignores of eslint-config-next: + ".next/**", + "out/**", + "build/**", + "next-env.d.ts", + ]), +]); + +export default eslintConfig; diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/images/0-architecture.svg b/typescript/02-deploy/02-nextjs-vercel-adapter/images/0-architecture.svg new file mode 100644 index 00000000..bfecaa53 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/images/0-architecture.svg @@ -0,0 +1,45 @@ + + + + + + + + Architecture — AI SDK on the client, Strands on the server + + + Browser (Vercel AI SDK) + + Next.js route handler (Strands) + + + + app/page.tsx + useChat() + · owns messages + · owns transport + · renders parts + + + + app/api/chat/route.ts + createAgent(sessionId) + · VercelModel({ provider }) + · tools (Zod) + · SessionManager (memory / file / s3) + · LoggingPlugin (hooks) + + agent.stream() → UI message chunks + + + + POST /api/chat + + + + UI message stream + + + The route handler translates Strands stream events into the AI SDK UI message stream protocol + (text-delta, tool-input-available, tool-output-available), so useChat renders tokens and tool activity as they arrive. + diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/images/1-vercel-serverless.svg b/typescript/02-deploy/02-nextjs-vercel-adapter/images/1-vercel-serverless.svg new file mode 100644 index 00000000..41f00db2 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/images/1-vercel-serverless.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + 1 · One-click deploy — Vercel serverless (Node function) + + User + + User question + + Agent response + + + + Vercel (serverless) + + app/api/chat/route.ts — AI SDK ⇆ Strands + + Strands Agent · loop · tools + sessions · hooks (VercelModel) + + Invokes the + chosen model + Model provider — pick one (MODEL_PROVIDER) + + + + AWS Cloud + Bedrock — default + + Amazon Bedrock + Claude · Nova · Llama + + + + OpenAI + MODEL_PROVIDER=openai + + GPT models + gpt-4o-mini · … + diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/images/2-agentcore-container.svg b/typescript/02-deploy/02-nextjs-vercel-adapter/images/2-agentcore-container.svg new file mode 100644 index 00000000..732cedf5 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/images/2-agentcore-container.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + 2 · Container path — Amazon Bedrock AgentCore Runtime (ARM64) + + HTTP client + + POST /invocations + + SSE stream + + + AgentCore Runtime — container + + agentcore/server.ts — HTTP contract + GET /ping · POST /invocations · 0.0.0.0:8080 + + Strands Agent · same lib/agent.ts + SESSION_BACKEND=s3 + sessions → Amazon S3 + + Invokes the + chosen model + Model provider — pick one (MODEL_PROVIDER) + + + + AWS Cloud + Bedrock — default + + Amazon Bedrock + Claude · Nova · Llama + + + + OpenAI + MODEL_PROVIDER=openai + + GPT models + gpt-4o-mini · … + diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/images/3-docker-node-host.svg b/typescript/02-deploy/02-nextjs-vercel-adapter/images/3-docker-node-host.svg new file mode 100644 index 00000000..e04aca17 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/images/3-docker-node-host.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + 3 · Container path — any Node host (Docker, standalone Next.js) + + User + + User question + + Agent response + + + Docker container — port 3000 + + Next.js standalone server (full web app) + app/page.tsx + app/api/chat/route.ts + + Strands Agent · same lib/agent.ts + loop · tools · sessions + + Invokes the + chosen model + Model provider — pick one (MODEL_PROVIDER) + + + + AWS Cloud + Bedrock — default + + Amazon Bedrock + Claude · Nova · Llama + + + + OpenAI + MODEL_PROVIDER=openai + + GPT models + gpt-4o-mini · … + diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/images/architecture.png b/typescript/02-deploy/02-nextjs-vercel-adapter/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..c0132b5db7bfdb8c67114dea12453f1e5a9ea6ba GIT binary patch literal 123370 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 IuKn}B0DX;2`Tzg` literal 0 HcmV?d00001 diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/aws-cloud-logo-32.svg b/typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/aws-cloud-logo-32.svg new file mode 100644 index 00000000..c4a24d08 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/aws-cloud-logo-32.svg @@ -0,0 +1,8 @@ + + + Icon-Architecture-Group/32/AWS-Cloud-logo_32 + + + + + \ No newline at end of file diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/bedrock-64.svg b/typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/bedrock-64.svg new file mode 100644 index 00000000..2e5077ba --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/bedrock-64.svg @@ -0,0 +1,12 @@ + + + Icon-Architecture/64/Arch_Amazon-Bedrock_64 + + + + + + + + + \ No newline at end of file diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/ecr-64.svg b/typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/ecr-64.svg new file mode 100644 index 00000000..a889ae62 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/ecr-64.svg @@ -0,0 +1,10 @@ + + + Icon-Architecture/64/Arch_Amazon-Elastic-Container-Registry_64 + + + + + + + \ No newline at end of file diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/s3-64.svg b/typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/s3-64.svg new file mode 100644 index 00000000..a562fe1f --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/images/aws-icons/s3-64.svg @@ -0,0 +1,12 @@ + + + Icon-Architecture/64/Arch_Amazon-Simple-Storage-Service_64 + + + + + + + + + \ No newline at end of file diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/images/openai-logo.svg b/typescript/02-deploy/02-nextjs-vercel-adapter/images/openai-logo.svg new file mode 100644 index 00000000..dd9d04f1 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/images/openai-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/lib/agent.ts b/typescript/02-deploy/02-nextjs-vercel-adapter/lib/agent.ts new file mode 100644 index 00000000..b2742847 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/lib/agent.ts @@ -0,0 +1,36 @@ +/** + * Agent factory. + * + * Assembles the Strands `Agent` that runs the loop server-side: + * - model: a Vercel AI SDK provider wrapped by `VercelModel` + * - tools: Zod-typed tools executed inside the loop + * - plugins: the `SessionManager` (persistence) + `LoggingPlugin` (hooks) + * + * The agent is created per request so each request can bind its own session id. + */ +import { Agent } from "@strands-agents/sdk"; +import { createModel } from "./model"; +import { tools } from "./tools"; +import { LoggingPlugin } from "./hooks"; +import { createSessionManager } from "./session"; + +const SYSTEM_PROMPT = [ + "You are a helpful, concise assistant built with the Strands Agents SDK.", + "Use the provided tools when they help answer accurately (math, current time).", + "Prefer calling a tool over guessing at a calculation or the current time.", +].join(" "); + +export async function createAgent(sessionId: string): Promise { + const [model, sessionManager] = await Promise.all([ + createModel(), + createSessionManager(sessionId), + ]); + + return new Agent({ + model, + systemPrompt: SYSTEM_PROMPT, + tools, + // A SessionManager is a plugin; LoggingPlugin registers the lifecycle hooks. + plugins: [sessionManager, new LoggingPlugin()], + }); +} diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/lib/hooks.ts b/typescript/02-deploy/02-nextjs-vercel-adapter/lib/hooks.ts new file mode 100644 index 00000000..4fd550ac --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/lib/hooks.ts @@ -0,0 +1,40 @@ +/** + * Strands hooks, packaged as a Plugin. + * + * Plugins register lifecycle hooks on the agent. This one logs every tool call + * (before/after) — a minimal observability example. Swap `console` for your + * logger, metrics, or tracing. Strands exposes 15+ lifecycle events; see + * https://strandsagents.com for the full list. + */ +import { + BeforeToolCallEvent, + AfterToolCallEvent, + type Plugin, + type LocalAgent, +} from "@strands-agents/sdk"; + +export class LoggingPlugin implements Plugin { + get name(): string { + return "logging"; + } + + initAgent(agent: LocalAgent): void { + agent.addHook(BeforeToolCallEvent, (event) => { + console.log( + `[tool:before] ${event.toolUse.name}`, + JSON.stringify(event.toolUse.input), + ); + }); + + agent.addHook(AfterToolCallEvent, (event) => { + if (event.error) { + console.error( + `[tool:after] ${event.toolUse.name} failed:`, + event.error.message, + ); + } else { + console.log(`[tool:after] ${event.toolUse.name} ok`); + } + }); + } +} diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/lib/model.ts b/typescript/02-deploy/02-nextjs-vercel-adapter/lib/model.ts new file mode 100644 index 00000000..87944b08 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/lib/model.ts @@ -0,0 +1,49 @@ +/** + * Model selection. + * + * The **Vercel AI SDK owns the providers**: we build a `LanguageModelV3` with + * `@ai-sdk/*` (Amazon Bedrock by default, OpenAI optional) and hand it to Strands + * through the `VercelModel` adapter. Strands then drives the agent loop, tools, + * sessions, and hooks on top of that provider. + * + * Switch providers with a single env var (`MODEL_PROVIDER`) — no code changes. + */ +import type { LanguageModelV3 } from "@ai-sdk/provider"; +import { VercelModel } from "@strands-agents/sdk/models/vercel"; + +export type ProviderName = "bedrock" | "openai"; + +/** + * Resolve the configured provider into a Vercel AI SDK `LanguageModelV3`. + * + * Providers are imported lazily so an app that only uses one provider never + * needs the other provider's credentials or bundle. + */ +async function resolveProvider(): Promise { + const provider = (process.env.MODEL_PROVIDER ?? "bedrock") as ProviderName; + + switch (provider) { + case "openai": { + const { openai } = await import("@ai-sdk/openai"); + const modelId = process.env.OPENAI_MODEL_ID ?? "gpt-4o-mini"; + // Uses OPENAI_API_KEY from the environment. + return openai(modelId) as unknown as LanguageModelV3; + } + case "bedrock": + default: { + const { bedrock } = await import("@ai-sdk/amazon-bedrock"); + const modelId = + process.env.BEDROCK_MODEL_ID ?? "us.amazon.nova-pro-v1:0"; + // Uses the standard AWS credential chain / AWS_REGION from the environment. + return bedrock(modelId) as unknown as LanguageModelV3; + } + } +} + +/** + * Build the Strands model: a Vercel AI SDK provider wrapped by `VercelModel`. + */ +export async function createModel(): Promise { + const provider = await resolveProvider(); + return new VercelModel({ provider }); +} diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/lib/session.ts b/typescript/02-deploy/02-nextjs-vercel-adapter/lib/session.ts new file mode 100644 index 00000000..898c21b0 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/lib/session.ts @@ -0,0 +1,58 @@ +/** + * Strands sessions. + * + * Sessions persist conversation state across requests via pluggable storage: + * - `memory` (default): in-process, resets on restart. Good for local dev and + * stateless/serverless demos. + * - `file`: local filesystem under `SESSION_DIR`. Good for a single long-lived + * container. + * - `s3`: Amazon S3. Good for serverless + the AgentCore container path, where + * state must survive across instances. Set `SESSION_S3_BUCKET`. + * + * A `SessionManager` is itself a Strands plugin — pass it to the agent and it + * saves/restores the conversation for the given `sessionId`. + */ +import { SessionManager } from "@strands-agents/sdk"; + +export type SessionBackend = "memory" | "file" | "s3"; + +export async function createSessionManager( + sessionId: string, +): Promise { + const backend = (process.env.SESSION_BACKEND ?? "memory") as SessionBackend; + + switch (backend) { + case "file": { + const { LocalFileStorage } = await import("@strands-agents/sdk/storage"); + const baseDir = process.env.SESSION_DIR ?? "./.sessions"; + return new SessionManager({ + storage: new LocalFileStorage(baseDir), + sessionId, + }); + } + case "s3": { + const { S3Storage } = await import("@strands-agents/sdk/storage"); + const bucket = process.env.SESSION_S3_BUCKET; + if (!bucket) { + throw new Error( + "SESSION_BACKEND=s3 requires SESSION_S3_BUCKET to be set.", + ); + } + return new SessionManager({ + storage: new S3Storage(bucket, { + prefix: process.env.SESSION_S3_PREFIX ?? "sessions/", + ...(process.env.AWS_REGION ? { region: process.env.AWS_REGION } : {}), + }), + sessionId, + }); + } + case "memory": + default: { + const { InMemoryStorage } = await import("@strands-agents/sdk/storage"); + return new SessionManager({ + storage: new InMemoryStorage(), + sessionId, + }); + } + } +} diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/lib/tools.ts b/typescript/02-deploy/02-nextjs-vercel-adapter/lib/tools.ts new file mode 100644 index 00000000..a3616ee3 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/lib/tools.ts @@ -0,0 +1,65 @@ +/** + * Strands tools. + * + * Tools run inside the Strands agent loop (server-side, in the route handler). + * Define them with a Zod schema for runtime validation + full type inference. + * Replace these samples with your own; the client never needs to change. + */ +import { tool } from "@strands-agents/sdk"; +import { z } from "zod"; + +/** A simple, safe calculator over the four basic operations. */ +export const calculator = tool({ + name: "calculator", + description: + "Perform a basic arithmetic operation (add, subtract, multiply, divide) on two numbers.", + inputSchema: z.object({ + operation: z + .enum(["add", "subtract", "multiply", "divide"]) + .describe("The arithmetic operation to perform."), + a: z.number().describe("The first operand."), + b: z.number().describe("The second operand."), + }), + callback: ({ operation, a, b }) => { + switch (operation) { + case "add": + return String(a + b); + case "subtract": + return String(a - b); + case "multiply": + return String(a * b); + case "divide": + if (b === 0) return "Error: division by zero."; + return String(a / b); + } + }, +}); + +/** Returns the current server time in ISO-8601, optionally for a given IANA time zone. */ +export const currentTime = tool({ + name: "current_time", + description: + "Get the current date and time as an ISO-8601 string, optionally in a specific IANA time zone (e.g. 'America/Mexico_City').", + inputSchema: z.object({ + timeZone: z + .string() + .optional() + .describe("Optional IANA time zone name. Defaults to UTC."), + }), + callback: ({ timeZone }) => { + const now = new Date(); + if (!timeZone) return now.toISOString(); + try { + return new Intl.DateTimeFormat("en-US", { + timeZone, + dateStyle: "full", + timeStyle: "long", + }).format(now); + } catch { + return `Unknown time zone "${timeZone}". Current UTC time: ${now.toISOString()}`; + } + }, +}); + +/** All tools exposed to the agent. */ +export const tools = [calculator, currentTime]; diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/next.config.ts b/typescript/02-deploy/02-nextjs-vercel-adapter/next.config.ts new file mode 100644 index 00000000..a7468604 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/next.config.ts @@ -0,0 +1,19 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + // Emit a standalone server bundle for a minimal production Docker image. + output: "standalone", + // Allow dev-server access (HMR/WebSocket and other _next dev resources) when + // reaching the app via the LAN IP instead of localhost. Only affects `next dev`. + allowedDevOrigins: ["192.168.100.162"], + // Strands and the AWS SDK are Node-only; keep them external to the server + // bundle so they load from node_modules at runtime instead of being bundled. + serverExternalPackages: [ + "@strands-agents/sdk", + "@ai-sdk/amazon-bedrock", + "@aws-sdk/client-bedrock-runtime", + "@aws-sdk/client-s3", + ], +}; + +export default nextConfig; diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/package-lock.json b/typescript/02-deploy/02-nextjs-vercel-adapter/package-lock.json new file mode 100644 index 00000000..856040e5 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/package-lock.json @@ -0,0 +1,8987 @@ +{ + "name": "strands-nextjs-vercel-adapter-template", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "strands-nextjs-vercel-adapter-template", + "version": "0.1.0", + "dependencies": { + "@ai-sdk/amazon-bedrock": "^4.0.181", + "@ai-sdk/openai": "^3.0.116", + "@ai-sdk/react": "^3.0.292", + "@strands-agents/sdk": "^1.19.0", + "ai": "^6.0.289", + "next": "16.3.6", + "react": "19.2.8", + "react-dom": "19.2.8", + "zod": "^4.6.5" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "eslint": "^9", + "eslint-config-next": "16.3.6", + "tailwindcss": "^4", + "tsx": "^4.23.15", + "typescript": "^5" + } + }, + "node_modules/@ai-sdk/amazon-bedrock": { + "version": "4.0.181", + "resolved": "https://registry.npmjs.org/@ai-sdk/amazon-bedrock/-/amazon-bedrock-4.0.181.tgz", + "integrity": "sha512-ti361Q6/QYvWtpWZhC6g/o/S81s3MAoD+aVd+nKSydoHQeOvrNecefaY9eFiU4ZDlfh9mn2kUxtqMXHpOXnzLA==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/anthropic": "3.0.121", + "@ai-sdk/openai": "3.0.116", + "@ai-sdk/provider": "3.0.17", + "@ai-sdk/provider-utils": "4.0.53", + "@smithy/eventstream-codec": "^4.0.1", + "@smithy/util-utf8": "^4.0.0", + "aws4fetch": "^1.0.20" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/anthropic": { + "version": "3.0.121", + "resolved": "https://registry.npmjs.org/@ai-sdk/anthropic/-/anthropic-3.0.121.tgz", + "integrity": "sha512-vp5OMz5qKNDnhVqufQi3Dj/SfSIMUQenoK9QB6zePO7nB/Q1BosqalW0MTTl8jcyPwzfoKe6e+SJaUaUiNlSzg==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "3.0.17", + "@ai-sdk/provider-utils": "4.0.53" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/gateway": { + "version": "3.0.199", + "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-3.0.199.tgz", + "integrity": "sha512-kSdvX3csolZV+u/4ZV0hdUAsxEGSMvGrACBa2SkubGRh5/I9BJmaDebFlZOT8VsyeSIZgnEVCJrN/lrTzIMojA==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "3.0.17", + "@ai-sdk/provider-utils": "4.0.53", + "@vercel/oidc": "3.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/openai": { + "version": "3.0.116", + "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-3.0.116.tgz", + "integrity": "sha512-ikL/kgoN+QCiGR4lOnzxwPWmOeXn4xIb9bZDKyqHY3MYfKAE98QM2BExEcUstjIM6h2+x7fuB7MJj55x4hkIug==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "3.0.17", + "@ai-sdk/provider-utils": "4.0.53" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/provider": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-3.0.17.tgz", + "integrity": "sha512-ijb+g+XxIAmv46hpt73ty83LhQHwwsqA1IwVX6p1MAREyX0zGM9eIrz1m3KlFxTHr8E4k/ao01w6Dlx3UBOihQ==", + "license": "Apache-2.0", + "dependencies": { + "json-schema": "^0.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ai-sdk/provider-utils": { + "version": "4.0.53", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-4.0.53.tgz", + "integrity": "sha512-15VOMPPGZeUPw3fiOLwW8NJA/YvgaUrU+TIogLxEFxdBeijn+M1NrNZruX/R1HBSLWiNac7JB/jeDP5kksbLKw==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "3.0.17", + "@standard-schema/spec": "^1.1.0", + "eventsource-parser": "^3.0.8", + "undici": "^6.28.0" + }, + "engines": { + "node": ">=18.17" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/@ai-sdk/react": { + "version": "3.0.292", + "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-3.0.292.tgz", + "integrity": "sha512-OhWvhJunNCTsCNC0MMPIxZRre5pbLW9ZsbUgsbTRM/ca1OlnrzrXhkE5cjUgYBXvqfCd2bC9nyK7Ba7ym1GqaA==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider-utils": "4.0.53", + "ai": "6.0.289", + "swr": "^2.2.5", + "throttleit": "2.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18 || ~19.0.1 || ~19.1.2 || ^19.2.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.3.0.tgz", + "integrity": "sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@aws-sdk/client-bedrock-runtime": { + "version": "3.1138.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.1138.0.tgz", + "integrity": "sha512-MtYat/gbQkExaT1ZwOp7RdYQQy9TShHlEr2Go3++5M2bLZG9RJjx46m6HE+6UXSEsStOKSQN12YofuIZmDlPnA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/credential-provider-node": "^3.972.84", + "@aws-sdk/eventstream-handler-node": "^3.972.35", + "@aws-sdk/middleware-eventstream": "^3.972.30", + "@aws-sdk/middleware-websocket": "^3.972.54", + "@aws-sdk/token-providers": "3.1138.0", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/fetch-http-handler": "^5.8.0", + "@smithy/node-http-handler": "^4.12.1", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.978.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.978.1.tgz", + "integrity": "sha512-LbY9aGsEiznDWmUc30Nwv3aIX/+dbwTx8KfS0yOC3NPYMO+O91e6jkT1azf34FwjOndq8/Q+RcVVZz5xnerwdg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.974.6", + "@aws-sdk/xml-builder": "^3.972.41", + "@aws/lambda-invoke-store": "^0.3.0", + "@smithy/core": "^3.35.0", + "@smithy/signature-v4": "^5.7.3", + "@smithy/types": "^4.19.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.972.72", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.72.tgz", + "integrity": "sha512-xTKO/FWJPozTIXbozVnVGoNBhaGba8TBcx+KyUjRVeOlXE+dUc7GTR1cLvu0uTdIdmemzaFbqqCshXeZA1fZew==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.972.74", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.74.tgz", + "integrity": "sha512-u91E/hT8f4d1xy0Jl7VG4nVKJ3lxbrZkoBTeSVoJdWBiSEUMwMS/9+e0H/aJVQV//Lt5wuzP+E69v4aRSsNTmw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/fetch-http-handler": "^5.8.0", + "@smithy/node-http-handler": "^4.12.1", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.973.17", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.17.tgz", + "integrity": "sha512-ged4KXdBkvIC81bLvNHHuQKdKak/VXhQTR1NWYTTqW0474nlmsxy9O/vlgTIohDDWH3xpBdtVMZRyjb+DnocDA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/credential-provider-env": "^3.972.72", + "@aws-sdk/credential-provider-http": "^3.972.74", + "@aws-sdk/credential-provider-login": "^3.972.79", + "@aws-sdk/credential-provider-process": "^3.972.72", + "@aws-sdk/credential-provider-sso": "^3.973.16", + "@aws-sdk/credential-provider-web-identity": "^3.972.78", + "@aws-sdk/nested-clients": "^3.997.46", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/credential-provider-imds": "^4.5.2", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-login": { + "version": "3.972.79", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.79.tgz", + "integrity": "sha512-L+Z85anONJd8MaiuraO4wRxATCdEejBZ3K3eymzWI5JPXa9sOS9CkIm72PBKqXKX+Z9p9NGMX5AIMXm0LEflgw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/nested-clients": "^3.997.46", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.972.84", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.84.tgz", + "integrity": "sha512-oHt854odINVwzwsh+c5x69j0ajm4DbqqqVJ+O1ECsCIZeMDAbzFpXItaqP7UZstJj/ATdTk/KFSH0LaNAgV+kA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "^3.972.72", + "@aws-sdk/credential-provider-http": "^3.972.74", + "@aws-sdk/credential-provider-ini": "^3.973.17", + "@aws-sdk/credential-provider-process": "^3.972.72", + "@aws-sdk/credential-provider-sso": "^3.973.16", + "@aws-sdk/credential-provider-web-identity": "^3.972.78", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/credential-provider-imds": "^4.5.2", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.972.72", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.72.tgz", + "integrity": "sha512-rLIp2xbMjX/k9/od7APpqq1ZgXXnV0pOL1Th3ZsL8Wu0TRtBsDTVS8iPqcfRFcHakFxPvR04OSTv2ka2qOb/2A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.973.16", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.16.tgz", + "integrity": "sha512-IGihaJfFZYacJJr/odqILCoK7W/mvrZ7cuK7ECn3sAu4vLC6u0V8bS7mCGbdugJ8Aum2tnvqmx0F2MRFp2rn9g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/nested-clients": "^3.997.46", + "@aws-sdk/token-providers": "3.1138.0", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.972.78", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.78.tgz", + "integrity": "sha512-/y9WvNtlcPBGLR0qc1a+9J/xtYZfVczvLUOuXaVWylzttH7ewsxwHtjmiJSolNrVSDorIxHGHMU61CbonRkmwA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/nested-clients": "^3.997.46", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-handler-node": { + "version": "3.972.35", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.972.35.tgz", + "integrity": "sha512-a8xilRoRaalvSPZdfrs0VY3/BPc0uYhXW56Z/k6nmZ5Vk430LHeowf9APIPq8utM3tMJSNGSSuJMlB9YrPsN+A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-eventstream": { + "version": "3.972.30", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.972.30.tgz", + "integrity": "sha512-B6gvZlcnRBNWraKgyEjKsbhv+VjtbyHmpU7hmtTHzXpDSxHPpCJnYLpglEOOsF+SFne20DbZC5IVC1aNr2Pb4A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-websocket": { + "version": "3.972.54", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.54.tgz", + "integrity": "sha512-bhESdru8u8KosziH8jcVta/NM/dNreeRz2+2aU86si5bfBYOiJ6IiqD+9U4URUcU5WJO3Yw+jO3GLDIHlscXMQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/fetch-http-handler": "^5.8.0", + "@smithy/signature-v4": "^5.7.3", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.997.46", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.46.tgz", + "integrity": "sha512-oRxtBcka/JGHGs9l9p9IVajGoTP8vTPmoAzdHGy4Qcy9P5vPnDf6nhIeM/COQNY9k/OahImTRaLkHftoXvfcmQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/signature-v4-multi-region": "^3.996.47", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/fetch-http-handler": "^5.8.0", + "@smithy/node-http-handler": "^4.12.1", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.996.47", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.47.tgz", + "integrity": "sha512-Zk08macMvQTHzQJCLJVkOlviVoqwYMrpXv4lmLN7b7sAbiMoOK7Go0NYdR5UeF+MW8LIbRmwrNy9u/5VvX1U5g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.974.6", + "@smithy/signature-v4": "^5.7.3", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.1138.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1138.0.tgz", + "integrity": "sha512-GpyAr0DD63YOEmYFM6Df+gJuIgC92MMTiBK4FTKfxii5MJ9ge20epR7LyroulscYlG89J+ZB2ivFDPjvfQhzdw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.978.1", + "@aws-sdk/nested-clients": "^3.997.46", + "@aws-sdk/types": "^3.974.6", + "@smithy/core": "^3.35.0", + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.974.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.6.tgz", + "integrity": "sha512-v/clNZzZnDxGyvpHMOGpJKVXFAExJzUNAAjaWGdcx8QAcXLGwTaOkw33p5SHAi0YAioK32xB3hWwOekRVfmfKg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.972.41", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.41.tgz", + "integrity": "sha512-ctjVSyCMegrWfXlx6VqzSBFI6UqmQ5ZlnfMhdLIiWmhoH8UAQxSCP5N3OpG7X3k4LnS7ou74C4mt20+bfTW2aQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.3.0.tgz", + "integrity": "sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "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": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "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.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.7.tgz", + "integrity": "sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "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.3.2", + "minimatch": "^3.1.5", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "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/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/js": { + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz", + "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@hono/node-server": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.1.tgz", + "integrity": "sha512-ELuehkj5VCBdgEw9zs+ivkKwyzzUCSQuE96YmiPvn1ECBoZCczbFXJLeEGMTYjphP6gydh4pHMqEYPVMYUVgQg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "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": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.4.tgz", + "integrity": "sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.3.3" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.4.tgz", + "integrity": "sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.3.3" + } + }, + "node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.4.tgz", + "integrity": "sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==", + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "dependencies": { + "@img/sharp-wasm32": "0.35.4" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.3.tgz", + "integrity": "sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.3.tgz", + "integrity": "sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.3.tgz", + "integrity": "sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.3.tgz", + "integrity": "sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.3.tgz", + "integrity": "sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.3.tgz", + "integrity": "sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.3.tgz", + "integrity": "sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.3.tgz", + "integrity": "sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.3.tgz", + "integrity": "sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.3.tgz", + "integrity": "sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.4.tgz", + "integrity": "sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.4.tgz", + "integrity": "sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.4.tgz", + "integrity": "sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.4.tgz", + "integrity": "sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.4.tgz", + "integrity": "sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.4.tgz", + "integrity": "sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.3.3" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.4.tgz", + "integrity": "sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.3.3" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.4.tgz", + "integrity": "sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.3.3" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.4.tgz", + "integrity": "sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==", + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.11.3" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.4.tgz", + "integrity": "sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/sharp-wasm32": "0.35.4" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.4.tgz", + "integrity": "sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.4.tgz", + "integrity": "sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.4.tgz", + "integrity": "sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "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": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "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": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "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": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.30.1.tgz", + "integrity": "sha512-H2HxLvC3HDNybePJaLdSrU1hhUK5iQw+WvV1b01myFyI7sdVGe1u/IPTE5D9fGCiJDVtgMV/lmFkQXLmQyIFYA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@hono/node-server": "^1.19.9 || ^2.0.5", + "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": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.4.tgz", + "integrity": "sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" + } + }, + "node_modules/@next/env": { + "version": "16.3.6", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.3.6.tgz", + "integrity": "sha512-x9Vblze1EbtltQYnNH38xCPWU3TVfBd1eXqA3+w9+BTpedkkdNpAaltXlGQ/nsc1+E0mVTNrtcbX3GoO09zeLQ==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "16.3.6", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.3.6.tgz", + "integrity": "sha512-jowwDX+7DOlDIjJLgTMxudw+k37QnWu1JkZLkSi9MaJBfDYcfhAPMKBhXL0idYzFN/AGg//axnOR4cLkHX/Rng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "4.9.1", + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "16.3.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.3.6.tgz", + "integrity": "sha512-E/7GEqaUkt8mk/T8v9lAnrhzR06kdq1ZBkC12F8tAMkdIadwNp3H1KqHynDHrpcTlGCUdq/qu6vUL2aYVyYBdw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "16.3.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.3.6.tgz", + "integrity": "sha512-yBE893/nDWTlaiBD1p+qgt7NUen4U5R6FXyH0s67Npq1S3E0cVSef1WIXC2xBRgQvwAvJq6DnS6Y6PrY0cy4Ew==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "16.3.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.3.6.tgz", + "integrity": "sha512-KJDpjBqBPYlvkivmyrp+Qys6k/7ksbqGQvRVc6ZEGfR+cjQxx+nUkJaWmNZJsmoOrqYNbaXByF8wa0lBwDhB3Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "16.3.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.3.6.tgz", + "integrity": "sha512-mqNg2K+hvWskSRb/QM+Ix412DvBsuSF0XV+frTSw5vmoucNnIlynFwKYew8D01bfATErMOM7Bujrf0BA5DRKFA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "16.3.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.3.6.tgz", + "integrity": "sha512-nFncBNGAYouRHjRVaITs9beZRfhX4ssVwpnvPIAbkZVH6LtGoAVlH4bJ8Cnf9SOo9bsXgPFer/GdHtEE3JNOkw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "16.3.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.3.6.tgz", + "integrity": "sha512-5Mf3cHDGR/Iz0ng2Bj3zUR3p5QS9YK3Hn2QiAfavFmyF48zwThAjpFoiTKNIcOHLYS4zEk+gzyJ/9deQ2ZB8yQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "16.3.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.3.6.tgz", + "integrity": "sha512-0jkJy0C2kbrJWTk4YLa3xk80pVBpx8FCHJym7CnUfDAXe/FWv5qT7SQJbR0KuemyxaEDlEx5WT4VQJoTW+/9Qw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "16.3.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.3.6.tgz", + "integrity": "sha512-/YXjI1e5OXcZ7YpxRwgP/1jAV/SBKTzeVKqN2mk7mLpcICsyn3Gl5+dIfDTJp70M0ccMhyMMRso4v6mPDCGepg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", + "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "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/@smithy/core": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.35.0.tgz", + "integrity": "sha512-zRMhfkByhT2snNdr1si24vJitU6Cr9ix2MikUfWmkAgp4jrNP0GcKSP5YvwQ+TlI8AZXER5QOGJn3JsVtSD9/A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.19.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.5.2.tgz", + "integrity": "sha512-A9uSdn72ozbRUSit0eib0TW7nXuNPlaeM0zcGkJ+nE6tFcSDbnmtwoxbTCFBukVQcszDAyvsd7+rTduPTXpygg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.33.2", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.5.2.tgz", + "integrity": "sha512-u4EAkaviMcQYlorFSnxFUgF/Dnbgiu2TzGmqOU4h3CL4MbvrYyNCXpFkcBwvAEU11EvspKX2zzS2uX7q+43VdQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.33.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.8.0.tgz", + "integrity": "sha512-ycSJu3tFAQ4v04CBB0agqFMVsSQ1iG3yw+SpgxRqKfaURpQD4CZ8Wn0zPMmSnOuTpTh65Vz+EA0rMrw089wvkA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.18.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.12.1.tgz", + "integrity": "sha512-ThMkboGeONWXAelq9FvGsuJC4rOi+qyC4/zhUF58xYpxUg5sQKx2VXZYJmtNjr4dSuBJ1HeJXETQILCz3wOHvw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.18.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.7.3.tgz", + "integrity": "sha512-7ImGm+FkHRLcBaRttIAMZ6bzJZWb2cJGoYjq46F2UjycujWzrL9GEN9h4w7eQyXJYnltrUhxbbieBAIRrdqpow==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.19.0.tgz", + "integrity": "sha512-r7jh49VJxGerfAcTQA6gXcKc+98zOp/tqRwzYjgOE+iSQsP6cEU1hq2QzbuipmP68QtYdY9wKEhiCQZIzHgZ4Q==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.5.2.tgz", + "integrity": "sha512-7wNWV7SugHpcMA7uzEawJNpE0GrasXM7a9E+1+Wm6NxVuDClESac/AKt+G7jMZNUz5vBLWqKlqVV7Sv7AtUr6Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.33.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@strands-agents/sdk": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@strands-agents/sdk/-/sdk-1.19.0.tgz", + "integrity": "sha512-pYBv1x0Vbt+/nPsvD3jyF4Re0ljTWK5iiuh4sdvuZs+DnXVsRhqbHXRhdsTh3X8f+mvk2XF6YadJzsmscXOBkg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-bedrock-runtime": "^3.1132.0", + "@smithy/fetch-http-handler": "^5.8.0", + "@types/json-schema": "^7.0.15", + "uuid": "^14.0.2", + "yaml": "^2.9.1" + }, + "engines": { + "node": ">=22.0.0" + }, + "peerDependencies": { + "@a2a-js/sdk": "^0.3.10", + "@ai-sdk/provider": "^3.0.0", + "@anthropic-ai/sdk": "^0.109.1", + "@aws-sdk/client-bedrock-agent": "^3.1078.0", + "@aws-sdk/client-bedrock-agent-runtime": "^3.1078.0", + "@aws-sdk/client-s3": "^3.1078.0", + "@aws/bedrock-token-generator": "^1.1.0", + "@cedar-policy/cedar-wasm": "^4.0.0", + "@cedar-policy/mcp-schema-generator-wasm": "^0.6.0", + "@google/genai": "^2.6.0", + "@modelcontextprotocol/sdk": "^1.25.2", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/exporter-metrics-otlp-http": "^0.219.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.219.0", + "@opentelemetry/resources": "^2.8.0", + "@opentelemetry/sdk-metrics": "^2.6.1", + "@opentelemetry/sdk-trace-base": "^2.6.1", + "@opentelemetry/sdk-trace-node": "^2.6.1", + "@smithy/types": "^4.15.1", + "@tobilu/qmd": "^2.8.0", + "express": "^5.1.0", + "openai": "^6.45.0", + "turndown": "^7.2.4", + "zod": "^4.1.12" + }, + "peerDependenciesMeta": { + "@a2a-js/sdk": { + "optional": true + }, + "@ai-sdk/provider": { + "optional": true + }, + "@anthropic-ai/sdk": { + "optional": true + }, + "@aws-sdk/client-bedrock-agent": { + "optional": true + }, + "@aws-sdk/client-bedrock-agent-runtime": { + "optional": true + }, + "@aws-sdk/client-s3": { + "optional": true + }, + "@aws/bedrock-token-generator": { + "optional": true + }, + "@cedar-policy/cedar-wasm": { + "optional": true + }, + "@cedar-policy/mcp-schema-generator-wasm": { + "optional": true + }, + "@google/genai": { + "optional": true + }, + "@opentelemetry/exporter-metrics-otlp-http": { + "optional": true + }, + "@opentelemetry/exporter-trace-otlp-http": { + "optional": true + }, + "@opentelemetry/resources": { + "optional": true + }, + "@opentelemetry/sdk-metrics": { + "optional": true + }, + "@opentelemetry/sdk-trace-base": { + "optional": true + }, + "@opentelemetry/sdk-trace-node": { + "optional": true + }, + "@smithy/types": { + "optional": true + }, + "@tobilu/qmd": { + "optional": true + }, + "express": { + "optional": true + }, + "openai": { + "optional": true + }, + "turndown": { + "optional": true + } + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", + "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.24.1", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", + "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-x64": "4.3.3", + "@tailwindcss/oxide-freebsd-x64": "4.3.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-x64-musl": "4.3.3", + "@tailwindcss/oxide-wasm32-wasi": "4.3.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz", + "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz", + "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz", + "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz", + "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz", + "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz", + "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz", + "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz", + "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz", + "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz", + "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", + "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz", + "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.3.3.tgz", + "integrity": "sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.3.3", + "@tailwindcss/oxide": "4.3.3", + "postcss": "^8.5.16", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.4.tgz", + "integrity": "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "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/node": { + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.3.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.70.1.tgz", + "integrity": "sha512-nDNrUQ/4ruSNYbu749TRY7cfrzPtoLHEXSNBI8aaNY32LlZCajixqRf3FqcKC4p5Cam4VOHYx/t+i5+nKXvrqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.70.1", + "@typescript-eslint/type-utils": "8.70.1", + "@typescript-eslint/utils": "8.70.1", + "@typescript-eslint/visitor-keys": "8.70.1", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.70.1", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.10.tgz", + "integrity": "sha512-HpbUakT7xp5miBUywCHf36ZEuAJNklBJDDsGpUIjMzOSmM8ELSfA9Sa/QDPeNeqeoN31u+UTCkL4klCOVvRm4Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.70.1.tgz", + "integrity": "sha512-nO974WLllwhSFWQXnMLj6nDGa8f0khKEz1JzpPJ1u7Vm/4X1X6ZHajpoknU4bb41vJyMB0HHVyS2GqdhWfIXZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.70.1", + "@typescript-eslint/types": "8.70.1", + "@typescript-eslint/typescript-estree": "8.70.1", + "@typescript-eslint/visitor-keys": "8.70.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": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.70.1.tgz", + "integrity": "sha512-62xOgboPfwc3/IgPSX/W6oQR3ZbF04194FPGUGH8HL8iLFHbt/456/8Ph1wLNUgVF+s94FlHoipBsz+v7+LMnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.70.1", + "@typescript-eslint/types": "^8.70.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.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.70.1.tgz", + "integrity": "sha512-Pa0EeSeAusQc1WbjQMac+YfenewYTBu0KjgYvkUKwhXaHUKbFog23Dm/rp0DX/6tyYOQ3Xl1a+3EcFNZynGHCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.70.1", + "@typescript-eslint/visitor-keys": "8.70.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.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.70.1.tgz", + "integrity": "sha512-jumze1fPI+sDOaM2TWGQdn39PDxTr7TZGeuyLkAbNyx2vtMT3uRnVKChN0hfht5V2TugphJzF6bYXvBcE09qqg==", + "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.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.70.1.tgz", + "integrity": "sha512-7zKTnyvaVWqzLZHPFQtX1hVHqgkMC+WebPWakNCSyrQVbIP1AM0L0TlBZtACldIRb6PptI8Odk+jyZ5kP3B1VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.70.1", + "@typescript-eslint/typescript-estree": "8.70.1", + "@typescript-eslint/utils": "8.70.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "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.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.70.1.tgz", + "integrity": "sha512-Dm1ypdhhrGCTyyehxElhgJ6kgk8MVCv5qXdoOVqPr1uqk42jX8KjrZqhROvdShczA8qrDoYiOWn1ykWlx2k81Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.70.1.tgz", + "integrity": "sha512-TU8PwyGN0PQJUcE96mw8eCQ44SmxGdQlJmlWakHaHQ15eIuuvye5yNtmh/i6oS88jzXVQB71xdNkbkB/fMwL0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.70.1", + "@typescript-eslint/tsconfig-utils": "8.70.1", + "@typescript-eslint/types": "8.70.1", + "@typescript-eslint/visitor-keys": "8.70.1", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "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.1.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.70.1.tgz", + "integrity": "sha512-Esgul8MsnKnRLdYU2Eb2cRV9bS5HJYtKj1ByJnOzzG2M58DGdSUQ1jUuILxipqcpB2h9WLrbD5GijIWUjX/Tqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.70.1", + "@typescript-eslint/types": "8.70.1", + "@typescript-eslint/typescript-estree": "8.70.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.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.70.1.tgz", + "integrity": "sha512-Vwj9lUIW5Xq3wQ9w6gv3R86g1hMK8f2zNOdGTAgeXUMMXFK78G9ruCjjqutHMNJc0+CH7LYRnHeUB9IT8wFmcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.70.1", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz", + "integrity": "sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.12.2.tgz", + "integrity": "sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.12.2.tgz", + "integrity": "sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.12.2.tgz", + "integrity": "sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.12.2.tgz", + "integrity": "sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.12.2.tgz", + "integrity": "sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.12.2.tgz", + "integrity": "sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.12.2.tgz", + "integrity": "sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.12.2.tgz", + "integrity": "sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-loong64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-gnu/-/resolver-binding-linux-loong64-gnu-1.12.2.tgz", + "integrity": "sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-loong64-musl": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-musl/-/resolver-binding-linux-loong64-musl-1.12.2.tgz", + "integrity": "sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.12.2.tgz", + "integrity": "sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.12.2.tgz", + "integrity": "sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.12.2.tgz", + "integrity": "sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.12.2.tgz", + "integrity": "sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz", + "integrity": "sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.12.2.tgz", + "integrity": "sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-openharmony-arm64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-openharmony-arm64/-/resolver-binding-openharmony-arm64-1.12.2.tgz", + "integrity": "sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.12.2.tgz", + "integrity": "sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz", + "integrity": "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz", + "integrity": "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz", + "integrity": "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vercel/oidc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.2.0.tgz", + "integrity": "sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug==", + "license": "Apache-2.0", + "engines": { + "node": ">= 20" + } + }, + "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", + "peer": true, + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ai": { + "version": "6.0.289", + "resolved": "https://registry.npmjs.org/ai/-/ai-6.0.289.tgz", + "integrity": "sha512-hmwaCl75KER0QoB7hPOy52EOB1eBad06uB6B72hBdETFrNKN33Dj22GvS1jgVaCdXLK45RqT/19P5SxiRTgW6g==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/gateway": "3.0.199", + "@ai-sdk/provider": "3.0.17", + "@ai-sdk/provider-utils": "4.0.53", + "@opentelemetry/api": "^1.9.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4.1.8" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "license": "MIT", + "peer": true, + "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": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "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": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.2.0.tgz", + "integrity": "sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "es-shim-unscopables": "^1.1.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "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": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws4fetch": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/aws4fetch/-/aws4fetch-1.0.20.tgz", + "integrity": "sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==", + "license": "MIT" + }, + "node_modules/axe-core": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.13.0.tgz", + "integrity": "sha512-UzGt8zg7Ny8djbYMhxl2zuEevVa7r2gJjYY5Lwr1xM7+XU2nd6CkIWFTVcCIbAP63vSz71NaVyyuSk9lHKcy0A==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.25", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.25.tgz", + "integrity": "sha512-gMmEShwwq7FJqMwvfRwvCl00v4kN+KOfJqXn+f4nrufak5gNHJOksd/60Dvjuz7sI8Y5WiSFBa8FEYr+zoyqCw==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "license": "MIT", + "peer": true, + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/bowser": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", + "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", + "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", + "dev": true, + "license": "MIT", + "dependencies": { + "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": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.0.tgz", + "integrity": "sha512-3GSvyjvDI4Dur1Meg2BekJquu5uF+9R9a1+5M1Mde192eZoXbeXjzgOsgqPS2V8D5wrrip0gR5Hf/GhWQ9ZzaA==", + "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": { + "baseline-browser-mapping": "^2.11.23", + "caniuse-lite": "^1.0.30001810", + "electron-to-chromium": "^1.5.427", + "node-releases": "^2.0.55", + "update-browserslist-db": "^1.3.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001810", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", + "integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "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", + "peer": true, + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", + "peer": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "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": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "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": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "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" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, + "license": "Apache-2.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": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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", + "peer": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.438", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.438.tgz", + "integrity": "sha512-AN9xMU1hJiT65LkCUPL1DZm5TCbOPb2Qsm5pYwFLEXp6/qj9SdT4yMiqs7Qqstwvkn1zF7l36SRGt+s6XcJ0FA==", + "dev": true, + "license": "ISC" + }, + "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==", + "dev": true, + "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", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.25.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.25.1.tgz", + "integrity": "sha512-nGXts5znJzmWPu+mIE9izCOzdg63oJca2mDzGWWTth7sr4aCToKcoyFVBQwN75Ij5Pf6p510EwkTqViTRzDV+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "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.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "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.1", + "math-intrinsics": "^1.1.0", + "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.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", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract-get": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz", + "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.2", + "is-callable": "^1.2.7", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.4.0.tgz", + "integrity": "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.4.tgz", + "integrity": "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-abstract-get": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "is-callable": "^1.2.7", + "is-date-object": "^1.1.0", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT", + "peer": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz", + "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.6", + "@eslint/js": "9.39.5", + "@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", + "ajv": "^6.14.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-next": { + "version": "16.3.6", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.3.6.tgz", + "integrity": "sha512-1Upt3U7BDwU+ilpe2byZjAfts9oNq4d4fv/zXEvs8/4yS+cwOQW/WCxUNy8gCDquX67SzeehDvKblVC6ZBMocQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "16.3.6", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^7.0.0", + "globals": "16.4.0", + "typescript-eslint": "^8.46.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", + "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.16.1", + "resolve": "^2.0.0-next.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": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", + "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.14.0.tgz", + "integrity": "sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "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": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "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.1", + "hasown": "^2.0.2", + "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.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "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-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" + } + }, + "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": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "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/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/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": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "peer": true, + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz", + "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "peer": true, + "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" + } + }, + "node_modules/express-rate-limit": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.7.0.tgz", + "integrity": "sha512-hOwV7WOxXfjRpAM1DSJWZDXx3GhplwD8IfwuwvogD8i1Qnkgosw/H45s4ZnFAUHDAhPjlY9hLBvJhKmGMyY26g==", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.4.3", + "ip-address": "^10.2.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "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/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", + "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/fastq": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", + "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "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": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "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" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "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": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "peer": true, + "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==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz", + "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2", + "hasown": "^2.0.4", + "is-callable": "^1.2.7", + "is-document.all": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "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": { + "node": ">=6.9.0" + } + }, + "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", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.3.tgz", + "integrity": "sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "ISC" + }, + "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": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/hono": { + "version": "4.13.8", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.8.tgz", + "integrity": "sha512-/Gng7NfoykZl2pjukW5Z6+8Yxm3BPRf86GTbQnt0SbySkvax4fyL4H3HhY1cCpBGmiW9XDRFzRV+CXK2W8QudQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.9.0" + } + }, + "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", + "peer": true, + "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/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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": { + "node": ">= 4" + } + }, + "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": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": { + "node": ">=0.8.19" + } + }, + "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", + "peer": true + }, + "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": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip-address": { + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.2.tgz", + "integrity": "sha512-7H/2gFSIitxc0hG3nOI1glS8QLo/EHBFFLk8vEUjXY/xu0AdL8jZ9U1IzO2PUm0d2D/ofQcAifb0g6OBkt8U7w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "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": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-bun-module/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.17.0.tgz", + "integrity": "sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-document.all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz", + "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-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": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-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": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.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": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "peer": true + }, + "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": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/jose": { + "version": "6.2.12", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.12.tgz", + "integrity": "sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "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-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==", + "license": "MIT", + "peer": true + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.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/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" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "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" + } + }, + "node_modules/media-typer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/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": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "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", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "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", + "peer": true, + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "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.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", + "license": "MIT", + "peer": true, + "dependencies": { + "content-type": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/negotiator/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/next": { + "version": "16.3.6", + "resolved": "https://registry.npmjs.org/next/-/next-16.3.6.tgz", + "integrity": "sha512-L+otWM/aQbYTx98aZhgEoMb4bZAXx1YVW4UMA/vuCyCoWG5HJyZUili8QAkqzrcC+5///tsz3s0M+SlyB5bLMw==", + "license": "MIT", + "dependencies": { + "@next/env": "16.3.6", + "@swc/helpers": "0.5.23", + "baseline-browser-mapping": "^2.9.19", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.5.23", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=20.9.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "16.3.6", + "@next/swc-darwin-x64": "16.3.6", + "@next/swc-linux-arm64-gnu": "16.3.6", + "@next/swc-linux-arm64-musl": "16.3.6", + "@next/swc-linux-x64-gnu": "16.3.6", + "@next/swc-linux-x64-musl": "16.3.6", + "@next/swc-win32-arm64-msvc": "16.3.6", + "@next/swc-win32-x64-msvc": "16.3.6", + "sharp": "^0.35.4" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.51.1", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.5.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz", + "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/node-exports-info": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.2.tgz", + "integrity": "sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/node-releases": { + "version": "2.0.57", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.57.tgz", + "integrity": "sha512-kQK9LGGFiHtrWiNhZtA7Qbw17AQz+dmsEKODRIVTXA9+e5MS/2gZEBhYJt13GrAz5/IOZKddH/0Z3TP/Zgo+yw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.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": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", + "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.20.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.18", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=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/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz", + "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz", + "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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", + "peer": true, + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/react": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", + "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz", + "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.8" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", + "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.2", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/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": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "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", + "peer": true, + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "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/safe-array-concat": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT", + "peer": true + }, + "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" + }, + "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/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "peer": true, + "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/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "peer": true, + "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/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC", + "peer": true + }, + "node_modules/sharp": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.4.tgz", + "integrity": "sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.1.0", + "detect-libc": "^2.1.2", + "semver": "^7.8.5" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.35.4", + "@img/sharp-darwin-x64": "0.35.4", + "@img/sharp-freebsd-wasm32": "0.35.4", + "@img/sharp-libvips-darwin-arm64": "1.3.3", + "@img/sharp-libvips-darwin-x64": "1.3.3", + "@img/sharp-libvips-linux-arm": "1.3.3", + "@img/sharp-libvips-linux-arm64": "1.3.3", + "@img/sharp-libvips-linux-ppc64": "1.3.3", + "@img/sharp-libvips-linux-riscv64": "1.3.3", + "@img/sharp-libvips-linux-s390x": "1.3.3", + "@img/sharp-libvips-linux-x64": "1.3.3", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.3", + "@img/sharp-libvips-linuxmusl-x64": "1.3.3", + "@img/sharp-linux-arm": "0.35.4", + "@img/sharp-linux-arm64": "0.35.4", + "@img/sharp-linux-ppc64": "0.35.4", + "@img/sharp-linux-riscv64": "0.35.4", + "@img/sharp-linux-s390x": "0.35.4", + "@img/sharp-linux-x64": "0.35.4", + "@img/sharp-linuxmusl-arm64": "0.35.4", + "@img/sharp-linuxmusl-x64": "0.35.4", + "@img/sharp-webcontainers-wasm32": "0.35.4", + "@img/sharp-win32-arm64": "0.35.4", + "@img/sharp-win32-ia32": "0.35.4", + "@img/sharp-win32-x64": "0.35.4" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.1.0.tgz", + "integrity": "sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.2", + "get-intrinsic": "^1.3.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.4", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", + "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "has-property-descriptors": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", + "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-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/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swr": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.5.1.tgz", + "integrity": "sha512-BRw55e8r0B7SpDN20CAzoQAHl7y1yP7/Zt7oqUjMv0vSt2u2Xnkm88Ws+VypbV9BXHQVuSuyVq7zMjO16wSExw==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", + "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/throttleit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", + "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "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": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "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": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "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/tsx": { + "version": "4.23.15", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.15.tgz", + "integrity": "sha512-Yiex1Ovn8z2xPpOWckIiysV1SSyRMY9BkLF++q0yKiDxCqRhosKfMg3janKkiLBwZ5c/YryloKwGZcrEmtwxKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.28.0" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "peer": true, + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.5.tgz", + "integrity": "sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", + "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "possible-typed-array-names": "^1.1.0", + "reflect.getprototypeof": "^1.0.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.70.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.70.1.tgz", + "integrity": "sha512-AcWG7KDjZ2THNXsgwttMaGmzVi0VFRlFYfqFHYQRbDpF3owuYbuiL8c7UUrd2k8s3PoSfIQrWfrGXfcElrWLYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.70.1", + "@typescript-eslint/parser": "8.70.1", + "@typescript-eslint/typescript-estree": "8.70.1", + "@typescript-eslint/utils": "8.70.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.1.0" + } + }, + "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==", + "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/undici": { + "version": "6.28.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.1.tgz", + "integrity": "sha512-zWpdTVD54H48CIybL0rWQ3ukpb9d23wM7eH5RtfdmeP70cWHNjtfo7P4vZX+5CoDcO53J4Pu5uXp7lNfjc6DRA==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unrs-resolver": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.12.2.tgz", + "integrity": "sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.4" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.12.2", + "@unrs/resolver-binding-android-arm64": "1.12.2", + "@unrs/resolver-binding-darwin-arm64": "1.12.2", + "@unrs/resolver-binding-darwin-x64": "1.12.2", + "@unrs/resolver-binding-freebsd-x64": "1.12.2", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.12.2", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.12.2", + "@unrs/resolver-binding-linux-arm64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-arm64-musl": "1.12.2", + "@unrs/resolver-binding-linux-loong64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-loong64-musl": "1.12.2", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-riscv64-musl": "1.12.2", + "@unrs/resolver-binding-linux-s390x-gnu": "1.12.2", + "@unrs/resolver-binding-linux-x64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-x64-musl": "1.12.2", + "@unrs/resolver-binding-openharmony-arm64": "1.12.2", + "@unrs/resolver-binding-wasm32-wasi": "1.12.2", + "@unrs/resolver-binding-win32-arm64-msvc": "1.12.2", + "@unrs/resolver-binding-win32-ia32-msvc": "1.12.2", + "@unrs/resolver-binding-win32-x64-msvc": "1.12.2" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", + "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", + "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", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.7.0.tgz", + "integrity": "sha512-6L+EeigHMQhdaIPNIFUKwfWJSwWFQ8gJbJ2DLOs5sDIegTwR9fRxvnM3uciHKjIZhFz+KAv2emhWMRvDmMcY8A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/uuid": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.2.tgz", + "integrity": "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.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": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.24", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.24.tgz", + "integrity": "sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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", + "peer": true + }, + "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.9.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz", + "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz", + "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "license": "ISC", + "peer": true, + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/package.json b/typescript/02-deploy/02-nextjs-vercel-adapter/package.json new file mode 100644 index 00000000..82ce0e61 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/package.json @@ -0,0 +1,34 @@ +{ + "name": "strands-nextjs-vercel-adapter-template", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "eslint", + "agentcore": "tsx agentcore/server.ts" + }, + "dependencies": { + "@ai-sdk/amazon-bedrock": "^4.0.181", + "@ai-sdk/openai": "^3.0.116", + "@ai-sdk/react": "^3.0.292", + "@strands-agents/sdk": "^1.19.0", + "ai": "^6.0.289", + "next": "16.3.6", + "react": "19.2.8", + "react-dom": "19.2.8", + "zod": "^4.6.5" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "eslint": "^9", + "eslint-config-next": "16.3.6", + "tailwindcss": "^4", + "tsx": "^4.23.15", + "typescript": "^5" + } +} diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/postcss.config.mjs b/typescript/02-deploy/02-nextjs-vercel-adapter/postcss.config.mjs new file mode 100644 index 00000000..61e36849 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + "@tailwindcss/postcss": {}, + }, +}; + +export default config; diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/public/file.svg b/typescript/02-deploy/02-nextjs-vercel-adapter/public/file.svg new file mode 100644 index 00000000..004145cd --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/public/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/public/globe.svg b/typescript/02-deploy/02-nextjs-vercel-adapter/public/globe.svg new file mode 100644 index 00000000..567f17b0 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/public/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/public/next.svg b/typescript/02-deploy/02-nextjs-vercel-adapter/public/next.svg new file mode 100644 index 00000000..5174b28c --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/public/strands-wordmark.png b/typescript/02-deploy/02-nextjs-vercel-adapter/public/strands-wordmark.png new file mode 100644 index 0000000000000000000000000000000000000000..7c4e76e75674a4363f1685d55034ae40ad31e2c1 GIT binary patch literal 16713 zcmeI4d011&7QjbP6jvysWyj?MTk1j)1tCz1iUR@si8Rn2?WR~WU*b@lS(BdP`-N1~b+o?mCIa;fohscRhHVBK$RZ5jHd zeFnDc&Sm)c8PVhC8Li!PIou?COo=YRSD0bu(~`w^i-x7k(mzEgV&j`)q?cM+ zs;QHfvR@udBvh2fhy!OgI z4+bAC>mL2yXa$a=i}1lG?_36Pn1{DGvn(BF_W1kXbxnATW@(1mNl7 zEsLoV3}iMC7w8+EgR^toZ{ZpwR>BekB8n2)f^aCu#(lA+WKwLPc(Lnt!S4-yB($^j zCQQ}Zf*4=(4h1Ii7N=>8-@Tm;*Y7k>Je3fmBgBhe#TImZC(4TCSYWDN5S|{z8G_>n zL$e(cpZR#Vsgr3bKO|R7$v~0J{u6`Esj&Ra6#U7qSZI|Dl+(MaA?OQrMmjY z5WLIQ1W#jo>r(02Qi>1-E@<<(|ETrDNl6~S#m3f-$*wBt@qQ&&AJ-X z)k^T}El{;h_LERkItU*oPuh+z4ToHQNIG}KAc@j2@q*L#6fYDq1oF$l^*h%X?Hlcq zzzRoE3yQ(Op|7mrKgb_1CX-kun7O&G?Ju8oA*G{q3()!ef!;8qV7?vM^;A%3cqZP{ z6f+Uifj6kg-a+Yl8HlIqUZM)+Qxn~D`2&z{)FO|~On&vbYhhzx6i z0!`oAV7x;8KJD(y#$yCLb*Lh@Z9g|TT?66sDDeP8I^Cq3CSvx80pM+@^5#x&e_a48 z-@=fUK5ihc8VG>>xviX9;-v9o%Ei;hFCp{%!%^886GSiF%Rh{5Mo|6xg)~@#fjPe?(uXr;H}=#JD4x5p2T^0 zc95(v^PtA1qYuf!E{r<5MdlrkgO>Yi=tfW*rbDO=9a(rST*MUF{_MBT6USu}6ZvqoU%ZJJZlb|dCR$Fy_xZv8$@ zir$lpKsUa5yp2^#rkI?nWN9n0K8Duy!EEX9NT`QCdr zez^JXUNBuIDDE|UPm2YxQVz<083?v6Kw8UFz4oAKDJsWz%J-J*UJfDlAhAM^;&T$i z^g@PQPMbp$=C>_NjYW&&J_~TKaz0@C-hg&`4gJcs{*-d~`*!DeR1OrU?C*yyL=Gze ze}3FKUHI!Wxd2m*{`sch>hN?VZS(&SjrZTfRJ9%R=5HR#RHdGLRyX$w1Y*!9%PCtrUL!4?&s!Mia0H1x1E4xc{5cP zaX4@EkKM>RS=J4}4mG6_p|vIo7-bgG7eT8(@irt9+NzUPoRZG76iLHjY#ZMo(`{ z0X*J~BebJZWLsV{($B%9c4Xta8}#~rD5m$_8@GN%&3-9G^na6E?EPmZ)sO|u$g4MRH$?7*!UmyT|>NUkiQOS+se4qjZnUh zncJyl@`E8ebDb}{XtvCOmGVenAo4r_3i)PdgtpKjIpJ$1IP_xG*gat#ip1)fab!{!G?+DYpLS0p-DIr+*gEkA^wCagp;OpK zeTS$1#M(jAqWTCjNYv6>DRX_W1>(p$qHxKrqk$7HNHp|im=;4Cfs9Y-Ihj%tIuC5V zF?5pAEMl1eGq-r*J08>Pi{W_842YTI#~qLHHg6Cl3RQ0%>nQI(%qZ@lD0ZH$W#oj8 z@yU=4K+>7}a+slqufDPC+KEu^7#>p=HMNCDGq^#H9z%_6nRt@mzS5d#Zq0|1Y-zSz z0?=tJ7UY7^MsIS%z4+|hOO+4ndrkROLLIP-cRn&$QUl#DfDWg9%vjL$@x!~baLNlz zX@&r7Au}XiAOFTcXjDOmvC}P^sIL@ zS + + diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/public/vercel.svg b/typescript/02-deploy/02-nextjs-vercel-adapter/public/vercel.svg new file mode 100644 index 00000000..77053960 --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/public/window.svg b/typescript/02-deploy/02-nextjs-vercel-adapter/public/window.svg new file mode 100644 index 00000000..b2b2a44f --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/public/window.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/template.json b/typescript/02-deploy/02-nextjs-vercel-adapter/template.json new file mode 100644 index 00000000..ae31de3c --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/template.json @@ -0,0 +1,59 @@ +{ + "name": "Strands × Vercel AI SDK (Next.js)", + "slug": "strands--nextjs-strands-vercel-adapter-template", + "description": "A create-next-app-shaped template where the Vercel AI SDK owns the client (useChat) and the providers, and Strands Agents runs the loop, tools, sessions, and hooks inside the Next.js route handler through the VercelModel adapter. One-click deploy to Vercel, plus a container path to Amazon Bedrock AgentCore.", + "framework": "nextjs", + "type": "ai", + "useCase": ["Chatbot", "AI Agent"], + "demoUrl": "", + "repoUrl": "https://github.com/strands-agents/samples/tree/main/typescript/02-deploy/02-nextjs-vercel-adapter", + "relatedTemplates": [], + "tags": [ + "strands-agents", + "vercel-ai-sdk", + "usechat", + "vercelmodel", + "amazon-bedrock", + "openai", + "agentcore", + "nextjs", + "app-router", + "streaming", + "tools", + "sessions" + ], + "environmentVariables": [ + { + "key": "MODEL_PROVIDER", + "description": "Model provider: 'bedrock' (default) or 'openai'.", + "required": false, + "default": "bedrock" + }, + { + "key": "AWS_REGION", + "description": "AWS region for Amazon Bedrock (when MODEL_PROVIDER=bedrock).", + "required": false + }, + { + "key": "AWS_ACCESS_KEY_ID", + "description": "AWS access key id for Amazon Bedrock.", + "required": false + }, + { + "key": "AWS_SECRET_ACCESS_KEY", + "description": "AWS secret access key for Amazon Bedrock.", + "required": false + }, + { + "key": "OPENAI_API_KEY", + "description": "OpenAI API key (when MODEL_PROVIDER=openai).", + "required": false + }, + { + "key": "SESSION_BACKEND", + "description": "Session persistence: 'memory' (default), 'file', or 's3'.", + "required": false, + "default": "memory" + } + ] +} diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/tsconfig.json b/typescript/02-deploy/02-nextjs-vercel-adapter/tsconfig.json new file mode 100644 index 00000000..3a13f90a --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/tsconfig.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts", + "**/*.mts" + ], + "exclude": ["node_modules"] +} diff --git a/typescript/02-deploy/02-nextjs-vercel-adapter/vercel.json b/typescript/02-deploy/02-nextjs-vercel-adapter/vercel.json new file mode 100644 index 00000000..0d4c457b --- /dev/null +++ b/typescript/02-deploy/02-nextjs-vercel-adapter/vercel.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://openapi.vercel.sh/vercel.json", + "framework": "nextjs", + "functions": { + "app/api/chat/route.ts": { + "maxDuration": 60 + } + } +} diff --git a/typescript/02-deploy/README.md b/typescript/02-deploy/README.md index b96b02b2..d2409fd0 100644 --- a/typescript/02-deploy/README.md +++ b/typescript/02-deploy/README.md @@ -7,6 +7,7 @@ Reference patterns for deploying agents to production environments. | Folder | Platform | Description | |--------|----------|-------------| | [`01-agentcore`](./01-agentcore/) | Amazon Bedrock AgentCore | Host agents on purpose-built runtime | +| [`02-nextjs-vercel-adapter`](./02-nextjs-vercel-adapter/) | Vercel · AgentCore · Docker | Next.js chat app: Vercel AI SDK client + Strands server via the `VercelModel` adapter | ## Getting Started