├── backend ├── .gitignore ├── .dockerignore ├── tracer.ts ├── sst-env.d.ts ├── tsconfig.json ├── Dockerfile ├── package.json ├── logger.ts ├── main.ts ├── ecs-metadata │ ├── types.ts │ └── index.ts ├── middlewares.ts └── app.ts ├── test-app-signals.js ├── .vscode └── settings.json ├── .prettierrc ├── next.config.ts ├── postcss.config.mjs ├── eslint.config.mjs ├── tailwind.config.ts ├── sst-env.d.ts ├── tsconfig.json ├── .gitignore ├── package.json ├── lambda └── handler.ts ├── README.md ├── scripts ├── invoke.sh └── extract-urls.sh ├── sst.config.ts └── pnpm-lock.yaml /backend/.gitignore: -------------------------------------------------------------------------------- 1 | dist -------------------------------------------------------------------------------- /backend/.dockerignore: -------------------------------------------------------------------------------- 1 | 2 | # sst 3 | .sst -------------------------------------------------------------------------------- /test-app-signals.js: -------------------------------------------------------------------------------- 1 | const aws = require("@pulumi/aws"); console.log(typeof aws.applicationsignals); 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode" } 2 | -------------------------------------------------------------------------------- /backend/tracer.ts: -------------------------------------------------------------------------------- 1 | import { trace } from '@opentelemetry/api'; 2 | 3 | export const tracer = trace.getTracer(process.env.OTEL_SERVICE_NAME!); 4 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "trailingComma": "es5", 4 | "singleQuote": true, 5 | "printWidth": 140, 6 | "tabWidth": 2, 7 | "useTabs": false 8 | } 9 | -------------------------------------------------------------------------------- /next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | /* config options here */ 5 | }; 6 | 7 | export default nextConfig; 8 | -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /backend/sst-env.d.ts: -------------------------------------------------------------------------------- 1 | /* This file is auto-generated by SST. Do not edit. */ 2 | /* tslint:disable */ 3 | /* eslint-disable */ 4 | /* deno-fmt-ignore-file */ 5 | 6 | /// 7 | 8 | import "sst" 9 | export {} -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from "tailwindcss"; 2 | 3 | export default { 4 | content: [ 5 | "./pages/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./components/**/*.{js,ts,jsx,tsx,mdx}", 7 | "./app/**/*.{js,ts,jsx,tsx,mdx}", 8 | ], 9 | theme: { 10 | extend: { 11 | colors: { 12 | background: "var(--background)", 13 | foreground: "var(--foreground)", 14 | }, 15 | }, 16 | }, 17 | plugins: [], 18 | } satisfies Config; 19 | -------------------------------------------------------------------------------- /backend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "module": "commonjs", 5 | "outDir": "./dist", 6 | "rootDir": "./", 7 | "strict": true, 8 | "esModuleInterop": true, 9 | "skipLibCheck": true, 10 | "forceConsistentCasingInFileNames": true, 11 | "resolveJsonModule": true, 12 | "declaration": true, 13 | "sourceMap": true 14 | }, 15 | "include": [ 16 | "*.ts" 17 | ], 18 | "exclude": [ 19 | "node_modules", 20 | "dist" 21 | ] 22 | } -------------------------------------------------------------------------------- /sst-env.d.ts: -------------------------------------------------------------------------------- 1 | /* This file is auto-generated by SST. Do not edit. */ 2 | /* tslint:disable */ 3 | /* eslint-disable */ 4 | /* deno-fmt-ignore-file */ 5 | 6 | declare module "sst" { 7 | export interface Resource { 8 | "api": { 9 | "type": "sst.aws.ApiGatewayV2" 10 | "url": string 11 | } 12 | "lambdaFunction": { 13 | "name": string 14 | "type": "sst.aws.Function" 15 | "url": string 16 | } 17 | "service": { 18 | "service": string 19 | "type": "sst.aws.Service" 20 | } 21 | "vpc": { 22 | "type": "sst.aws.Vpc" 23 | } 24 | } 25 | } 26 | /// 27 | 28 | import "sst" 29 | export {} -------------------------------------------------------------------------------- /backend/Dockerfile: -------------------------------------------------------------------------------- 1 | # Use the Node.js 22 Alpine image as the base 2 | FROM node:22-alpine 3 | # Install curl 4 | RUN apk add --no-cache curl 5 | # Set the working directory 6 | WORKDIR /app 7 | # Copy package.json and package-lock.json 8 | COPY package*.json . 9 | # Install all dependencies (including devDependencies for build) 10 | RUN npm install 11 | # Copy TypeScript source files and tsconfig 12 | COPY *.ts tsconfig.json . 13 | COPY ecs-metadata/ ./ecs-metadata/ 14 | # Build the TypeScript application 15 | RUN npm run build 16 | # Remove devDependencies to reduce image size 17 | RUN npm prune --production 18 | # Expose port 80 19 | EXPOSE 80 20 | # Start the application 21 | CMD ["npm", "start"] 22 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2017", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "preserve", 15 | "incremental": true, 16 | "plugins": [ 17 | { 18 | "name": "next" 19 | } 20 | ], 21 | "paths": { 22 | "@/*": ["./*"] 23 | } 24 | }, 25 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 26 | "exclude": ["node_modules","sst.config.ts"] 27 | } 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | **/node_modules 5 | /.pnp 6 | .pnp.* 7 | .yarn/* 8 | !.yarn/patches 9 | !.yarn/plugins 10 | !.yarn/releases 11 | !.yarn/versions 12 | 13 | # testing 14 | /coverage 15 | 16 | # next.js 17 | /.next/ 18 | /out/ 19 | 20 | # production 21 | /build 22 | 23 | # misc 24 | .DS_Store 25 | *.pem 26 | 27 | # debug 28 | npm-debug.log* 29 | yarn-debug.log* 30 | yarn-error.log* 31 | .pnpm-debug.log* 32 | 33 | # env files (can opt-in for committing if needed) 34 | .env* 35 | 36 | # vercel 37 | .vercel 38 | 39 | # typescript 40 | *.tsbuildinfo 41 | next-env.d.ts 42 | 43 | # sst 44 | .sst 45 | 46 | # open-next 47 | .open-next 48 | 49 | # infrastructure outputs 50 | output.json 51 | -------------------------------------------------------------------------------- /backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "main.ts", 6 | "scripts": { 7 | "build": "tsc", 8 | "start": "node dist/main.js", 9 | "dev": "ts-node main.ts" 10 | }, 11 | "dependencies": { 12 | "@aws/aws-distro-opentelemetry-node-autoinstrumentation": "^0.7.0", 13 | "@opentelemetry/core": "^2.1.0", 14 | "cors": "^2.8.5", 15 | "express": "^4.18.2", 16 | "luxon": "^3.7.2", 17 | "winston": "^3.17.0" 18 | }, 19 | "devDependencies": { 20 | "@opentelemetry/api": "^1.9.0", 21 | "@types/cors": "^2.8.17", 22 | "@types/express": "^4.17.21", 23 | "@types/luxon": "^3.7.1", 24 | "@types/node": "^20.10.0", 25 | "ts-node": "^10.9.2", 26 | "typescript": "^5.3.3" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /backend/logger.ts: -------------------------------------------------------------------------------- 1 | import winston from 'winston'; 2 | import { getFormattedStartupTime, getTaskDefinitionVersion } from './ecs-metadata/index'; 3 | 4 | // Custom format to add container start time dynamically 5 | const addContainerMetadata = winston.format((info) => { 6 | const containerStart = getFormattedStartupTime(); 7 | const taskDefinitionVersion = getTaskDefinitionVersion(); 8 | if (containerStart) { 9 | info.containerStart = containerStart; 10 | } 11 | if (taskDefinitionVersion) { 12 | info.taskDefinition = taskDefinitionVersion; 13 | } 14 | return info; 15 | }); 16 | 17 | export const logger = winston.createLogger({ 18 | level: process.env.LOG_LEVEL || 'info', 19 | format: winston.format.combine( 20 | winston.format.timestamp(), 21 | winston.format.errors({ stack: true }), 22 | addContainerMetadata(), 23 | winston.format.json() 24 | ), 25 | defaultMeta: { 26 | service: process.env.OTEL_SERVICE_NAME!, 27 | environment: process.env.STAGE!, 28 | region: process.env.AWS_REGION || 'local', 29 | }, 30 | transports: [new winston.transports.Console()], 31 | }); 32 | -------------------------------------------------------------------------------- /backend/main.ts: -------------------------------------------------------------------------------- 1 | import app from './app'; 2 | import { logger } from './logger'; 3 | import { fetchECSMetadata, getFormattedStartupTime } from './ecs-metadata/index'; 4 | 5 | const port = 80; 6 | 7 | async function startServer() { 8 | try { 9 | logger.info('Starting server initialization...'); 10 | 11 | // Fetch ECS metadata first 12 | await fetchECSMetadata(); 13 | 14 | const containerStart = getFormattedStartupTime(); 15 | logger.info('ECS metadata fetching completed', { containerStart }); 16 | 17 | // Start the Express server 18 | app.listen(port, () => { 19 | logger.info('Server started successfully', { 20 | port: port, 21 | environment: process.env.NODE_ENV || 'development', 22 | region: process.env.AWS_REGION || 'local', 23 | logLevel: logger.level, 24 | url: `http://localhost:${port}`, 25 | containerStart, 26 | }); 27 | }); 28 | } catch (error) { 29 | logger.error('Failed to start server', { 30 | error: error instanceof Error ? error.message : String(error), 31 | }); 32 | process.exit(1); 33 | } 34 | } 35 | 36 | // Start the server 37 | startServer(); 38 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ecs-fargate", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "build": "next build", 7 | "dev": "next dev", 8 | "lint": "next lint", 9 | "start": "next start", 10 | "sst:deploy:dev": "npx sst deploy --stage=dev", 11 | "sst:remove:dev": "npx sst remove --stage=dev", 12 | "extract-urls:dev": "chmod +x ./scripts/extract-urls.sh && ./scripts/extract-urls.sh --stage=dev", 13 | "invoke:ecs:dev": "chmod +x ./scripts/invoke.sh && ./scripts/invoke.sh --stage=dev --type=ecs --path=${INVOKE_PATH:-/}", 14 | "invoke:lambda:dev": "chmod +x ./scripts/invoke.sh && ./scripts/invoke.sh --stage=dev --type=lambda --path=${INVOKE_PATH:-/}" 15 | }, 16 | "dependencies": { 17 | "@opentelemetry/api": "^1.9.0", 18 | "next": "15.1.4", 19 | "react": "^19.0.0", 20 | "react-dom": "^19.0.0", 21 | "sst": "3.17.13" 22 | }, 23 | "devDependencies": { 24 | "@eslint/eslintrc": "^3", 25 | "@types/aws-lambda": "^8.10.152", 26 | "@types/node": "^20", 27 | "@types/react": "^19", 28 | "@types/react-dom": "^19", 29 | "eslint": "^9", 30 | "eslint-config-next": "15.1.4", 31 | "postcss": "^8", 32 | "prettier": "^3.4.2", 33 | "tailwindcss": "^3.4.1", 34 | "typescript": "^5" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lambda/handler.ts: -------------------------------------------------------------------------------- 1 | import { context, trace } from '@opentelemetry/api'; 2 | import type { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda'; 3 | import { randomBytes } from 'crypto'; 4 | 5 | const tracer = trace.getTracer(process.env.OTEL_SERVICE_NAME!); 6 | 7 | export const handler = async (event: APIGatewayProxyEvent): Promise => { 8 | const exampleSpan = tracer.startSpan('lambda-span'); 9 | 10 | console.log(`Incoming request`); 11 | 12 | exampleSpan.end(); 13 | 14 | const span = trace.getSpan(context.active()); 15 | const version = '00'; 16 | let flags = '01'; 17 | let spanId: string; 18 | let traceId: string; 19 | 20 | if (!span) { 21 | traceId = randomBytes(16).toString('hex'); 22 | spanId = randomBytes(8).toString('hex'); 23 | } else { 24 | traceId = span.spanContext().traceId; 25 | spanId = span.spanContext().spanId; 26 | flags = span.spanContext().traceFlags.toString(); 27 | } 28 | 29 | const traceparent = `${version}-${traceId}-${spanId}-${flags}`; 30 | 31 | return { 32 | statusCode: 200, 33 | headers: { 34 | 'Content-Type': 'application/json', 35 | 'Access-Control-Allow-Origin': '*', 36 | 'traceparent': traceparent, 37 | 'trace_id': traceId, 38 | }, 39 | body: JSON.stringify({ 40 | message: 'Hello from Lambda!', 41 | }), 42 | }; 43 | }; 44 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CloudWatch Application Signals via OpenTelemetry on Fargate and Lambda 2 | 3 | This project demonstrates how to run two simple Node.js apps using [Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html) via ECS and [AWS Lambda](https://docs.aws.amazon.com/lambda/) with [SST](https://sst.dev) v3 to showcase [CloudWatch's Application Signals](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html). 4 | 5 | ## Getting Started 6 | 7 | To run this application, follow these steps: 8 | 9 | 1. Ensure you have Node.js installed on your system. 10 | 2. Clone this repository to your local machine. 11 | 3. Install the dependencies by running `pnpm i` in the project root directory. 12 | 4. Provision the infrastructure via `pnpm run sst:deploy:dev`. 13 | 5. Invoke either ECS or Lambda via the provided NX commands, e.g. `INVOKE_PATH=/lambda pnpm run invoke:ecs:dev` 14 | 6. Open the CloudWatch console to explore your Application Map! 15 | 16 | ## Important: Cost Considerations 17 | 18 | ⚠️ **Warning:** This project spins up Fargate tasks that remain running and will incur ongoing costs (approximately $7-$10 per month, not including CloudWatch charges). 19 | 20 | To avoid unexpected charges, remove all resources when done by running: 21 | ```bash 22 | pnpm run sst:remove:dev 23 | ``` 24 | 25 | ## Learn More 26 | 27 | For more AWS fundamentals content and resources: 28 | - Visit our blog at [awsfundamentals.com/blog](https://awsfundamentals.com/blog) 29 | - Check out our other projects on GitHub at [awsfundamentals-hq](https://github.com/awsfundamentals-hq) 30 | -------------------------------------------------------------------------------- /backend/ecs-metadata/types.ts: -------------------------------------------------------------------------------- 1 | export interface ECSContainer { 2 | DockerId: string; 3 | Name: string; 4 | DockerName: string; 5 | Image: string; 6 | ImageID: string; 7 | Labels: { 8 | 'com.amazonaws.ecs.cluster': string; 9 | 'com.amazonaws.ecs.container-name': string; 10 | 'com.amazonaws.ecs.task-arn': string; 11 | 'com.amazonaws.ecs.task-definition-family': string; 12 | 'com.amazonaws.ecs.task-definition-version': string; 13 | [key: string]: string; 14 | }; 15 | DesiredStatus: string; 16 | KnownStatus: string; 17 | Limits: { 18 | CPU: number; 19 | Memory?: number; 20 | }; 21 | CreatedAt: string; 22 | StartedAt: string; 23 | Type: string; 24 | Health?: { 25 | status: string; 26 | statusSince: string; 27 | output?: string; 28 | }; 29 | LogDriver: string; 30 | LogOptions: { 31 | 'awslogs-group': string; 32 | 'awslogs-region': string; 33 | 'awslogs-stream': string; 34 | mode: string; 35 | }; 36 | ContainerARN: string; 37 | Networks: Array<{ 38 | NetworkMode: string; 39 | IPv4Addresses: string[]; 40 | AttachmentIndex: number; 41 | MACAddress: string; 42 | IPv4SubnetCIDRBlock: string; 43 | DomainNameServers: string[]; 44 | DomainNameSearchList: string[]; 45 | PrivateDNSName: string; 46 | SubnetGatewayIpv4Address: string; 47 | }>; 48 | Snapshotter: string; 49 | } 50 | 51 | export interface ECSTaskMetadata { 52 | Cluster: string; 53 | TaskARN: string; 54 | Family: string; 55 | Revision: string; 56 | DesiredStatus: string; 57 | KnownStatus: string; 58 | Limits: { 59 | CPU: number; 60 | Memory: number; 61 | }; 62 | PullStartedAt: string; 63 | PullStoppedAt: string; 64 | AvailabilityZone: string; 65 | LaunchType: string; 66 | Containers: ECSContainer[]; 67 | ServiceName?: string; 68 | ClockDrift?: { 69 | ClockErrorBound: number; 70 | ReferenceTimestamp: string; 71 | ClockSynchronizationStatus: string; 72 | }; 73 | EphemeralStorageMetrics?: { 74 | Utilized: number; 75 | Reserved: number; 76 | }; 77 | FaultInjectionEnabled?: boolean; 78 | } 79 | 80 | export interface ContainerMetadata { 81 | startTime: string; // ISO string format 82 | taskDefinitionVersion: string; 83 | containerName: string; 84 | taskArn: string; 85 | cluster: string; 86 | } -------------------------------------------------------------------------------- /backend/middlewares.ts: -------------------------------------------------------------------------------- 1 | import { context, trace } from '@opentelemetry/api'; 2 | import { suppressTracing } from '@opentelemetry/core'; 3 | import { randomBytes } from 'crypto'; 4 | import { NextFunction, Request, Response } from 'express'; 5 | import { getRelativeStartupTime, getTaskDefinitionVersion } from './ecs-metadata/index'; 6 | import { logger } from './logger'; 7 | 8 | export const requestLoggingMiddleware = (req: Request, res: Response, next: NextFunction) => { 9 | const start = Date.now(); 10 | const { url, method } = req; 11 | const userAgent = req.get('User-Agent'); 12 | 13 | logger.info(`Example ECS Span opened`, { method, url, userAgent }); 14 | logger.info('Incoming request', { method, url, userAgent }); 15 | 16 | const originalEnd = res.end.bind(res); 17 | res.end = function (chunk?: any, encoding?: BufferEncoding | (() => void), cb?: () => void) { 18 | const duration = `${Date.now() - start}ms`; 19 | const { statusCode } = res; 20 | logger.info('Request completed', { method, url, statusCode, duration }); 21 | return originalEnd(chunk, encoding as BufferEncoding, cb); 22 | }; 23 | 24 | next(); 25 | }; 26 | 27 | export const startupHeaderMiddleware = (_req: Request, res: Response, next: NextFunction) => { 28 | const relativeStartupTime = getRelativeStartupTime(); 29 | if (relativeStartupTime) { 30 | res.set('x-startup', relativeStartupTime); 31 | } 32 | 33 | const taskDefinitionVersion = getTaskDefinitionVersion(); 34 | if (taskDefinitionVersion) { 35 | res.set('x-task-definition', taskDefinitionVersion); 36 | } 37 | 38 | next(); 39 | }; 40 | 41 | export const traceparentMiddleware = (_req: Request, res: Response, next: NextFunction) => { 42 | let traceparent: string; 43 | const span = trace.getSpan(context.active()); 44 | 45 | const version = '00'; 46 | let flags = '01'; 47 | let spanId: string; 48 | let traceId: string; 49 | 50 | if (!span) { 51 | traceId = randomBytes(16).toString('hex'); 52 | spanId = randomBytes(8).toString('hex'); 53 | } else { 54 | traceId = span.spanContext().traceId; 55 | spanId = span.spanContext().spanId; 56 | flags = span.spanContext().traceFlags.toString(); 57 | } 58 | 59 | traceparent = `${version}-${traceId}-${spanId}-${flags}`; 60 | res.set('traceparent', traceparent); 61 | res.set('trace_id', traceId); 62 | res.locals.traceparent = traceparent; 63 | 64 | next(); 65 | }; 66 | 67 | export const suppressTracingMiddleware = (req: Request, res: Response, next: NextFunction) => { 68 | if (req.path === '/health') { 69 | const suppressedContext = suppressTracing(context.active()); 70 | context.with(suppressedContext, next); 71 | } else { 72 | next(); 73 | } 74 | }; 75 | -------------------------------------------------------------------------------- /scripts/invoke.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Invoke deployed infrastructure endpoints 4 | # Usage: ./invoke.sh --stage=dev --type=lambda 5 | # ./invoke.sh --stage=prod --type=ecs 6 | # ./invoke.sh --stage=dev --type=ecs --path=/health 7 | # ./invoke.sh --stage=dev --type=ecs --path=lambda 8 | 9 | set -e 10 | 11 | # Default values 12 | STAGE="dev" 13 | TYPE="" 14 | REQUEST_PATH="" 15 | OUTPUT_FILE="output.json" 16 | 17 | # Parse command line arguments 18 | for arg in "$@"; do 19 | case $arg in 20 | --stage=*) 21 | STAGE="${arg#*=}" 22 | shift 23 | ;; 24 | --type=*) 25 | TYPE="${arg#*=}" 26 | shift 27 | ;; 28 | --path=*) 29 | REQUEST_PATH="${arg#*=}" 30 | shift 31 | ;; 32 | *) 33 | echo "❌ Unknown argument: $arg" 34 | echo " Usage: $0 --stage=dev --type=lambda|ecs [--path=/endpoint]" 35 | exit 1 36 | ;; 37 | esac 38 | done 39 | 40 | # Validate required parameters 41 | if [[ -z "$TYPE" ]]; then 42 | echo "❌ Error: --type parameter is required" 43 | echo " Usage: $0 --stage=$STAGE --type=lambda|ecs [--path=/endpoint]" 44 | exit 1 45 | fi 46 | 47 | if [[ "$TYPE" != "lambda" && "$TYPE" != "ecs" ]]; then 48 | echo "❌ Error: --type must be either 'lambda' or 'ecs'" 49 | echo " Usage: $0 --stage=$STAGE --type=lambda|ecs [--path=/endpoint]" 50 | exit 1 51 | fi 52 | 53 | # Function to append path to URL while avoiding double slashes 54 | append_path() { 55 | local base_url="$1" 56 | local request_path="$2" 57 | 58 | if [[ -z "$request_path" ]]; then 59 | echo "$base_url" 60 | return 61 | fi 62 | 63 | # Remove trailing slash from base URL if it exists 64 | base_url="${base_url%/}" 65 | 66 | # Add leading slash to path if it doesn't exist 67 | if [[ "$request_path" != /* ]]; then 68 | request_path="/$request_path" 69 | fi 70 | 71 | echo "${base_url}${request_path}" 72 | } 73 | 74 | # Check if output.json exists, if not generate it 75 | if [[ ! -f "$OUTPUT_FILE" ]]; then 76 | echo "📄 output.json not found, generating URLs for stage: $STAGE" 77 | if ! pnpm run extract-urls:$STAGE; then 78 | echo "❌ Failed to extract URLs for stage: $STAGE" 79 | exit 1 80 | fi 81 | echo "✅ URLs extracted successfully" 82 | fi 83 | 84 | # Extract the appropriate URL based on type 85 | if [[ "$TYPE" == "lambda" ]]; then 86 | base_url=$(jq -r '.lambdaFunctionUrl // empty' "$OUTPUT_FILE" 2>/dev/null) 87 | if [[ -z "$base_url" || "$base_url" == "null" ]]; then 88 | echo "❌ No Lambda Function URL found in $OUTPUT_FILE" 89 | exit 1 90 | fi 91 | url=$(append_path "$base_url" "$REQUEST_PATH") 92 | echo "⚡ Invoking Lambda Function: $url" 93 | elif [[ "$TYPE" == "ecs" ]]; then 94 | base_url=$(jq -r '.apiGatewayUrl // empty' "$OUTPUT_FILE" 2>/dev/null) 95 | if [[ -z "$base_url" || "$base_url" == "null" ]]; then 96 | echo "❌ No API GW URL found in $OUTPUT_FILE" 97 | exit 1 98 | fi 99 | url=$(append_path "$base_url" "$REQUEST_PATH") 100 | echo "🔗 Invoking ECS API GW: $url" 101 | fi 102 | 103 | # Perform the cURL request 104 | echo "🚀 Making HTTP request..." 105 | echo "---" 106 | 107 | echo "📊 Response Headers:" 108 | echo "----------------" 109 | if ! curl -f -s -D - -o /dev/null "$url" | grep -v "^$" && \ 110 | echo "----------------" && \ 111 | echo -e "\n📈 Metrics:" && \ 112 | curl -f -s -o /dev/null -w "\nHTTP Status: %{http_code}\nResponse Time: %{time_total}s\nTotal Size: %{size_download} bytes\n" "$url"; then 113 | echo "" 114 | echo "❌ Request failed" 115 | exit 1 116 | fi 117 | 118 | echo "" 119 | echo "✅ Request completed successfully" -------------------------------------------------------------------------------- /scripts/extract-urls.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Extract infrastructure URLs from AWS 4 | # Usage: ./extract-urls.sh --stage=dev 5 | 6 | set -e 7 | 8 | # Default values 9 | APP_NAME="ecs-fargate" 10 | OUTPUT_FILE="output.json" 11 | 12 | # Parse command line arguments 13 | STAGE="" 14 | 15 | for arg in "$@"; do 16 | case $arg in 17 | --stage=*) 18 | STAGE="${arg#*=}" 19 | shift 20 | ;; 21 | *) 22 | echo "❌ Unknown argument: $arg" 23 | exit 1 24 | ;; 25 | esac 26 | done 27 | 28 | # Validate required parameters 29 | if [[ -z "$STAGE" ]]; then 30 | echo "❌ Error: --stage parameter is required" 31 | echo " Usage: $0 --stage=dev" 32 | exit 1 33 | fi 34 | 35 | # Function to get API Gateway URL 36 | get_api_gateway_url() { 37 | local stage=$1 38 | local api_name="${APP_NAME}-${stage}-ecs" 39 | 40 | echo "🔍 Searching for API Gateway in stage: $stage" >&2 41 | 42 | # First, get the API ID 43 | local api_id 44 | api_id=$(aws apigatewayv2 get-apis \ 45 | --query "Items[?Name=='${api_name}'].ApiId" \ 46 | --output text 2>/dev/null || echo "None") 47 | 48 | if [[ -n "$api_id" && "$api_id" != "None" && "$api_id" != "" ]]; then 49 | # Get the region from AWS CLI configuration 50 | local region 51 | region=$(aws configure get region) 52 | local api_url="https://${api_id}.execute-api.${region}.amazonaws.com/" 53 | 54 | echo "✅ Found API Gateway: $api_url" >&2 55 | echo "$api_url" 56 | else 57 | echo "⚠️ No API Gateway found for stage: $stage" >&2 58 | return 1 59 | fi 60 | } 61 | 62 | # Function to get Lambda Function URL 63 | get_lambda_function_url() { 64 | local stage=$1 65 | local function_name="${APP_NAME}-${stage}-lambda" 66 | 67 | echo "🔍 Searching for Lambda Function in stage: $stage" >&2 68 | 69 | local lambda_url 70 | lambda_url=$(aws lambda get-function-url-config \ 71 | --function-name "$function_name" \ 72 | --query "FunctionUrl" \ 73 | --output text 2>/dev/null || echo "None") 74 | 75 | if [[ -n "$lambda_url" && "$lambda_url" != "None" && "$lambda_url" != "" ]]; then 76 | echo "✅ Found Lambda Function: $lambda_url" >&2 77 | echo "$lambda_url" 78 | else 79 | echo "⚠️ No Lambda Function URL found for stage: $stage" >&2 80 | return 1 81 | fi 82 | } 83 | 84 | # Function to create/update the complete JSON file 85 | create_output_json() { 86 | local lb_url=$1 87 | local lambda_url=$2 88 | local timestamp=$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ") 89 | 90 | local temp_file 91 | temp_file=$(mktemp) 92 | 93 | # Create the JSON structure 94 | jq -n \ 95 | --arg api_url "$api_url" \ 96 | --arg lambda_url "$lambda_url" \ 97 | --arg timestamp "$timestamp" \ 98 | '{ 99 | "apiGatewayUrl": (if $api_url == "" then null else $api_url end), 100 | "lambdaFunctionUrl": (if $lambda_url == "" then null else $lambda_url end), 101 | "extractedAt": $timestamp 102 | }' > "$temp_file" && mv "$temp_file" "$OUTPUT_FILE" 103 | } 104 | 105 | # Main execution 106 | echo "🚀 Extracting infrastructure URLs for stage: $STAGE" 107 | 108 | # Extract API Gateway URL 109 | api_url="" 110 | if url=$(get_api_gateway_url "$STAGE"); then 111 | api_url="$url" 112 | fi 113 | 114 | # Extract Lambda Function URL 115 | lambda_url="" 116 | if url=$(get_lambda_function_url "$STAGE"); then 117 | lambda_url="$url" 118 | fi 119 | 120 | # Create the output file 121 | create_output_json "$api_url" "$lambda_url" 122 | 123 | echo "✅ URLs extracted successfully!" 124 | echo "📁 Written to: $OUTPUT_FILE" 125 | 126 | if [[ -n "$api_url" ]]; then 127 | echo "🌐 API Gateway URL: $api_url" 128 | fi 129 | 130 | if [[ -n "$lambda_url" ]]; then 131 | echo "⚡ Lambda Function URL: $lambda_url" 132 | fi 133 | 134 | # Show summary 135 | if [[ -z "$api_url" && -z "$lambda_url" ]]; then 136 | echo "❌ No infrastructure URLs found for stage: $STAGE" 137 | exit 1 138 | fi 139 | -------------------------------------------------------------------------------- /backend/app.ts: -------------------------------------------------------------------------------- 1 | import cors from 'cors'; 2 | import express from 'express'; 3 | import { getFormattedStartupTime, metadataFetched } from './ecs-metadata/index'; 4 | import { logger } from './logger'; 5 | import { requestLoggingMiddleware, startupHeaderMiddleware, traceparentMiddleware, suppressTracingMiddleware } from './middlewares'; 6 | import { tracer } from './tracer'; 7 | 8 | const app: express.Application = express(); 9 | 10 | app.use(suppressTracingMiddleware); 11 | app.use(cors()); 12 | app.use(traceparentMiddleware); 13 | app.use(startupHeaderMiddleware); 14 | app.use(requestLoggingMiddleware); 15 | 16 | app.get('/health', (_req, res) => { 17 | if (!metadataFetched) { 18 | return res.status(503).json({ 19 | status: 'Service Unavailable', 20 | message: 'ECS metadata is still being fetched', 21 | ready: false, 22 | }); 23 | } 24 | 25 | const containerStart = getFormattedStartupTime(); 26 | res.status(200).json({ 27 | status: 'OK', 28 | ready: true, 29 | containerStart, 30 | }); 31 | }); 32 | 33 | app.get('/echo', async (_req, res) => { 34 | try { 35 | const response = await fetch('https://postman-echo.com/get', { 36 | method: 'GET', 37 | headers: { 'Content-Type': 'application/json' }, 38 | }); 39 | 40 | if (!response.ok) { 41 | throw new Error(`Postman Echo API returned ${response.status}`); 42 | } 43 | 44 | const data = await response.json(); 45 | 46 | res.json({ 47 | message: 'Echo from Postman Echo API', 48 | postmanEchoResponse: data, 49 | }); 50 | } catch (error) { 51 | logger.error('Error in /echo route', { error: error instanceof Error ? error.message : String(error) }); 52 | res.status(500).json({ 53 | error: 'Failed to call Postman Echo API', 54 | message: error instanceof Error ? error.message : 'Unknown error', 55 | }); 56 | } 57 | }); 58 | 59 | app.get('/lambda', async (_req, res) => { 60 | try { 61 | const lambdaFunctionUrl = process.env.LAMBDA_FUNCTION_URL; 62 | 63 | if (!lambdaFunctionUrl) { 64 | logger.error('LAMBDA_FUNCTION_URL environment variable not set'); 65 | return res.status(500).json({ 66 | error: 'Lambda function URL not configured', 67 | message: 'LAMBDA_FUNCTION_URL environment variable is not set', 68 | }); 69 | } 70 | 71 | logger.info('Calling Lambda function', { lambdaFunctionUrl }); 72 | 73 | const lambdaSpan = tracer.startSpan('invokeLambda'); 74 | const response = await fetch(lambdaFunctionUrl, { 75 | method: 'GET', 76 | headers: { 'Content-Type': 'application/json' }, 77 | }); 78 | lambdaSpan.setStatus({ code: response.status }); 79 | lambdaSpan.end(); 80 | 81 | if (!response.ok) { 82 | throw new Error(`Lambda function returned ${response.status}: ${response.statusText}`); 83 | } 84 | 85 | const data = await response.json(); 86 | 87 | logger.info('Lambda function call completed', { 88 | statusCode: response.status, 89 | responseSize: JSON.stringify(data).length, 90 | }); 91 | 92 | res.json(data); 93 | } catch (error) { 94 | logger.error('Error in /lambda route', { 95 | error: error instanceof Error ? error.message : String(error), 96 | lambdaFunctionUrl: process.env.LAMBDA_FUNCTION_URL || 'not-set', 97 | }); 98 | res.status(500).json({ 99 | error: 'Failed to call Lambda function', 100 | message: error instanceof Error ? error.message : 'Unknown error', 101 | }); 102 | } 103 | }); 104 | 105 | app.get('/meta', async (_req, res) => { 106 | try { 107 | const metadataUri = process.env.ECS_CONTAINER_METADATA_URI_V4; 108 | 109 | if (!metadataUri) { 110 | logger.error('ECS_CONTAINER_METADATA_URI_V4 environment variable not set'); 111 | return res.status(500).json({ 112 | error: 'ECS metadata URI not configured', 113 | message: 'ECS_CONTAINER_METADATA_URI_V4 environment variable is not set', 114 | }); 115 | } 116 | 117 | logger.info('Fetching ECS task metadata', { metadataUri }); 118 | 119 | const response = await fetch(`${metadataUri}/task`); 120 | 121 | if (!response.ok) { 122 | throw new Error(`ECS metadata API returned ${response.status}: ${response.statusText}`); 123 | } 124 | 125 | const data = await response.json(); 126 | 127 | logger.info('ECS task metadata retrieved successfully', { 128 | statusCode: response.status, 129 | responseSize: JSON.stringify(data).length, 130 | }); 131 | 132 | res.json(data); 133 | } catch (error) { 134 | logger.error('Error in /meta route', { 135 | error: error instanceof Error ? error.message : String(error), 136 | metadataUri: process.env.ECS_CONTAINER_METADATA_URI_V4 || 'not-set', 137 | }); 138 | res.status(500).json({ 139 | error: 'Failed to fetch ECS task metadata', 140 | message: error instanceof Error ? error.message : 'Unknown error', 141 | }); 142 | } 143 | }); 144 | 145 | app.use('*', (_req, res) => res.json({ message: 'Hello from Fargate! 🏗️' })); 146 | 147 | export default app; 148 | -------------------------------------------------------------------------------- /backend/ecs-metadata/index.ts: -------------------------------------------------------------------------------- 1 | import { DateTime } from 'luxon'; 2 | import { logger } from '../logger'; 3 | import { ECSTaskMetadata, ECSContainer, ContainerMetadata } from './types'; 4 | 5 | // Global variable to store the app container's startup time 6 | export let containerStartTime: DateTime | null = null; 7 | 8 | // Global variable to store container metadata 9 | export let containerMetadata: ContainerMetadata | null = null; 10 | 11 | // Flag to track if metadata fetching is complete 12 | export let metadataFetched = false; 13 | 14 | const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); 15 | 16 | export async function fetchECSMetadata(): Promise { 17 | const metadataUri = process.env.ECS_CONTAINER_METADATA_URI_V4; 18 | 19 | // If not in ECS environment, use current time as fallback 20 | if (!metadataUri) { 21 | logger.info('Not running in ECS environment, using current time as container start time'); 22 | containerStartTime = DateTime.now(); 23 | containerMetadata = { 24 | startTime: containerStartTime.toISO() || containerStartTime.toISODate() || 'unknown', 25 | taskDefinitionVersion: 'local-dev', 26 | containerName: 'app', 27 | taskArn: 'local-development', 28 | cluster: 'local', 29 | }; 30 | metadataFetched = true; 31 | return; 32 | } 33 | 34 | logger.info('Fetching ECS metadata for container startup time', { metadataUri }); 35 | 36 | let retryCount = 0; 37 | const maxRetries = 30; // Maximum number of retries 38 | const baseDelay = 1000; // Base delay in milliseconds 39 | 40 | while (retryCount < maxRetries) { 41 | try { 42 | const controller = new AbortController(); 43 | const timeoutId = setTimeout(() => controller.abort(), 5000); 44 | 45 | const response = await fetch(`${metadataUri}/task`, { 46 | signal: controller.signal, 47 | }); 48 | 49 | clearTimeout(timeoutId); 50 | 51 | if (!response.ok) { 52 | throw new Error(`ECS metadata API returned ${response.status}: ${response.statusText}`); 53 | } 54 | 55 | const data: ECSTaskMetadata = await response.json(); 56 | 57 | // Find the 'app' container 58 | const appContainer = data.Containers.find(container => container.Name === 'app'); 59 | 60 | if (!appContainer) { 61 | throw new Error('Could not find "app" container in ECS metadata'); 62 | } 63 | 64 | if (appContainer.KnownStatus !== 'RUNNING') { 65 | throw new Error(`App container is not running yet, status: ${appContainer.KnownStatus}`); 66 | } 67 | 68 | // Parse the StartedAt timestamp and convert to luxon DateTime 69 | containerStartTime = DateTime.fromISO(appContainer.StartedAt); 70 | 71 | if (!containerStartTime.isValid) { 72 | throw new Error(`Invalid StartedAt timestamp: ${appContainer.StartedAt}`); 73 | } 74 | 75 | // Extract task definition version from container labels 76 | const taskDefinitionVersion = appContainer.Labels['com.amazonaws.ecs.task-definition-version']; 77 | 78 | // Store container metadata 79 | containerMetadata = { 80 | startTime: appContainer.StartedAt, 81 | taskDefinitionVersion, 82 | containerName: appContainer.Name, 83 | taskArn: data.TaskARN, 84 | cluster: data.Cluster, 85 | }; 86 | 87 | logger.info('Successfully retrieved container startup time from ECS metadata', { 88 | startedAt: appContainer.StartedAt, 89 | formattedTime: containerStartTime.toFormat('yyyy-MM-dd HH:mm:ss'), 90 | taskDefinitionVersion, 91 | retryCount, 92 | }); 93 | 94 | metadataFetched = true; 95 | return; 96 | 97 | } catch (error) { 98 | retryCount++; 99 | const delay = Math.min(baseDelay * Math.pow(2, retryCount - 1), 30000); // Exponential backoff, max 30 seconds 100 | 101 | logger.warn('Failed to fetch ECS metadata, retrying...', { 102 | error: error instanceof Error ? error.message : String(error), 103 | retryCount, 104 | maxRetries, 105 | nextRetryIn: `${delay}ms`, 106 | }); 107 | 108 | if (retryCount >= maxRetries) { 109 | logger.error('Max retries reached for ECS metadata fetching, using current time as fallback', { 110 | maxRetries, 111 | finalError: error instanceof Error ? error.message : String(error), 112 | }); 113 | 114 | // Use current time as fallback 115 | containerStartTime = DateTime.now(); 116 | containerMetadata = { 117 | startTime: containerStartTime.toISO() || containerStartTime.toISODate() || 'unknown', 118 | taskDefinitionVersion: 'unknown', 119 | containerName: 'app', 120 | taskArn: 'unknown', 121 | cluster: 'unknown', 122 | }; 123 | metadataFetched = true; 124 | return; 125 | } 126 | 127 | await sleep(delay); 128 | } 129 | } 130 | } 131 | 132 | // Helper function to get formatted startup time for logging 133 | export function getFormattedStartupTime(): string | null { 134 | return containerStartTime ? containerStartTime.toFormat('yyyy-MM-dd HH:mm:ss') : null; 135 | } 136 | 137 | // Helper function to get relative startup time for headers 138 | export function getRelativeStartupTime(): string | null { 139 | return containerStartTime ? containerStartTime.toRelative() : null; 140 | } 141 | 142 | // Helper function to get task definition version 143 | export function getTaskDefinitionVersion(): string | null { 144 | return containerMetadata ? containerMetadata.taskDefinitionVersion : null; 145 | } 146 | 147 | // Helper function to get all container metadata 148 | export function getContainerMetadata(): ContainerMetadata | null { 149 | return containerMetadata; 150 | } -------------------------------------------------------------------------------- /sst.config.ts: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line @typescript-eslint/triple-slash-reference 2 | /// 3 | 4 | const oTelSharedSettings: Record = { 5 | OTEL_LOG_LEVEL: 'WARN', 6 | OTEL_PROPAGATORS: 'xray', 7 | OTEL_LOGS_EXPORTER: 'none', 8 | OTEL_TRACES_EXPORTER: 'none', 9 | OTEL_METRICS_EXPORTER: 'none', 10 | OTEL_TRACES_SAMPLER: 'traceidratio', 11 | OTEL_TRACES_SAMPLER_ARG: '1', 12 | }; 13 | 14 | const getOtelResourceAttributes = (params: { name: string; type: 'ecs' | 'lambda' }) => { 15 | const { name, type } = params; 16 | let logGroupPrefix: string; 17 | if (type === 'lambda') { 18 | logGroupPrefix = `/aws/lambda`; 19 | } else if (type === 'ecs') { 20 | logGroupPrefix = `/ecs`; 21 | } else { 22 | throw new Error('Unknown type'); 23 | } 24 | const attributes = { 25 | OTEL_SERVICE_NAME: `${$app.name}-${$app.stage}-${type}`, 26 | Application: `${$app.name}-${$app.stage}`, 27 | Owner: `awsfundamentals`, 28 | 'service.name': name, 29 | 'deployment.environment': $app.stage, 30 | 'aws.log.group.names': `${logGroupPrefix}/${name}`, 31 | 'aws.application_signals.metric_resource_keys': 'Application&Owner', 32 | // experimental 33 | 'aws.local.environment': $app.stage, 34 | 'aws.local.service': name, 35 | }; 36 | return Object.entries(attributes) 37 | .map(([key, value]) => `${key}=${value}`) 38 | .join(','); 39 | }; 40 | 41 | const createCwAgentConfigSsm = () => { 42 | const name = `${$app.name}-${$app.stage}`; 43 | return new aws.ssm.Parameter('cwAgentConfig', { 44 | name: `/ecs/${name}/cw-agent-config`, 45 | type: 'String', 46 | value: ` 47 | { 48 | "traces": { 49 | "traces_collected": { 50 | "application_signals": {} 51 | } 52 | }, 53 | "logs": { 54 | "metrics_collected": { 55 | "application_signals": {} 56 | } 57 | } 58 | } 59 | `, 60 | }); 61 | }; 62 | 63 | /** 64 | * Create the necessary roles for ECS: execution role and task role. 65 | * 66 | * • ECS Task Execution Role: Allows ECS to manage the task execution. 67 | * • ECS Task Role: Allows the task to interact with other AWS services. 68 | */ 69 | const createRoles = () => { 70 | const managedPolicies = { 71 | taskRole: ['CloudWatchFullAccess', 'AWSXRayDaemonWriteAccess', 'CloudWatchAgentServerPolicy'], 72 | executionRole: ['service-role/AmazonECSTaskExecutionRolePolicy', 'AmazonSSMFullAccess'], 73 | }; 74 | const executionRole = new aws.iam.Role('executionRole', { 75 | name: `${$app.name}-${$app.stage}-exec`, 76 | assumeRolePolicy: JSON.stringify({ 77 | Version: '2012-10-17', 78 | Statement: [ 79 | { 80 | Effect: 'Allow', 81 | Principal: { 82 | Service: 'ecs-tasks.amazonaws.com', 83 | }, 84 | Action: 'sts:AssumeRole', 85 | }, 86 | ], 87 | }), 88 | }); 89 | for (const [index, policyArn] of managedPolicies.executionRole.entries()) { 90 | new aws.iam.RolePolicyAttachment(`executionRoleAttachment${index}`, { 91 | policyArn: $interpolate`arn:aws:iam::aws:policy/${policyArn}`, 92 | role: executionRole, 93 | }); 94 | } 95 | 96 | const taskRole = new aws.iam.Role('taskRole', { 97 | name: `${$app.name}-${$app.stage}-task`, 98 | assumeRolePolicy: JSON.stringify({ 99 | Version: '2012-10-17', 100 | Statement: [ 101 | { 102 | Effect: 'Allow', 103 | Principal: { 104 | Service: 'ecs-tasks.amazonaws.com', 105 | }, 106 | Action: 'sts:AssumeRole', 107 | }, 108 | ], 109 | }), 110 | }); 111 | for (const [index, policyArn] of managedPolicies.taskRole.entries()) { 112 | new aws.iam.RolePolicyAttachment(`taskRoleAttachment${index}`, { 113 | policyArn: $interpolate`arn:aws:iam::aws:policy/${policyArn}`, 114 | role: taskRole, 115 | }); 116 | } 117 | 118 | return { executionRole: executionRole.name, taskRole: taskRole.name }; 119 | }; 120 | 121 | /** 122 | * Create a Lambda function with Function URL enabled. 123 | */ 124 | const createLambdaFunction = () => { 125 | const name = `${$app.name}-${$app.stage}-lambda`; 126 | 127 | const lambdaFunction = new sst.aws.Function('lambdaFunction', { 128 | name, 129 | runtime: aws.lambda.Runtime.NodeJS20dX, 130 | handler: 'lambda/handler.handler', 131 | policies: [ 132 | 'arn:aws:iam::aws:policy/CloudWatchLambdaApplicationSignalsExecutionRolePolicy', 133 | 'arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess', 134 | ], 135 | timeout: '30 seconds', 136 | url: true, 137 | architecture: 'x86_64', 138 | environment: { 139 | AWS_LAMBDA_EXEC_WRAPPER: '/opt/otel-handler', 140 | LAMBDA_APPLICATION_SIGNALS_REMOTE_ENVIRONMENT: $app.stage, 141 | OTEL_RESOURCE_ATTRIBUTES: getOtelResourceAttributes({ name, type: 'lambda' }), 142 | ...oTelSharedSettings, 143 | }, 144 | layers: [ 145 | // https://aws-otel.github.io/docs/getting-started/lambda/lambda-js 146 | 'arn:aws:lambda:us-east-1:901920570463:layer:aws-otel-nodejs-amd64-ver-1-30-2:1', 147 | ], 148 | transform: { 149 | function: { 150 | tracingConfig: { 151 | mode: 'Active', 152 | }, 153 | }, 154 | }, 155 | }); 156 | 157 | return { lambdaFunction }; 158 | }; 159 | 160 | /** 161 | * Create the ECS cluster and service. 162 | * This is the ECS service that will run the ECS task. 163 | */ 164 | const createEcsService = (lambda: sst.aws.Function) => { 165 | const { taskRole, executionRole } = createRoles(); 166 | const cwAgentConfig = createCwAgentConfigSsm(); 167 | const name = `${$app.name}-${$app.stage}-ecs`; 168 | 169 | const vpc = new sst.aws.Vpc('vpc'); 170 | const cluster = new sst.aws.Cluster('cluster', { vpc, transform: { cluster: { name } } }); 171 | const service = new sst.aws.Service('service', { 172 | transform: { service: { name } }, 173 | cpu: '0.25 vCPU', 174 | memory: '0.5 GB', 175 | scaling: { min: 1, max: 1 }, 176 | cluster, 177 | taskRole, 178 | executionRole, 179 | capacity: 'spot', 180 | serviceRegistry: { 181 | port: 80, 182 | }, 183 | containers: [ 184 | { 185 | name: 'ecs-cwagent', 186 | image: 'public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest', 187 | ssm: { 188 | CW_CONFIG_CONTENT: cwAgentConfig.arn, 189 | }, 190 | environment: { 191 | STAGE: $app.stage, 192 | ECS_CONTAINER_STOP_TIMEOUT: '2', 193 | ECS_IMAGE_PULL_BEHAVIOR: 'prefer-cached', 194 | }, 195 | logging: { 196 | retention: '1 week', 197 | name: `/ecs/${name}/cwagent`, 198 | }, 199 | health: { 200 | command: ['CMD', '/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent', '--version'], 201 | startPeriod: '30 seconds', 202 | timeout: '5 seconds', 203 | interval: '1 minute', 204 | retries: 10, 205 | }, 206 | }, 207 | { 208 | name: 'app', 209 | image: { 210 | context: './backend', 211 | dockerfile: 'Dockerfile', 212 | }, 213 | health: { 214 | command: ['CMD-SHELL', 'curl -f http://localhost:80/health || exit 1'], 215 | startPeriod: '30 seconds', 216 | timeout: '5 seconds', 217 | interval: '1 minute', 218 | retries: 10, 219 | }, 220 | environment: { 221 | STAGE: $app.stage, 222 | ECS_CONTAINER_METADATA_URI: 'http://169.254.170.2/v4', 223 | ECS_ENABLE_CONTAINER_METADATA: 'true', 224 | OTEL_RESOURCE_ATTRIBUTES: getOtelResourceAttributes({ name, type: 'ecs' }), 225 | OTEL_EXPORTER_OTLP_PROTOCOL: 'http/protobuf', 226 | OTEL_AWS_APPLICATION_SIGNALS_ENABLED: 'true', 227 | OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT: 'http://localhost:4316/v1/metrics', 228 | OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: 'http://localhost:4316/v1/traces', 229 | NODE_OPTIONS: `--require @aws/aws-distro-opentelemetry-node-autoinstrumentation/register`, 230 | LAMBDA_FUNCTION_URL: lambda.url, 231 | ...oTelSharedSettings, 232 | }, 233 | logging: { 234 | retention: '1 week', 235 | name: `/ecs/${name}/app`, 236 | }, 237 | }, 238 | ], 239 | }); 240 | const api = new sst.aws.ApiGatewayV2('api', { 241 | transform: { api: { name } }, 242 | vpc, 243 | }); 244 | api.routePrivate('$default', service.nodes.cloudmapService.arn); 245 | return { apiGateway: api }; 246 | }; 247 | 248 | export default $config({ 249 | app(input) { 250 | return { 251 | name: 'ecs-fargate', 252 | removal: input?.stage === 'production' ? 'retain' : 'remove', 253 | protect: ['production'].includes(input?.stage), 254 | home: 'aws', 255 | providers: { 256 | aws: { 257 | version: '7.7.0', 258 | region: 'us-east-1', 259 | defaultTags: { 260 | tags: { 261 | Application: `ecs-fargate-${input.stage}`, 262 | Owner: 'awsfundamentals', 263 | }, 264 | }, 265 | }, 266 | }, 267 | }; 268 | }, 269 | async run() { 270 | const { lambdaFunction } = createLambdaFunction(); 271 | createEcsService(lambdaFunction); 272 | }, 273 | }); 274 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@opentelemetry/api': 12 | specifier: ^1.9.0 13 | version: 1.9.0 14 | next: 15 | specifier: 15.1.4 16 | version: 15.1.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 17 | react: 18 | specifier: ^19.0.0 19 | version: 19.0.0 20 | react-dom: 21 | specifier: ^19.0.0 22 | version: 19.0.0(react@19.0.0) 23 | sst: 24 | specifier: 3.17.13 25 | version: 3.17.13 26 | devDependencies: 27 | '@eslint/eslintrc': 28 | specifier: ^3 29 | version: 3.2.0 30 | '@types/aws-lambda': 31 | specifier: ^8.10.152 32 | version: 8.10.152 33 | '@types/node': 34 | specifier: ^20 35 | version: 20.17.12 36 | '@types/react': 37 | specifier: ^19 38 | version: 19.0.6 39 | '@types/react-dom': 40 | specifier: ^19 41 | version: 19.0.3(@types/react@19.0.6) 42 | eslint: 43 | specifier: ^9 44 | version: 9.18.0(jiti@1.21.7) 45 | eslint-config-next: 46 | specifier: 15.1.4 47 | version: 15.1.4(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) 48 | postcss: 49 | specifier: ^8 50 | version: 8.4.49 51 | prettier: 52 | specifier: ^3.4.2 53 | version: 3.4.2 54 | tailwindcss: 55 | specifier: ^3.4.1 56 | version: 3.4.17 57 | typescript: 58 | specifier: ^5 59 | version: 5.7.3 60 | 61 | packages: 62 | 63 | '@alloc/quick-lru@5.2.0': 64 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 65 | engines: {node: '>=10'} 66 | 67 | '@emnapi/runtime@1.3.1': 68 | resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} 69 | 70 | '@eslint-community/eslint-utils@4.4.1': 71 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 72 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 73 | peerDependencies: 74 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 75 | 76 | '@eslint-community/regexpp@4.12.1': 77 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 78 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 79 | 80 | '@eslint/config-array@0.19.1': 81 | resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} 82 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 83 | 84 | '@eslint/core@0.10.0': 85 | resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} 86 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 87 | 88 | '@eslint/eslintrc@3.2.0': 89 | resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} 90 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 91 | 92 | '@eslint/js@9.18.0': 93 | resolution: {integrity: sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==} 94 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 95 | 96 | '@eslint/object-schema@2.1.5': 97 | resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} 98 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 99 | 100 | '@eslint/plugin-kit@0.2.5': 101 | resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} 102 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 103 | 104 | '@humanfs/core@0.19.1': 105 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 106 | engines: {node: '>=18.18.0'} 107 | 108 | '@humanfs/node@0.16.6': 109 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 110 | engines: {node: '>=18.18.0'} 111 | 112 | '@humanwhocodes/module-importer@1.0.1': 113 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 114 | engines: {node: '>=12.22'} 115 | 116 | '@humanwhocodes/retry@0.3.1': 117 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 118 | engines: {node: '>=18.18'} 119 | 120 | '@humanwhocodes/retry@0.4.1': 121 | resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} 122 | engines: {node: '>=18.18'} 123 | 124 | '@img/sharp-darwin-arm64@0.33.5': 125 | resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} 126 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 127 | cpu: [arm64] 128 | os: [darwin] 129 | 130 | '@img/sharp-darwin-x64@0.33.5': 131 | resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} 132 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 133 | cpu: [x64] 134 | os: [darwin] 135 | 136 | '@img/sharp-libvips-darwin-arm64@1.0.4': 137 | resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} 138 | cpu: [arm64] 139 | os: [darwin] 140 | 141 | '@img/sharp-libvips-darwin-x64@1.0.4': 142 | resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} 143 | cpu: [x64] 144 | os: [darwin] 145 | 146 | '@img/sharp-libvips-linux-arm64@1.0.4': 147 | resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} 148 | cpu: [arm64] 149 | os: [linux] 150 | 151 | '@img/sharp-libvips-linux-arm@1.0.5': 152 | resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} 153 | cpu: [arm] 154 | os: [linux] 155 | 156 | '@img/sharp-libvips-linux-s390x@1.0.4': 157 | resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} 158 | cpu: [s390x] 159 | os: [linux] 160 | 161 | '@img/sharp-libvips-linux-x64@1.0.4': 162 | resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} 163 | cpu: [x64] 164 | os: [linux] 165 | 166 | '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 167 | resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} 168 | cpu: [arm64] 169 | os: [linux] 170 | 171 | '@img/sharp-libvips-linuxmusl-x64@1.0.4': 172 | resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} 173 | cpu: [x64] 174 | os: [linux] 175 | 176 | '@img/sharp-linux-arm64@0.33.5': 177 | resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} 178 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 179 | cpu: [arm64] 180 | os: [linux] 181 | 182 | '@img/sharp-linux-arm@0.33.5': 183 | resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} 184 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 185 | cpu: [arm] 186 | os: [linux] 187 | 188 | '@img/sharp-linux-s390x@0.33.5': 189 | resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} 190 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 191 | cpu: [s390x] 192 | os: [linux] 193 | 194 | '@img/sharp-linux-x64@0.33.5': 195 | resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} 196 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 197 | cpu: [x64] 198 | os: [linux] 199 | 200 | '@img/sharp-linuxmusl-arm64@0.33.5': 201 | resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} 202 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 203 | cpu: [arm64] 204 | os: [linux] 205 | 206 | '@img/sharp-linuxmusl-x64@0.33.5': 207 | resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} 208 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 209 | cpu: [x64] 210 | os: [linux] 211 | 212 | '@img/sharp-wasm32@0.33.5': 213 | resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} 214 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 215 | cpu: [wasm32] 216 | 217 | '@img/sharp-win32-ia32@0.33.5': 218 | resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} 219 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 220 | cpu: [ia32] 221 | os: [win32] 222 | 223 | '@img/sharp-win32-x64@0.33.5': 224 | resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} 225 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 226 | cpu: [x64] 227 | os: [win32] 228 | 229 | '@isaacs/cliui@8.0.2': 230 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 231 | engines: {node: '>=12'} 232 | 233 | '@jridgewell/gen-mapping@0.3.8': 234 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 235 | engines: {node: '>=6.0.0'} 236 | 237 | '@jridgewell/resolve-uri@3.1.2': 238 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 239 | engines: {node: '>=6.0.0'} 240 | 241 | '@jridgewell/set-array@1.2.1': 242 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 243 | engines: {node: '>=6.0.0'} 244 | 245 | '@jridgewell/sourcemap-codec@1.5.0': 246 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 247 | 248 | '@jridgewell/trace-mapping@0.3.25': 249 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 250 | 251 | '@modelcontextprotocol/sdk@1.6.1': 252 | resolution: {integrity: sha512-oxzMzYCkZHMntzuyerehK3fV6A2Kwh5BD6CGEJSVDU2QNEhfLOptf2X7esQgaHZXHZY0oHmMsOtIDLP71UJXgA==} 253 | engines: {node: '>=18'} 254 | 255 | '@next/env@15.1.4': 256 | resolution: {integrity: sha512-2fZ5YZjedi5AGaeoaC0B20zGntEHRhi2SdWcu61i48BllODcAmmtj8n7YarSPt4DaTsJaBFdxQAVEVzgmx2Zpw==} 257 | 258 | '@next/eslint-plugin-next@15.1.4': 259 | resolution: {integrity: sha512-HwlEXwCK3sr6zmVGEvWBjW9tBFs1Oe6hTmTLoFQtpm4As5HCdu8jfSE0XJOp7uhfEGLniIx8yrGxEWwNnY0fmQ==} 260 | 261 | '@next/swc-darwin-arm64@15.1.4': 262 | resolution: {integrity: sha512-wBEMBs+np+R5ozN1F8Y8d/Dycns2COhRnkxRc+rvnbXke5uZBHkUGFgWxfTXn5rx7OLijuUhyfB+gC/ap58dDw==} 263 | engines: {node: '>= 10'} 264 | cpu: [arm64] 265 | os: [darwin] 266 | 267 | '@next/swc-darwin-x64@15.1.4': 268 | resolution: {integrity: sha512-7sgf5rM7Z81V9w48F02Zz6DgEJulavC0jadab4ZsJ+K2sxMNK0/BtF8J8J3CxnsJN3DGcIdC260wEKssKTukUw==} 269 | engines: {node: '>= 10'} 270 | cpu: [x64] 271 | os: [darwin] 272 | 273 | '@next/swc-linux-arm64-gnu@15.1.4': 274 | resolution: {integrity: sha512-JaZlIMNaJenfd55kjaLWMfok+vWBlcRxqnRoZrhFQrhM1uAehP3R0+Aoe+bZOogqlZvAz53nY/k3ZyuKDtT2zQ==} 275 | engines: {node: '>= 10'} 276 | cpu: [arm64] 277 | os: [linux] 278 | 279 | '@next/swc-linux-arm64-musl@15.1.4': 280 | resolution: {integrity: sha512-7EBBjNoyTO2ipMDgCiORpwwOf5tIueFntKjcN3NK+GAQD7OzFJe84p7a2eQUeWdpzZvhVXuAtIen8QcH71ZCOQ==} 281 | engines: {node: '>= 10'} 282 | cpu: [arm64] 283 | os: [linux] 284 | 285 | '@next/swc-linux-x64-gnu@15.1.4': 286 | resolution: {integrity: sha512-9TGEgOycqZFuADyFqwmK/9g6S0FYZ3tphR4ebcmCwhL8Y12FW8pIBKJvSwV+UBjMkokstGNH+9F8F031JZKpHw==} 287 | engines: {node: '>= 10'} 288 | cpu: [x64] 289 | os: [linux] 290 | 291 | '@next/swc-linux-x64-musl@15.1.4': 292 | resolution: {integrity: sha512-0578bLRVDJOh+LdIoKvgNDz77+Bd85c5JrFgnlbI1SM3WmEQvsjxTA8ATu9Z9FCiIS/AliVAW2DV/BDwpXbtiQ==} 293 | engines: {node: '>= 10'} 294 | cpu: [x64] 295 | os: [linux] 296 | 297 | '@next/swc-win32-arm64-msvc@15.1.4': 298 | resolution: {integrity: sha512-JgFCiV4libQavwII+kncMCl30st0JVxpPOtzWcAI2jtum4HjYaclobKhj+JsRu5tFqMtA5CJIa0MvYyuu9xjjQ==} 299 | engines: {node: '>= 10'} 300 | cpu: [arm64] 301 | os: [win32] 302 | 303 | '@next/swc-win32-x64-msvc@15.1.4': 304 | resolution: {integrity: sha512-xxsJy9wzq7FR5SqPCUqdgSXiNXrMuidgckBa8nH9HtjjxsilgcN6VgXF6tZ3uEWuVEadotQJI8/9EQ6guTC4Yw==} 305 | engines: {node: '>= 10'} 306 | cpu: [x64] 307 | os: [win32] 308 | 309 | '@nodelib/fs.scandir@2.1.5': 310 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 311 | engines: {node: '>= 8'} 312 | 313 | '@nodelib/fs.stat@2.0.5': 314 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 315 | engines: {node: '>= 8'} 316 | 317 | '@nodelib/fs.walk@1.2.8': 318 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 319 | engines: {node: '>= 8'} 320 | 321 | '@nolyfill/is-core-module@1.0.39': 322 | resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} 323 | engines: {node: '>=12.4.0'} 324 | 325 | '@opentelemetry/api@1.9.0': 326 | resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} 327 | engines: {node: '>=8.0.0'} 328 | 329 | '@pkgjs/parseargs@0.11.0': 330 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 331 | engines: {node: '>=14'} 332 | 333 | '@rtsao/scc@1.1.0': 334 | resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} 335 | 336 | '@rushstack/eslint-patch@1.10.5': 337 | resolution: {integrity: sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A==} 338 | 339 | '@swc/counter@0.1.3': 340 | resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} 341 | 342 | '@swc/helpers@0.5.15': 343 | resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} 344 | 345 | '@tsconfig/bun@1.0.7': 346 | resolution: {integrity: sha512-udGrGJBNQdXGVulehc1aWT73wkR9wdaGBtB6yL70RJsqwW/yJhIg6ZbRlPOfIUiFNrnBuYLBi9CSmMKfDC7dvA==} 347 | 348 | '@types/aws-lambda@8.10.152': 349 | resolution: {integrity: sha512-soT/c2gYBnT5ygwiHPmd9a1bftj462NWVk2tKCc1PYHSIacB2UwbTS2zYG4jzag1mRDuzg/OjtxQjQ2NKRB6Rw==} 350 | 351 | '@types/estree@1.0.6': 352 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 353 | 354 | '@types/json-schema@7.0.15': 355 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 356 | 357 | '@types/json5@0.0.29': 358 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 359 | 360 | '@types/node@20.17.12': 361 | resolution: {integrity: sha512-vo/wmBgMIiEA23A/knMfn/cf37VnuF52nZh5ZoW0GWt4e4sxNquibrMRJ7UQsA06+MBx9r/H1jsI9grYjQCQlw==} 362 | 363 | '@types/react-dom@19.0.3': 364 | resolution: {integrity: sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA==} 365 | peerDependencies: 366 | '@types/react': ^19.0.0 367 | 368 | '@types/react@19.0.6': 369 | resolution: {integrity: sha512-gIlMztcTeDgXCUj0vCBOqEuSEhX//63fW9SZtCJ+agxoQTOklwDfiEMlTWn4mR/C/UK5VHlpwsCsOyf7/hc4lw==} 370 | 371 | '@typescript-eslint/eslint-plugin@8.19.1': 372 | resolution: {integrity: sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==} 373 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 374 | peerDependencies: 375 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 376 | eslint: ^8.57.0 || ^9.0.0 377 | typescript: '>=4.8.4 <5.8.0' 378 | 379 | '@typescript-eslint/parser@8.19.1': 380 | resolution: {integrity: sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==} 381 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 382 | peerDependencies: 383 | eslint: ^8.57.0 || ^9.0.0 384 | typescript: '>=4.8.4 <5.8.0' 385 | 386 | '@typescript-eslint/scope-manager@8.19.1': 387 | resolution: {integrity: sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==} 388 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 389 | 390 | '@typescript-eslint/type-utils@8.19.1': 391 | resolution: {integrity: sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==} 392 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 393 | peerDependencies: 394 | eslint: ^8.57.0 || ^9.0.0 395 | typescript: '>=4.8.4 <5.8.0' 396 | 397 | '@typescript-eslint/types@8.19.1': 398 | resolution: {integrity: sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==} 399 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 400 | 401 | '@typescript-eslint/typescript-estree@8.19.1': 402 | resolution: {integrity: sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==} 403 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 404 | peerDependencies: 405 | typescript: '>=4.8.4 <5.8.0' 406 | 407 | '@typescript-eslint/utils@8.19.1': 408 | resolution: {integrity: sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==} 409 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 410 | peerDependencies: 411 | eslint: ^8.57.0 || ^9.0.0 412 | typescript: '>=4.8.4 <5.8.0' 413 | 414 | '@typescript-eslint/visitor-keys@8.19.1': 415 | resolution: {integrity: sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==} 416 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 417 | 418 | accepts@2.0.0: 419 | resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} 420 | engines: {node: '>= 0.6'} 421 | 422 | acorn-jsx@5.3.2: 423 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 424 | peerDependencies: 425 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 426 | 427 | acorn@8.14.0: 428 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 429 | engines: {node: '>=0.4.0'} 430 | hasBin: true 431 | 432 | ajv@6.12.6: 433 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 434 | 435 | ansi-regex@5.0.1: 436 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 437 | engines: {node: '>=8'} 438 | 439 | ansi-regex@6.1.0: 440 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 441 | engines: {node: '>=12'} 442 | 443 | ansi-styles@4.3.0: 444 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 445 | engines: {node: '>=8'} 446 | 447 | ansi-styles@6.2.1: 448 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 449 | engines: {node: '>=12'} 450 | 451 | any-promise@1.3.0: 452 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 453 | 454 | anymatch@3.1.3: 455 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 456 | engines: {node: '>= 8'} 457 | 458 | arg@5.0.2: 459 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 460 | 461 | argparse@2.0.1: 462 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 463 | 464 | aria-query@5.3.2: 465 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 466 | engines: {node: '>= 0.4'} 467 | 468 | array-buffer-byte-length@1.0.2: 469 | resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} 470 | engines: {node: '>= 0.4'} 471 | 472 | array-includes@3.1.8: 473 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} 474 | engines: {node: '>= 0.4'} 475 | 476 | array.prototype.findlast@1.2.5: 477 | resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} 478 | engines: {node: '>= 0.4'} 479 | 480 | array.prototype.findlastindex@1.2.5: 481 | resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} 482 | engines: {node: '>= 0.4'} 483 | 484 | array.prototype.flat@1.3.3: 485 | resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} 486 | engines: {node: '>= 0.4'} 487 | 488 | array.prototype.flatmap@1.3.3: 489 | resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} 490 | engines: {node: '>= 0.4'} 491 | 492 | array.prototype.tosorted@1.1.4: 493 | resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} 494 | engines: {node: '>= 0.4'} 495 | 496 | arraybuffer.prototype.slice@1.0.4: 497 | resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} 498 | engines: {node: '>= 0.4'} 499 | 500 | ast-types-flow@0.0.8: 501 | resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} 502 | 503 | available-typed-arrays@1.0.7: 504 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 505 | engines: {node: '>= 0.4'} 506 | 507 | aws-sdk@2.1692.0: 508 | resolution: {integrity: sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==} 509 | engines: {node: '>= 10.0.0'} 510 | 511 | aws4fetch@1.0.18: 512 | resolution: {integrity: sha512-3Cf+YaUl07p24MoQ46rFwulAmiyCwH2+1zw1ZyPAX5OtJ34Hh185DwB8y/qRLb6cYYYtSFJ9pthyLc0MD4e8sQ==} 513 | 514 | axe-core@4.10.2: 515 | resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} 516 | engines: {node: '>=4'} 517 | 518 | axobject-query@4.1.0: 519 | resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 520 | engines: {node: '>= 0.4'} 521 | 522 | balanced-match@1.0.2: 523 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 524 | 525 | base64-js@1.5.1: 526 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 527 | 528 | binary-extensions@2.3.0: 529 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 530 | engines: {node: '>=8'} 531 | 532 | body-parser@2.2.0: 533 | resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} 534 | engines: {node: '>=18'} 535 | 536 | brace-expansion@1.1.11: 537 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 538 | 539 | brace-expansion@2.0.1: 540 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 541 | 542 | braces@3.0.3: 543 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 544 | engines: {node: '>=8'} 545 | 546 | buffer@4.9.2: 547 | resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} 548 | 549 | busboy@1.6.0: 550 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 551 | engines: {node: '>=10.16.0'} 552 | 553 | bytes@3.1.2: 554 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 555 | engines: {node: '>= 0.8'} 556 | 557 | call-bind-apply-helpers@1.0.1: 558 | resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} 559 | engines: {node: '>= 0.4'} 560 | 561 | call-bind@1.0.8: 562 | resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} 563 | engines: {node: '>= 0.4'} 564 | 565 | call-bound@1.0.3: 566 | resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} 567 | engines: {node: '>= 0.4'} 568 | 569 | callsites@3.1.0: 570 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 571 | engines: {node: '>=6'} 572 | 573 | camelcase-css@2.0.1: 574 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 575 | engines: {node: '>= 6'} 576 | 577 | caniuse-lite@1.0.30001692: 578 | resolution: {integrity: sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==} 579 | 580 | chalk@4.1.2: 581 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 582 | engines: {node: '>=10'} 583 | 584 | chokidar@3.6.0: 585 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 586 | engines: {node: '>= 8.10.0'} 587 | 588 | client-only@0.0.1: 589 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 590 | 591 | color-convert@2.0.1: 592 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 593 | engines: {node: '>=7.0.0'} 594 | 595 | color-name@1.1.4: 596 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 597 | 598 | color-string@1.9.1: 599 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 600 | 601 | color@4.2.3: 602 | resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} 603 | engines: {node: '>=12.5.0'} 604 | 605 | commander@4.1.1: 606 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 607 | engines: {node: '>= 6'} 608 | 609 | concat-map@0.0.1: 610 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 611 | 612 | content-disposition@1.0.0: 613 | resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} 614 | engines: {node: '>= 0.6'} 615 | 616 | content-type@1.0.5: 617 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} 618 | engines: {node: '>= 0.6'} 619 | 620 | cookie-signature@1.2.2: 621 | resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} 622 | engines: {node: '>=6.6.0'} 623 | 624 | cookie@0.7.2: 625 | resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} 626 | engines: {node: '>= 0.6'} 627 | 628 | cors@2.8.5: 629 | resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} 630 | engines: {node: '>= 0.10'} 631 | 632 | cross-spawn@7.0.6: 633 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 634 | engines: {node: '>= 8'} 635 | 636 | cssesc@3.0.0: 637 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 638 | engines: {node: '>=4'} 639 | hasBin: true 640 | 641 | csstype@3.1.3: 642 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 643 | 644 | damerau-levenshtein@1.0.8: 645 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} 646 | 647 | data-view-buffer@1.0.2: 648 | resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} 649 | engines: {node: '>= 0.4'} 650 | 651 | data-view-byte-length@1.0.2: 652 | resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} 653 | engines: {node: '>= 0.4'} 654 | 655 | data-view-byte-offset@1.0.1: 656 | resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} 657 | engines: {node: '>= 0.4'} 658 | 659 | debug@3.2.7: 660 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 661 | peerDependencies: 662 | supports-color: '*' 663 | peerDependenciesMeta: 664 | supports-color: 665 | optional: true 666 | 667 | debug@4.4.0: 668 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 669 | engines: {node: '>=6.0'} 670 | peerDependencies: 671 | supports-color: '*' 672 | peerDependenciesMeta: 673 | supports-color: 674 | optional: true 675 | 676 | deep-is@0.1.4: 677 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 678 | 679 | define-data-property@1.1.4: 680 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 681 | engines: {node: '>= 0.4'} 682 | 683 | define-properties@1.2.1: 684 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 685 | engines: {node: '>= 0.4'} 686 | 687 | depd@2.0.0: 688 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 689 | engines: {node: '>= 0.8'} 690 | 691 | detect-libc@2.0.3: 692 | resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} 693 | engines: {node: '>=8'} 694 | 695 | didyoumean@1.2.2: 696 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 697 | 698 | dlv@1.1.3: 699 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 700 | 701 | doctrine@2.1.0: 702 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 703 | engines: {node: '>=0.10.0'} 704 | 705 | dunder-proto@1.0.1: 706 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 707 | engines: {node: '>= 0.4'} 708 | 709 | eastasianwidth@0.2.0: 710 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 711 | 712 | ee-first@1.1.1: 713 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 714 | 715 | emoji-regex@8.0.0: 716 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 717 | 718 | emoji-regex@9.2.2: 719 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 720 | 721 | encodeurl@2.0.0: 722 | resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} 723 | engines: {node: '>= 0.8'} 724 | 725 | enhanced-resolve@5.18.0: 726 | resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==} 727 | engines: {node: '>=10.13.0'} 728 | 729 | es-abstract@1.23.9: 730 | resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} 731 | engines: {node: '>= 0.4'} 732 | 733 | es-define-property@1.0.1: 734 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 735 | engines: {node: '>= 0.4'} 736 | 737 | es-errors@1.3.0: 738 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 739 | engines: {node: '>= 0.4'} 740 | 741 | es-iterator-helpers@1.2.1: 742 | resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} 743 | engines: {node: '>= 0.4'} 744 | 745 | es-object-atoms@1.0.0: 746 | resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} 747 | engines: {node: '>= 0.4'} 748 | 749 | es-set-tostringtag@2.1.0: 750 | resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} 751 | engines: {node: '>= 0.4'} 752 | 753 | es-shim-unscopables@1.0.2: 754 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 755 | 756 | es-to-primitive@1.3.0: 757 | resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} 758 | engines: {node: '>= 0.4'} 759 | 760 | escape-html@1.0.3: 761 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 762 | 763 | escape-string-regexp@4.0.0: 764 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 765 | engines: {node: '>=10'} 766 | 767 | eslint-config-next@15.1.4: 768 | resolution: {integrity: sha512-u9+7lFmfhKNgGjhQ9tBeyCFsPJyq0SvGioMJBngPC7HXUpR0U+ckEwQR48s7TrRNHra1REm6evGL2ie38agALg==} 769 | peerDependencies: 770 | eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 771 | typescript: '>=3.3.1' 772 | peerDependenciesMeta: 773 | typescript: 774 | optional: true 775 | 776 | eslint-import-resolver-node@0.3.9: 777 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 778 | 779 | eslint-import-resolver-typescript@3.7.0: 780 | resolution: {integrity: sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==} 781 | engines: {node: ^14.18.0 || >=16.0.0} 782 | peerDependencies: 783 | eslint: '*' 784 | eslint-plugin-import: '*' 785 | eslint-plugin-import-x: '*' 786 | peerDependenciesMeta: 787 | eslint-plugin-import: 788 | optional: true 789 | eslint-plugin-import-x: 790 | optional: true 791 | 792 | eslint-module-utils@2.12.0: 793 | resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} 794 | engines: {node: '>=4'} 795 | peerDependencies: 796 | '@typescript-eslint/parser': '*' 797 | eslint: '*' 798 | eslint-import-resolver-node: '*' 799 | eslint-import-resolver-typescript: '*' 800 | eslint-import-resolver-webpack: '*' 801 | peerDependenciesMeta: 802 | '@typescript-eslint/parser': 803 | optional: true 804 | eslint: 805 | optional: true 806 | eslint-import-resolver-node: 807 | optional: true 808 | eslint-import-resolver-typescript: 809 | optional: true 810 | eslint-import-resolver-webpack: 811 | optional: true 812 | 813 | eslint-plugin-import@2.31.0: 814 | resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} 815 | engines: {node: '>=4'} 816 | peerDependencies: 817 | '@typescript-eslint/parser': '*' 818 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 819 | peerDependenciesMeta: 820 | '@typescript-eslint/parser': 821 | optional: true 822 | 823 | eslint-plugin-jsx-a11y@6.10.2: 824 | resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} 825 | engines: {node: '>=4.0'} 826 | peerDependencies: 827 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 828 | 829 | eslint-plugin-react-hooks@5.1.0: 830 | resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} 831 | engines: {node: '>=10'} 832 | peerDependencies: 833 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 834 | 835 | eslint-plugin-react@7.37.4: 836 | resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} 837 | engines: {node: '>=4'} 838 | peerDependencies: 839 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 840 | 841 | eslint-scope@8.2.0: 842 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} 843 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 844 | 845 | eslint-visitor-keys@3.4.3: 846 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 847 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 848 | 849 | eslint-visitor-keys@4.2.0: 850 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 851 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 852 | 853 | eslint@9.18.0: 854 | resolution: {integrity: sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==} 855 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 856 | hasBin: true 857 | peerDependencies: 858 | jiti: '*' 859 | peerDependenciesMeta: 860 | jiti: 861 | optional: true 862 | 863 | espree@10.3.0: 864 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 865 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 866 | 867 | esquery@1.6.0: 868 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 869 | engines: {node: '>=0.10'} 870 | 871 | esrecurse@4.3.0: 872 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 873 | engines: {node: '>=4.0'} 874 | 875 | estraverse@5.3.0: 876 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 877 | engines: {node: '>=4.0'} 878 | 879 | esutils@2.0.3: 880 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 881 | engines: {node: '>=0.10.0'} 882 | 883 | etag@1.8.1: 884 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 885 | engines: {node: '>= 0.6'} 886 | 887 | events@1.1.1: 888 | resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} 889 | engines: {node: '>=0.4.x'} 890 | 891 | eventsource-parser@3.0.6: 892 | resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} 893 | engines: {node: '>=18.0.0'} 894 | 895 | eventsource@3.0.7: 896 | resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} 897 | engines: {node: '>=18.0.0'} 898 | 899 | express-rate-limit@7.5.1: 900 | resolution: {integrity: sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==} 901 | engines: {node: '>= 16'} 902 | peerDependencies: 903 | express: '>= 4.11' 904 | 905 | express@5.1.0: 906 | resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} 907 | engines: {node: '>= 18'} 908 | 909 | fast-deep-equal@3.1.3: 910 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 911 | 912 | fast-glob@3.3.1: 913 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} 914 | engines: {node: '>=8.6.0'} 915 | 916 | fast-glob@3.3.3: 917 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 918 | engines: {node: '>=8.6.0'} 919 | 920 | fast-json-stable-stringify@2.1.0: 921 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 922 | 923 | fast-levenshtein@2.0.6: 924 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 925 | 926 | fastq@1.18.0: 927 | resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} 928 | 929 | file-entry-cache@8.0.0: 930 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 931 | engines: {node: '>=16.0.0'} 932 | 933 | fill-range@7.1.1: 934 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 935 | engines: {node: '>=8'} 936 | 937 | finalhandler@2.1.0: 938 | resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} 939 | engines: {node: '>= 0.8'} 940 | 941 | find-up@5.0.0: 942 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 943 | engines: {node: '>=10'} 944 | 945 | flat-cache@4.0.1: 946 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 947 | engines: {node: '>=16'} 948 | 949 | flatted@3.3.2: 950 | resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} 951 | 952 | for-each@0.3.3: 953 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 954 | 955 | foreground-child@3.3.0: 956 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 957 | engines: {node: '>=14'} 958 | 959 | forwarded@0.2.0: 960 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 961 | engines: {node: '>= 0.6'} 962 | 963 | fresh@2.0.0: 964 | resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} 965 | engines: {node: '>= 0.8'} 966 | 967 | fsevents@2.3.3: 968 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 969 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 970 | os: [darwin] 971 | 972 | function-bind@1.1.2: 973 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 974 | 975 | function.prototype.name@1.1.8: 976 | resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} 977 | engines: {node: '>= 0.4'} 978 | 979 | functions-have-names@1.2.3: 980 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 981 | 982 | get-intrinsic@1.2.7: 983 | resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} 984 | engines: {node: '>= 0.4'} 985 | 986 | get-proto@1.0.1: 987 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 988 | engines: {node: '>= 0.4'} 989 | 990 | get-symbol-description@1.1.0: 991 | resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} 992 | engines: {node: '>= 0.4'} 993 | 994 | get-tsconfig@4.8.1: 995 | resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} 996 | 997 | glob-parent@5.1.2: 998 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 999 | engines: {node: '>= 6'} 1000 | 1001 | glob-parent@6.0.2: 1002 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1003 | engines: {node: '>=10.13.0'} 1004 | 1005 | glob@10.4.5: 1006 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 1007 | hasBin: true 1008 | 1009 | globals@14.0.0: 1010 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1011 | engines: {node: '>=18'} 1012 | 1013 | globalthis@1.0.4: 1014 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 1015 | engines: {node: '>= 0.4'} 1016 | 1017 | gopd@1.2.0: 1018 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 1019 | engines: {node: '>= 0.4'} 1020 | 1021 | graceful-fs@4.2.11: 1022 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1023 | 1024 | graphemer@1.4.0: 1025 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1026 | 1027 | has-bigints@1.1.0: 1028 | resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} 1029 | engines: {node: '>= 0.4'} 1030 | 1031 | has-flag@4.0.0: 1032 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1033 | engines: {node: '>=8'} 1034 | 1035 | has-property-descriptors@1.0.2: 1036 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 1037 | 1038 | has-proto@1.2.0: 1039 | resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} 1040 | engines: {node: '>= 0.4'} 1041 | 1042 | has-symbols@1.1.0: 1043 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 1044 | engines: {node: '>= 0.4'} 1045 | 1046 | has-tostringtag@1.0.2: 1047 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 1048 | engines: {node: '>= 0.4'} 1049 | 1050 | hasown@2.0.2: 1051 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1052 | engines: {node: '>= 0.4'} 1053 | 1054 | hono@4.7.4: 1055 | resolution: {integrity: sha512-Pst8FuGqz3L7tFF+u9Pu70eI0xa5S3LPUmrNd5Jm8nTHze9FxLTK9Kaj5g/k4UcwuJSXTP65SyHOPLrffpcAJg==} 1056 | engines: {node: '>=16.9.0'} 1057 | 1058 | http-errors@2.0.0: 1059 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} 1060 | engines: {node: '>= 0.8'} 1061 | 1062 | iconv-lite@0.6.3: 1063 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 1064 | engines: {node: '>=0.10.0'} 1065 | 1066 | iconv-lite@0.7.0: 1067 | resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} 1068 | engines: {node: '>=0.10.0'} 1069 | 1070 | ieee754@1.1.13: 1071 | resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} 1072 | 1073 | ignore@5.3.2: 1074 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1075 | engines: {node: '>= 4'} 1076 | 1077 | import-fresh@3.3.0: 1078 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1079 | engines: {node: '>=6'} 1080 | 1081 | imurmurhash@0.1.4: 1082 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1083 | engines: {node: '>=0.8.19'} 1084 | 1085 | inherits@2.0.4: 1086 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1087 | 1088 | internal-slot@1.1.0: 1089 | resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} 1090 | engines: {node: '>= 0.4'} 1091 | 1092 | ipaddr.js@1.9.1: 1093 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 1094 | engines: {node: '>= 0.10'} 1095 | 1096 | is-arguments@1.2.0: 1097 | resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} 1098 | engines: {node: '>= 0.4'} 1099 | 1100 | is-array-buffer@3.0.5: 1101 | resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} 1102 | engines: {node: '>= 0.4'} 1103 | 1104 | is-arrayish@0.3.2: 1105 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 1106 | 1107 | is-async-function@2.1.0: 1108 | resolution: {integrity: sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==} 1109 | engines: {node: '>= 0.4'} 1110 | 1111 | is-bigint@1.1.0: 1112 | resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} 1113 | engines: {node: '>= 0.4'} 1114 | 1115 | is-binary-path@2.1.0: 1116 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1117 | engines: {node: '>=8'} 1118 | 1119 | is-boolean-object@1.2.1: 1120 | resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} 1121 | engines: {node: '>= 0.4'} 1122 | 1123 | is-bun-module@1.3.0: 1124 | resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} 1125 | 1126 | is-callable@1.2.7: 1127 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1128 | engines: {node: '>= 0.4'} 1129 | 1130 | is-core-module@2.16.1: 1131 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 1132 | engines: {node: '>= 0.4'} 1133 | 1134 | is-data-view@1.0.2: 1135 | resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} 1136 | engines: {node: '>= 0.4'} 1137 | 1138 | is-date-object@1.1.0: 1139 | resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} 1140 | engines: {node: '>= 0.4'} 1141 | 1142 | is-extglob@2.1.1: 1143 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1144 | engines: {node: '>=0.10.0'} 1145 | 1146 | is-finalizationregistry@1.1.1: 1147 | resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} 1148 | engines: {node: '>= 0.4'} 1149 | 1150 | is-fullwidth-code-point@3.0.0: 1151 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1152 | engines: {node: '>=8'} 1153 | 1154 | is-generator-function@1.1.0: 1155 | resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} 1156 | engines: {node: '>= 0.4'} 1157 | 1158 | is-glob@4.0.3: 1159 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1160 | engines: {node: '>=0.10.0'} 1161 | 1162 | is-map@2.0.3: 1163 | resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 1164 | engines: {node: '>= 0.4'} 1165 | 1166 | is-number-object@1.1.1: 1167 | resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} 1168 | engines: {node: '>= 0.4'} 1169 | 1170 | is-number@7.0.0: 1171 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1172 | engines: {node: '>=0.12.0'} 1173 | 1174 | is-promise@4.0.0: 1175 | resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} 1176 | 1177 | is-regex@1.2.1: 1178 | resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} 1179 | engines: {node: '>= 0.4'} 1180 | 1181 | is-set@2.0.3: 1182 | resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 1183 | engines: {node: '>= 0.4'} 1184 | 1185 | is-shared-array-buffer@1.0.4: 1186 | resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} 1187 | engines: {node: '>= 0.4'} 1188 | 1189 | is-string@1.1.1: 1190 | resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} 1191 | engines: {node: '>= 0.4'} 1192 | 1193 | is-symbol@1.1.1: 1194 | resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} 1195 | engines: {node: '>= 0.4'} 1196 | 1197 | is-typed-array@1.1.15: 1198 | resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} 1199 | engines: {node: '>= 0.4'} 1200 | 1201 | is-weakmap@2.0.2: 1202 | resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 1203 | engines: {node: '>= 0.4'} 1204 | 1205 | is-weakref@1.1.0: 1206 | resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} 1207 | engines: {node: '>= 0.4'} 1208 | 1209 | is-weakset@2.0.4: 1210 | resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} 1211 | engines: {node: '>= 0.4'} 1212 | 1213 | isarray@1.0.0: 1214 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 1215 | 1216 | isarray@2.0.5: 1217 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1218 | 1219 | isexe@2.0.0: 1220 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1221 | 1222 | iterator.prototype@1.1.5: 1223 | resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} 1224 | engines: {node: '>= 0.4'} 1225 | 1226 | jackspeak@3.4.3: 1227 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1228 | 1229 | jiti@1.21.7: 1230 | resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} 1231 | hasBin: true 1232 | 1233 | jmespath@0.16.0: 1234 | resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} 1235 | engines: {node: '>= 0.6.0'} 1236 | 1237 | jose@4.15.9: 1238 | resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==} 1239 | 1240 | jose@5.2.3: 1241 | resolution: {integrity: sha512-KUXdbctm1uHVL8BYhnyHkgp3zDX5KW8ZhAKVFEfUbU2P8Alpzjb+48hHvjOdQIyPshoblhzsuqOwEEAbtHVirA==} 1242 | 1243 | js-tokens@4.0.0: 1244 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1245 | 1246 | js-yaml@4.1.0: 1247 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1248 | hasBin: true 1249 | 1250 | json-buffer@3.0.1: 1251 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1252 | 1253 | json-schema-traverse@0.4.1: 1254 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1255 | 1256 | json-stable-stringify-without-jsonify@1.0.1: 1257 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1258 | 1259 | json5@1.0.2: 1260 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 1261 | hasBin: true 1262 | 1263 | jsx-ast-utils@3.3.5: 1264 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} 1265 | engines: {node: '>=4.0'} 1266 | 1267 | keyv@4.5.4: 1268 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1269 | 1270 | language-subtag-registry@0.3.23: 1271 | resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} 1272 | 1273 | language-tags@1.0.9: 1274 | resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} 1275 | engines: {node: '>=0.10'} 1276 | 1277 | levn@0.4.1: 1278 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1279 | engines: {node: '>= 0.8.0'} 1280 | 1281 | lilconfig@3.1.3: 1282 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 1283 | engines: {node: '>=14'} 1284 | 1285 | lines-and-columns@1.2.4: 1286 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1287 | 1288 | locate-path@6.0.0: 1289 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1290 | engines: {node: '>=10'} 1291 | 1292 | lodash.merge@4.6.2: 1293 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1294 | 1295 | loose-envify@1.4.0: 1296 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1297 | hasBin: true 1298 | 1299 | lru-cache@10.4.3: 1300 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1301 | 1302 | lru-cache@6.0.0: 1303 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1304 | engines: {node: '>=10'} 1305 | 1306 | math-intrinsics@1.1.0: 1307 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 1308 | engines: {node: '>= 0.4'} 1309 | 1310 | media-typer@1.1.0: 1311 | resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} 1312 | engines: {node: '>= 0.8'} 1313 | 1314 | merge-descriptors@2.0.0: 1315 | resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} 1316 | engines: {node: '>=18'} 1317 | 1318 | merge2@1.4.1: 1319 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1320 | engines: {node: '>= 8'} 1321 | 1322 | micromatch@4.0.8: 1323 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1324 | engines: {node: '>=8.6'} 1325 | 1326 | mime-db@1.54.0: 1327 | resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} 1328 | engines: {node: '>= 0.6'} 1329 | 1330 | mime-types@3.0.1: 1331 | resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} 1332 | engines: {node: '>= 0.6'} 1333 | 1334 | minimatch@3.1.2: 1335 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1336 | 1337 | minimatch@9.0.5: 1338 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1339 | engines: {node: '>=16 || 14 >=14.17'} 1340 | 1341 | minimist@1.2.8: 1342 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1343 | 1344 | minipass@7.1.2: 1345 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1346 | engines: {node: '>=16 || 14 >=14.17'} 1347 | 1348 | ms@2.1.3: 1349 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1350 | 1351 | mz@2.7.0: 1352 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1353 | 1354 | nanoid@3.3.8: 1355 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 1356 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1357 | hasBin: true 1358 | 1359 | natural-compare@1.4.0: 1360 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1361 | 1362 | negotiator@1.0.0: 1363 | resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} 1364 | engines: {node: '>= 0.6'} 1365 | 1366 | next@15.1.4: 1367 | resolution: {integrity: sha512-mTaq9dwaSuwwOrcu3ebjDYObekkxRnXpuVL21zotM8qE2W0HBOdVIdg2Li9QjMEZrj73LN96LcWcz62V19FjAg==} 1368 | engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} 1369 | hasBin: true 1370 | peerDependencies: 1371 | '@opentelemetry/api': ^1.1.0 1372 | '@playwright/test': ^1.41.2 1373 | babel-plugin-react-compiler: '*' 1374 | react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 1375 | react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 1376 | sass: ^1.3.0 1377 | peerDependenciesMeta: 1378 | '@opentelemetry/api': 1379 | optional: true 1380 | '@playwright/test': 1381 | optional: true 1382 | babel-plugin-react-compiler: 1383 | optional: true 1384 | sass: 1385 | optional: true 1386 | 1387 | normalize-path@3.0.0: 1388 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1389 | engines: {node: '>=0.10.0'} 1390 | 1391 | object-assign@4.1.1: 1392 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1393 | engines: {node: '>=0.10.0'} 1394 | 1395 | object-hash@2.2.0: 1396 | resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} 1397 | engines: {node: '>= 6'} 1398 | 1399 | object-hash@3.0.0: 1400 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1401 | engines: {node: '>= 6'} 1402 | 1403 | object-inspect@1.13.3: 1404 | resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} 1405 | engines: {node: '>= 0.4'} 1406 | 1407 | object-keys@1.1.1: 1408 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1409 | engines: {node: '>= 0.4'} 1410 | 1411 | object.assign@4.1.7: 1412 | resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} 1413 | engines: {node: '>= 0.4'} 1414 | 1415 | object.entries@1.1.8: 1416 | resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} 1417 | engines: {node: '>= 0.4'} 1418 | 1419 | object.fromentries@2.0.8: 1420 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 1421 | engines: {node: '>= 0.4'} 1422 | 1423 | object.groupby@1.0.3: 1424 | resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} 1425 | engines: {node: '>= 0.4'} 1426 | 1427 | object.values@1.2.1: 1428 | resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} 1429 | engines: {node: '>= 0.4'} 1430 | 1431 | oidc-token-hash@5.0.3: 1432 | resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==} 1433 | engines: {node: ^10.13.0 || >=12.0.0} 1434 | 1435 | on-finished@2.4.1: 1436 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 1437 | engines: {node: '>= 0.8'} 1438 | 1439 | once@1.4.0: 1440 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1441 | 1442 | opencontrol@0.0.6: 1443 | resolution: {integrity: sha512-QeCrpOK5D15QV8kjnGVeD/BHFLwcVr+sn4T6KKmP0WAMs2pww56e4h+eOGHb5iPOufUQXbdbBKi6WV2kk7tefQ==} 1444 | hasBin: true 1445 | 1446 | openid-client@5.6.4: 1447 | resolution: {integrity: sha512-T1h3B10BRPKfcObdBklX639tVz+xh34O7GjofqrqiAQdm7eHsQ00ih18x6wuJ/E6FxdtS2u3FmUGPDeEcMwzNA==} 1448 | 1449 | optionator@0.9.4: 1450 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1451 | engines: {node: '>= 0.8.0'} 1452 | 1453 | own-keys@1.0.1: 1454 | resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} 1455 | engines: {node: '>= 0.4'} 1456 | 1457 | p-limit@3.1.0: 1458 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1459 | engines: {node: '>=10'} 1460 | 1461 | p-locate@5.0.0: 1462 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1463 | engines: {node: '>=10'} 1464 | 1465 | package-json-from-dist@1.0.1: 1466 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1467 | 1468 | parent-module@1.0.1: 1469 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1470 | engines: {node: '>=6'} 1471 | 1472 | parseurl@1.3.3: 1473 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 1474 | engines: {node: '>= 0.8'} 1475 | 1476 | path-exists@4.0.0: 1477 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1478 | engines: {node: '>=8'} 1479 | 1480 | path-key@3.1.1: 1481 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1482 | engines: {node: '>=8'} 1483 | 1484 | path-parse@1.0.7: 1485 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1486 | 1487 | path-scurry@1.11.1: 1488 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1489 | engines: {node: '>=16 || 14 >=14.18'} 1490 | 1491 | path-to-regexp@8.3.0: 1492 | resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} 1493 | 1494 | picocolors@1.1.1: 1495 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1496 | 1497 | picomatch@2.3.1: 1498 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1499 | engines: {node: '>=8.6'} 1500 | 1501 | pify@2.3.0: 1502 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1503 | engines: {node: '>=0.10.0'} 1504 | 1505 | pirates@4.0.6: 1506 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1507 | engines: {node: '>= 6'} 1508 | 1509 | pkce-challenge@4.1.0: 1510 | resolution: {integrity: sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==} 1511 | engines: {node: '>=16.20.0'} 1512 | 1513 | possible-typed-array-names@1.0.0: 1514 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 1515 | engines: {node: '>= 0.4'} 1516 | 1517 | postcss-import@15.1.0: 1518 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 1519 | engines: {node: '>=14.0.0'} 1520 | peerDependencies: 1521 | postcss: ^8.0.0 1522 | 1523 | postcss-js@4.0.1: 1524 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 1525 | engines: {node: ^12 || ^14 || >= 16} 1526 | peerDependencies: 1527 | postcss: ^8.4.21 1528 | 1529 | postcss-load-config@4.0.2: 1530 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 1531 | engines: {node: '>= 14'} 1532 | peerDependencies: 1533 | postcss: '>=8.0.9' 1534 | ts-node: '>=9.0.0' 1535 | peerDependenciesMeta: 1536 | postcss: 1537 | optional: true 1538 | ts-node: 1539 | optional: true 1540 | 1541 | postcss-nested@6.2.0: 1542 | resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} 1543 | engines: {node: '>=12.0'} 1544 | peerDependencies: 1545 | postcss: ^8.2.14 1546 | 1547 | postcss-selector-parser@6.1.2: 1548 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} 1549 | engines: {node: '>=4'} 1550 | 1551 | postcss-value-parser@4.2.0: 1552 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1553 | 1554 | postcss@8.4.31: 1555 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 1556 | engines: {node: ^10 || ^12 || >=14} 1557 | 1558 | postcss@8.4.49: 1559 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 1560 | engines: {node: ^10 || ^12 || >=14} 1561 | 1562 | prelude-ls@1.2.1: 1563 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1564 | engines: {node: '>= 0.8.0'} 1565 | 1566 | prettier@3.4.2: 1567 | resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} 1568 | engines: {node: '>=14'} 1569 | hasBin: true 1570 | 1571 | prop-types@15.8.1: 1572 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1573 | 1574 | proxy-addr@2.0.7: 1575 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 1576 | engines: {node: '>= 0.10'} 1577 | 1578 | punycode@1.3.2: 1579 | resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} 1580 | 1581 | punycode@2.3.1: 1582 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1583 | engines: {node: '>=6'} 1584 | 1585 | qs@6.14.0: 1586 | resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} 1587 | engines: {node: '>=0.6'} 1588 | 1589 | querystring@0.2.0: 1590 | resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} 1591 | engines: {node: '>=0.4.x'} 1592 | deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. 1593 | 1594 | queue-microtask@1.2.3: 1595 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1596 | 1597 | range-parser@1.2.1: 1598 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 1599 | engines: {node: '>= 0.6'} 1600 | 1601 | raw-body@3.0.1: 1602 | resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} 1603 | engines: {node: '>= 0.10'} 1604 | 1605 | react-dom@19.0.0: 1606 | resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} 1607 | peerDependencies: 1608 | react: ^19.0.0 1609 | 1610 | react-is@16.13.1: 1611 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1612 | 1613 | react@19.0.0: 1614 | resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} 1615 | engines: {node: '>=0.10.0'} 1616 | 1617 | read-cache@1.0.0: 1618 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 1619 | 1620 | readdirp@3.6.0: 1621 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1622 | engines: {node: '>=8.10.0'} 1623 | 1624 | reflect.getprototypeof@1.0.10: 1625 | resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} 1626 | engines: {node: '>= 0.4'} 1627 | 1628 | regexp.prototype.flags@1.5.4: 1629 | resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} 1630 | engines: {node: '>= 0.4'} 1631 | 1632 | resolve-from@4.0.0: 1633 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1634 | engines: {node: '>=4'} 1635 | 1636 | resolve-pkg-maps@1.0.0: 1637 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1638 | 1639 | resolve@1.22.10: 1640 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1641 | engines: {node: '>= 0.4'} 1642 | hasBin: true 1643 | 1644 | resolve@2.0.0-next.5: 1645 | resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} 1646 | hasBin: true 1647 | 1648 | reusify@1.0.4: 1649 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1650 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1651 | 1652 | router@2.2.0: 1653 | resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} 1654 | engines: {node: '>= 18'} 1655 | 1656 | run-parallel@1.2.0: 1657 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1658 | 1659 | safe-array-concat@1.1.3: 1660 | resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} 1661 | engines: {node: '>=0.4'} 1662 | 1663 | safe-buffer@5.2.1: 1664 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1665 | 1666 | safe-push-apply@1.0.0: 1667 | resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} 1668 | engines: {node: '>= 0.4'} 1669 | 1670 | safe-regex-test@1.1.0: 1671 | resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} 1672 | engines: {node: '>= 0.4'} 1673 | 1674 | safer-buffer@2.1.2: 1675 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1676 | 1677 | sax@1.2.1: 1678 | resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} 1679 | 1680 | scheduler@0.25.0: 1681 | resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} 1682 | 1683 | semver@6.3.1: 1684 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1685 | hasBin: true 1686 | 1687 | semver@7.6.3: 1688 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1689 | engines: {node: '>=10'} 1690 | hasBin: true 1691 | 1692 | send@1.2.0: 1693 | resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} 1694 | engines: {node: '>= 18'} 1695 | 1696 | serve-static@2.2.0: 1697 | resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} 1698 | engines: {node: '>= 18'} 1699 | 1700 | set-function-length@1.2.2: 1701 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1702 | engines: {node: '>= 0.4'} 1703 | 1704 | set-function-name@2.0.2: 1705 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1706 | engines: {node: '>= 0.4'} 1707 | 1708 | set-proto@1.0.0: 1709 | resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} 1710 | engines: {node: '>= 0.4'} 1711 | 1712 | setprototypeof@1.2.0: 1713 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 1714 | 1715 | sharp@0.33.5: 1716 | resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} 1717 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1718 | 1719 | shebang-command@2.0.0: 1720 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1721 | engines: {node: '>=8'} 1722 | 1723 | shebang-regex@3.0.0: 1724 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1725 | engines: {node: '>=8'} 1726 | 1727 | side-channel-list@1.0.0: 1728 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 1729 | engines: {node: '>= 0.4'} 1730 | 1731 | side-channel-map@1.0.1: 1732 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 1733 | engines: {node: '>= 0.4'} 1734 | 1735 | side-channel-weakmap@1.0.2: 1736 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 1737 | engines: {node: '>= 0.4'} 1738 | 1739 | side-channel@1.1.0: 1740 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 1741 | engines: {node: '>= 0.4'} 1742 | 1743 | signal-exit@4.1.0: 1744 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1745 | engines: {node: '>=14'} 1746 | 1747 | simple-swizzle@0.2.2: 1748 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} 1749 | 1750 | source-map-js@1.2.1: 1751 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1752 | engines: {node: '>=0.10.0'} 1753 | 1754 | sst-darwin-arm64@3.17.13: 1755 | resolution: {integrity: sha512-HZaDReT/c+2CcEnFkYjMty63II2ckQrUniiSdoEH6eAWyU1Iy7UwKK4I2GYm+5dy9xeSBaOKga6FMdLqFxIiUg==} 1756 | cpu: [arm64] 1757 | os: [darwin] 1758 | 1759 | sst-darwin-x64@3.17.13: 1760 | resolution: {integrity: sha512-1DlYMrmrI5RY3/Ob039JatgvDKZ5QNtyRkVu0WcnsOvcxFE4dzrCiYKYHg2A+FMDl+H1qcwy2gGA3BTwC9in1w==} 1761 | cpu: [x64] 1762 | os: [darwin] 1763 | 1764 | sst-linux-arm64@3.17.13: 1765 | resolution: {integrity: sha512-A4+ZamchUdaX0pqvYWZ+r7OP1bruwEj9qgWT5kU7Q5pqaotIsEitYQi0q9nZFKH+5mXYesUwSy5FA+Q8T3X/Rg==} 1766 | cpu: [arm64] 1767 | os: [linux] 1768 | 1769 | sst-linux-x64@3.17.13: 1770 | resolution: {integrity: sha512-yhKZc5CojqjB2DnyeVka5jeRb4oc3lBx8Qf6or0w4cs47SBIqyvO0iR/3IeKvRRL1hiEUeUF8r/q83rQo9jZMw==} 1771 | cpu: [x64] 1772 | os: [linux] 1773 | 1774 | sst-linux-x86@3.17.13: 1775 | resolution: {integrity: sha512-G1FIUmpUaECB/3CV5EO/y1QmV5mQ8RUkFeZq64oyILEEaMzSWWKz0glHzQ3+p316VE74MzbktiWRqsCKQy8GeA==} 1776 | cpu: [x86] 1777 | os: [linux] 1778 | 1779 | sst-win32-arm64@3.17.13: 1780 | resolution: {integrity: sha512-9uCiIXmsGoxGeNWgM81x/d6V/vecjoiHXhBUPDGlQ1Dct1SbtHAgaf/g2ec5XwSQb9B/tne4qk81eMlTl83Z1A==} 1781 | cpu: [arm64] 1782 | os: [win32] 1783 | 1784 | sst-win32-x64@3.17.13: 1785 | resolution: {integrity: sha512-hTuj4rFSCI/9tX4NMUpNJ69Q9td/giekELDRNv03ys8TpJGoGvPT8D6VD1eX7j1CQnOZIgeEphfW9WmCXkLaIA==} 1786 | cpu: [x64] 1787 | os: [win32] 1788 | 1789 | sst-win32-x86@3.17.13: 1790 | resolution: {integrity: sha512-AuMDGux+H1kPckKJ7Szgi04EpBoOKh/v5zFNAPjvWSkcWcGZ+hsBUx3h/FO/AkGK3RnlLMRj4CQQLoa10RSSIg==} 1791 | cpu: [x86] 1792 | os: [win32] 1793 | 1794 | sst@3.17.13: 1795 | resolution: {integrity: sha512-NaNTZL7uk2AsXzPBySQy7aqXlStXorR+bA785NxvCbskwkc44nVSQcEsvX5tdsD6/jrWpw9tDy4sStv2ycLAng==} 1796 | hasBin: true 1797 | 1798 | stable-hash@0.0.4: 1799 | resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} 1800 | 1801 | statuses@2.0.1: 1802 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 1803 | engines: {node: '>= 0.8'} 1804 | 1805 | statuses@2.0.2: 1806 | resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} 1807 | engines: {node: '>= 0.8'} 1808 | 1809 | streamsearch@1.1.0: 1810 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 1811 | engines: {node: '>=10.0.0'} 1812 | 1813 | string-width@4.2.3: 1814 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1815 | engines: {node: '>=8'} 1816 | 1817 | string-width@5.1.2: 1818 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1819 | engines: {node: '>=12'} 1820 | 1821 | string.prototype.includes@2.0.1: 1822 | resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} 1823 | engines: {node: '>= 0.4'} 1824 | 1825 | string.prototype.matchall@4.0.12: 1826 | resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} 1827 | engines: {node: '>= 0.4'} 1828 | 1829 | string.prototype.repeat@1.0.0: 1830 | resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} 1831 | 1832 | string.prototype.trim@1.2.10: 1833 | resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} 1834 | engines: {node: '>= 0.4'} 1835 | 1836 | string.prototype.trimend@1.0.9: 1837 | resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} 1838 | engines: {node: '>= 0.4'} 1839 | 1840 | string.prototype.trimstart@1.0.8: 1841 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1842 | engines: {node: '>= 0.4'} 1843 | 1844 | strip-ansi@6.0.1: 1845 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1846 | engines: {node: '>=8'} 1847 | 1848 | strip-ansi@7.1.0: 1849 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1850 | engines: {node: '>=12'} 1851 | 1852 | strip-bom@3.0.0: 1853 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1854 | engines: {node: '>=4'} 1855 | 1856 | strip-json-comments@3.1.1: 1857 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1858 | engines: {node: '>=8'} 1859 | 1860 | styled-jsx@5.1.6: 1861 | resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} 1862 | engines: {node: '>= 12.0.0'} 1863 | peerDependencies: 1864 | '@babel/core': '*' 1865 | babel-plugin-macros: '*' 1866 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' 1867 | peerDependenciesMeta: 1868 | '@babel/core': 1869 | optional: true 1870 | babel-plugin-macros: 1871 | optional: true 1872 | 1873 | sucrase@3.35.0: 1874 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1875 | engines: {node: '>=16 || 14 >=14.17'} 1876 | hasBin: true 1877 | 1878 | supports-color@7.2.0: 1879 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1880 | engines: {node: '>=8'} 1881 | 1882 | supports-preserve-symlinks-flag@1.0.0: 1883 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1884 | engines: {node: '>= 0.4'} 1885 | 1886 | tailwindcss@3.4.17: 1887 | resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} 1888 | engines: {node: '>=14.0.0'} 1889 | hasBin: true 1890 | 1891 | tapable@2.2.1: 1892 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 1893 | engines: {node: '>=6'} 1894 | 1895 | thenify-all@1.6.0: 1896 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1897 | engines: {node: '>=0.8'} 1898 | 1899 | thenify@3.3.1: 1900 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1901 | 1902 | to-regex-range@5.0.1: 1903 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1904 | engines: {node: '>=8.0'} 1905 | 1906 | toidentifier@1.0.1: 1907 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 1908 | engines: {node: '>=0.6'} 1909 | 1910 | ts-api-utils@2.0.0: 1911 | resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} 1912 | engines: {node: '>=18.12'} 1913 | peerDependencies: 1914 | typescript: '>=4.8.4' 1915 | 1916 | ts-interface-checker@0.1.13: 1917 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1918 | 1919 | tsconfig-paths@3.15.0: 1920 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} 1921 | 1922 | tslib@2.8.1: 1923 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1924 | 1925 | type-check@0.4.0: 1926 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1927 | engines: {node: '>= 0.8.0'} 1928 | 1929 | type-is@2.0.1: 1930 | resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} 1931 | engines: {node: '>= 0.6'} 1932 | 1933 | typed-array-buffer@1.0.3: 1934 | resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} 1935 | engines: {node: '>= 0.4'} 1936 | 1937 | typed-array-byte-length@1.0.3: 1938 | resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} 1939 | engines: {node: '>= 0.4'} 1940 | 1941 | typed-array-byte-offset@1.0.4: 1942 | resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} 1943 | engines: {node: '>= 0.4'} 1944 | 1945 | typed-array-length@1.0.7: 1946 | resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} 1947 | engines: {node: '>= 0.4'} 1948 | 1949 | typescript@5.7.3: 1950 | resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} 1951 | engines: {node: '>=14.17'} 1952 | hasBin: true 1953 | 1954 | unbox-primitive@1.1.0: 1955 | resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} 1956 | engines: {node: '>= 0.4'} 1957 | 1958 | undici-types@6.19.8: 1959 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 1960 | 1961 | unpipe@1.0.0: 1962 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 1963 | engines: {node: '>= 0.8'} 1964 | 1965 | uri-js@4.4.1: 1966 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1967 | 1968 | url@0.10.3: 1969 | resolution: {integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==} 1970 | 1971 | util-deprecate@1.0.2: 1972 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1973 | 1974 | util@0.12.5: 1975 | resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} 1976 | 1977 | uuid@8.0.0: 1978 | resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} 1979 | hasBin: true 1980 | 1981 | vary@1.1.2: 1982 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 1983 | engines: {node: '>= 0.8'} 1984 | 1985 | which-boxed-primitive@1.1.1: 1986 | resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} 1987 | engines: {node: '>= 0.4'} 1988 | 1989 | which-builtin-type@1.2.1: 1990 | resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} 1991 | engines: {node: '>= 0.4'} 1992 | 1993 | which-collection@1.0.2: 1994 | resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 1995 | engines: {node: '>= 0.4'} 1996 | 1997 | which-typed-array@1.1.18: 1998 | resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} 1999 | engines: {node: '>= 0.4'} 2000 | 2001 | which@2.0.2: 2002 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2003 | engines: {node: '>= 8'} 2004 | hasBin: true 2005 | 2006 | word-wrap@1.2.5: 2007 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 2008 | engines: {node: '>=0.10.0'} 2009 | 2010 | wrap-ansi@7.0.0: 2011 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2012 | engines: {node: '>=10'} 2013 | 2014 | wrap-ansi@8.1.0: 2015 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 2016 | engines: {node: '>=12'} 2017 | 2018 | wrappy@1.0.2: 2019 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2020 | 2021 | xml2js@0.6.2: 2022 | resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} 2023 | engines: {node: '>=4.0.0'} 2024 | 2025 | xmlbuilder@11.0.1: 2026 | resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} 2027 | engines: {node: '>=4.0'} 2028 | 2029 | yallist@4.0.0: 2030 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2031 | 2032 | yaml@2.7.0: 2033 | resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} 2034 | engines: {node: '>= 14'} 2035 | hasBin: true 2036 | 2037 | yocto-queue@0.1.0: 2038 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2039 | engines: {node: '>=10'} 2040 | 2041 | zod-to-json-schema@3.24.3: 2042 | resolution: {integrity: sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A==} 2043 | peerDependencies: 2044 | zod: ^3.24.1 2045 | 2046 | zod@3.24.2: 2047 | resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} 2048 | 2049 | snapshots: 2050 | 2051 | '@alloc/quick-lru@5.2.0': {} 2052 | 2053 | '@emnapi/runtime@1.3.1': 2054 | dependencies: 2055 | tslib: 2.8.1 2056 | optional: true 2057 | 2058 | '@eslint-community/eslint-utils@4.4.1(eslint@9.18.0(jiti@1.21.7))': 2059 | dependencies: 2060 | eslint: 9.18.0(jiti@1.21.7) 2061 | eslint-visitor-keys: 3.4.3 2062 | 2063 | '@eslint-community/regexpp@4.12.1': {} 2064 | 2065 | '@eslint/config-array@0.19.1': 2066 | dependencies: 2067 | '@eslint/object-schema': 2.1.5 2068 | debug: 4.4.0 2069 | minimatch: 3.1.2 2070 | transitivePeerDependencies: 2071 | - supports-color 2072 | 2073 | '@eslint/core@0.10.0': 2074 | dependencies: 2075 | '@types/json-schema': 7.0.15 2076 | 2077 | '@eslint/eslintrc@3.2.0': 2078 | dependencies: 2079 | ajv: 6.12.6 2080 | debug: 4.4.0 2081 | espree: 10.3.0 2082 | globals: 14.0.0 2083 | ignore: 5.3.2 2084 | import-fresh: 3.3.0 2085 | js-yaml: 4.1.0 2086 | minimatch: 3.1.2 2087 | strip-json-comments: 3.1.1 2088 | transitivePeerDependencies: 2089 | - supports-color 2090 | 2091 | '@eslint/js@9.18.0': {} 2092 | 2093 | '@eslint/object-schema@2.1.5': {} 2094 | 2095 | '@eslint/plugin-kit@0.2.5': 2096 | dependencies: 2097 | '@eslint/core': 0.10.0 2098 | levn: 0.4.1 2099 | 2100 | '@humanfs/core@0.19.1': {} 2101 | 2102 | '@humanfs/node@0.16.6': 2103 | dependencies: 2104 | '@humanfs/core': 0.19.1 2105 | '@humanwhocodes/retry': 0.3.1 2106 | 2107 | '@humanwhocodes/module-importer@1.0.1': {} 2108 | 2109 | '@humanwhocodes/retry@0.3.1': {} 2110 | 2111 | '@humanwhocodes/retry@0.4.1': {} 2112 | 2113 | '@img/sharp-darwin-arm64@0.33.5': 2114 | optionalDependencies: 2115 | '@img/sharp-libvips-darwin-arm64': 1.0.4 2116 | optional: true 2117 | 2118 | '@img/sharp-darwin-x64@0.33.5': 2119 | optionalDependencies: 2120 | '@img/sharp-libvips-darwin-x64': 1.0.4 2121 | optional: true 2122 | 2123 | '@img/sharp-libvips-darwin-arm64@1.0.4': 2124 | optional: true 2125 | 2126 | '@img/sharp-libvips-darwin-x64@1.0.4': 2127 | optional: true 2128 | 2129 | '@img/sharp-libvips-linux-arm64@1.0.4': 2130 | optional: true 2131 | 2132 | '@img/sharp-libvips-linux-arm@1.0.5': 2133 | optional: true 2134 | 2135 | '@img/sharp-libvips-linux-s390x@1.0.4': 2136 | optional: true 2137 | 2138 | '@img/sharp-libvips-linux-x64@1.0.4': 2139 | optional: true 2140 | 2141 | '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 2142 | optional: true 2143 | 2144 | '@img/sharp-libvips-linuxmusl-x64@1.0.4': 2145 | optional: true 2146 | 2147 | '@img/sharp-linux-arm64@0.33.5': 2148 | optionalDependencies: 2149 | '@img/sharp-libvips-linux-arm64': 1.0.4 2150 | optional: true 2151 | 2152 | '@img/sharp-linux-arm@0.33.5': 2153 | optionalDependencies: 2154 | '@img/sharp-libvips-linux-arm': 1.0.5 2155 | optional: true 2156 | 2157 | '@img/sharp-linux-s390x@0.33.5': 2158 | optionalDependencies: 2159 | '@img/sharp-libvips-linux-s390x': 1.0.4 2160 | optional: true 2161 | 2162 | '@img/sharp-linux-x64@0.33.5': 2163 | optionalDependencies: 2164 | '@img/sharp-libvips-linux-x64': 1.0.4 2165 | optional: true 2166 | 2167 | '@img/sharp-linuxmusl-arm64@0.33.5': 2168 | optionalDependencies: 2169 | '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 2170 | optional: true 2171 | 2172 | '@img/sharp-linuxmusl-x64@0.33.5': 2173 | optionalDependencies: 2174 | '@img/sharp-libvips-linuxmusl-x64': 1.0.4 2175 | optional: true 2176 | 2177 | '@img/sharp-wasm32@0.33.5': 2178 | dependencies: 2179 | '@emnapi/runtime': 1.3.1 2180 | optional: true 2181 | 2182 | '@img/sharp-win32-ia32@0.33.5': 2183 | optional: true 2184 | 2185 | '@img/sharp-win32-x64@0.33.5': 2186 | optional: true 2187 | 2188 | '@isaacs/cliui@8.0.2': 2189 | dependencies: 2190 | string-width: 5.1.2 2191 | string-width-cjs: string-width@4.2.3 2192 | strip-ansi: 7.1.0 2193 | strip-ansi-cjs: strip-ansi@6.0.1 2194 | wrap-ansi: 8.1.0 2195 | wrap-ansi-cjs: wrap-ansi@7.0.0 2196 | 2197 | '@jridgewell/gen-mapping@0.3.8': 2198 | dependencies: 2199 | '@jridgewell/set-array': 1.2.1 2200 | '@jridgewell/sourcemap-codec': 1.5.0 2201 | '@jridgewell/trace-mapping': 0.3.25 2202 | 2203 | '@jridgewell/resolve-uri@3.1.2': {} 2204 | 2205 | '@jridgewell/set-array@1.2.1': {} 2206 | 2207 | '@jridgewell/sourcemap-codec@1.5.0': {} 2208 | 2209 | '@jridgewell/trace-mapping@0.3.25': 2210 | dependencies: 2211 | '@jridgewell/resolve-uri': 3.1.2 2212 | '@jridgewell/sourcemap-codec': 1.5.0 2213 | 2214 | '@modelcontextprotocol/sdk@1.6.1': 2215 | dependencies: 2216 | content-type: 1.0.5 2217 | cors: 2.8.5 2218 | eventsource: 3.0.7 2219 | express: 5.1.0 2220 | express-rate-limit: 7.5.1(express@5.1.0) 2221 | pkce-challenge: 4.1.0 2222 | raw-body: 3.0.1 2223 | zod: 3.24.2 2224 | zod-to-json-schema: 3.24.3(zod@3.24.2) 2225 | transitivePeerDependencies: 2226 | - supports-color 2227 | 2228 | '@next/env@15.1.4': {} 2229 | 2230 | '@next/eslint-plugin-next@15.1.4': 2231 | dependencies: 2232 | fast-glob: 3.3.1 2233 | 2234 | '@next/swc-darwin-arm64@15.1.4': 2235 | optional: true 2236 | 2237 | '@next/swc-darwin-x64@15.1.4': 2238 | optional: true 2239 | 2240 | '@next/swc-linux-arm64-gnu@15.1.4': 2241 | optional: true 2242 | 2243 | '@next/swc-linux-arm64-musl@15.1.4': 2244 | optional: true 2245 | 2246 | '@next/swc-linux-x64-gnu@15.1.4': 2247 | optional: true 2248 | 2249 | '@next/swc-linux-x64-musl@15.1.4': 2250 | optional: true 2251 | 2252 | '@next/swc-win32-arm64-msvc@15.1.4': 2253 | optional: true 2254 | 2255 | '@next/swc-win32-x64-msvc@15.1.4': 2256 | optional: true 2257 | 2258 | '@nodelib/fs.scandir@2.1.5': 2259 | dependencies: 2260 | '@nodelib/fs.stat': 2.0.5 2261 | run-parallel: 1.2.0 2262 | 2263 | '@nodelib/fs.stat@2.0.5': {} 2264 | 2265 | '@nodelib/fs.walk@1.2.8': 2266 | dependencies: 2267 | '@nodelib/fs.scandir': 2.1.5 2268 | fastq: 1.18.0 2269 | 2270 | '@nolyfill/is-core-module@1.0.39': {} 2271 | 2272 | '@opentelemetry/api@1.9.0': {} 2273 | 2274 | '@pkgjs/parseargs@0.11.0': 2275 | optional: true 2276 | 2277 | '@rtsao/scc@1.1.0': {} 2278 | 2279 | '@rushstack/eslint-patch@1.10.5': {} 2280 | 2281 | '@swc/counter@0.1.3': {} 2282 | 2283 | '@swc/helpers@0.5.15': 2284 | dependencies: 2285 | tslib: 2.8.1 2286 | 2287 | '@tsconfig/bun@1.0.7': {} 2288 | 2289 | '@types/aws-lambda@8.10.152': {} 2290 | 2291 | '@types/estree@1.0.6': {} 2292 | 2293 | '@types/json-schema@7.0.15': {} 2294 | 2295 | '@types/json5@0.0.29': {} 2296 | 2297 | '@types/node@20.17.12': 2298 | dependencies: 2299 | undici-types: 6.19.8 2300 | 2301 | '@types/react-dom@19.0.3(@types/react@19.0.6)': 2302 | dependencies: 2303 | '@types/react': 19.0.6 2304 | 2305 | '@types/react@19.0.6': 2306 | dependencies: 2307 | csstype: 3.1.3 2308 | 2309 | '@typescript-eslint/eslint-plugin@8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)': 2310 | dependencies: 2311 | '@eslint-community/regexpp': 4.12.1 2312 | '@typescript-eslint/parser': 8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) 2313 | '@typescript-eslint/scope-manager': 8.19.1 2314 | '@typescript-eslint/type-utils': 8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) 2315 | '@typescript-eslint/utils': 8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) 2316 | '@typescript-eslint/visitor-keys': 8.19.1 2317 | eslint: 9.18.0(jiti@1.21.7) 2318 | graphemer: 1.4.0 2319 | ignore: 5.3.2 2320 | natural-compare: 1.4.0 2321 | ts-api-utils: 2.0.0(typescript@5.7.3) 2322 | typescript: 5.7.3 2323 | transitivePeerDependencies: 2324 | - supports-color 2325 | 2326 | '@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)': 2327 | dependencies: 2328 | '@typescript-eslint/scope-manager': 8.19.1 2329 | '@typescript-eslint/types': 8.19.1 2330 | '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.3) 2331 | '@typescript-eslint/visitor-keys': 8.19.1 2332 | debug: 4.4.0 2333 | eslint: 9.18.0(jiti@1.21.7) 2334 | typescript: 5.7.3 2335 | transitivePeerDependencies: 2336 | - supports-color 2337 | 2338 | '@typescript-eslint/scope-manager@8.19.1': 2339 | dependencies: 2340 | '@typescript-eslint/types': 8.19.1 2341 | '@typescript-eslint/visitor-keys': 8.19.1 2342 | 2343 | '@typescript-eslint/type-utils@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)': 2344 | dependencies: 2345 | '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.3) 2346 | '@typescript-eslint/utils': 8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) 2347 | debug: 4.4.0 2348 | eslint: 9.18.0(jiti@1.21.7) 2349 | ts-api-utils: 2.0.0(typescript@5.7.3) 2350 | typescript: 5.7.3 2351 | transitivePeerDependencies: 2352 | - supports-color 2353 | 2354 | '@typescript-eslint/types@8.19.1': {} 2355 | 2356 | '@typescript-eslint/typescript-estree@8.19.1(typescript@5.7.3)': 2357 | dependencies: 2358 | '@typescript-eslint/types': 8.19.1 2359 | '@typescript-eslint/visitor-keys': 8.19.1 2360 | debug: 4.4.0 2361 | fast-glob: 3.3.3 2362 | is-glob: 4.0.3 2363 | minimatch: 9.0.5 2364 | semver: 7.6.3 2365 | ts-api-utils: 2.0.0(typescript@5.7.3) 2366 | typescript: 5.7.3 2367 | transitivePeerDependencies: 2368 | - supports-color 2369 | 2370 | '@typescript-eslint/utils@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)': 2371 | dependencies: 2372 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@1.21.7)) 2373 | '@typescript-eslint/scope-manager': 8.19.1 2374 | '@typescript-eslint/types': 8.19.1 2375 | '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.3) 2376 | eslint: 9.18.0(jiti@1.21.7) 2377 | typescript: 5.7.3 2378 | transitivePeerDependencies: 2379 | - supports-color 2380 | 2381 | '@typescript-eslint/visitor-keys@8.19.1': 2382 | dependencies: 2383 | '@typescript-eslint/types': 8.19.1 2384 | eslint-visitor-keys: 4.2.0 2385 | 2386 | accepts@2.0.0: 2387 | dependencies: 2388 | mime-types: 3.0.1 2389 | negotiator: 1.0.0 2390 | 2391 | acorn-jsx@5.3.2(acorn@8.14.0): 2392 | dependencies: 2393 | acorn: 8.14.0 2394 | 2395 | acorn@8.14.0: {} 2396 | 2397 | ajv@6.12.6: 2398 | dependencies: 2399 | fast-deep-equal: 3.1.3 2400 | fast-json-stable-stringify: 2.1.0 2401 | json-schema-traverse: 0.4.1 2402 | uri-js: 4.4.1 2403 | 2404 | ansi-regex@5.0.1: {} 2405 | 2406 | ansi-regex@6.1.0: {} 2407 | 2408 | ansi-styles@4.3.0: 2409 | dependencies: 2410 | color-convert: 2.0.1 2411 | 2412 | ansi-styles@6.2.1: {} 2413 | 2414 | any-promise@1.3.0: {} 2415 | 2416 | anymatch@3.1.3: 2417 | dependencies: 2418 | normalize-path: 3.0.0 2419 | picomatch: 2.3.1 2420 | 2421 | arg@5.0.2: {} 2422 | 2423 | argparse@2.0.1: {} 2424 | 2425 | aria-query@5.3.2: {} 2426 | 2427 | array-buffer-byte-length@1.0.2: 2428 | dependencies: 2429 | call-bound: 1.0.3 2430 | is-array-buffer: 3.0.5 2431 | 2432 | array-includes@3.1.8: 2433 | dependencies: 2434 | call-bind: 1.0.8 2435 | define-properties: 1.2.1 2436 | es-abstract: 1.23.9 2437 | es-object-atoms: 1.0.0 2438 | get-intrinsic: 1.2.7 2439 | is-string: 1.1.1 2440 | 2441 | array.prototype.findlast@1.2.5: 2442 | dependencies: 2443 | call-bind: 1.0.8 2444 | define-properties: 1.2.1 2445 | es-abstract: 1.23.9 2446 | es-errors: 1.3.0 2447 | es-object-atoms: 1.0.0 2448 | es-shim-unscopables: 1.0.2 2449 | 2450 | array.prototype.findlastindex@1.2.5: 2451 | dependencies: 2452 | call-bind: 1.0.8 2453 | define-properties: 1.2.1 2454 | es-abstract: 1.23.9 2455 | es-errors: 1.3.0 2456 | es-object-atoms: 1.0.0 2457 | es-shim-unscopables: 1.0.2 2458 | 2459 | array.prototype.flat@1.3.3: 2460 | dependencies: 2461 | call-bind: 1.0.8 2462 | define-properties: 1.2.1 2463 | es-abstract: 1.23.9 2464 | es-shim-unscopables: 1.0.2 2465 | 2466 | array.prototype.flatmap@1.3.3: 2467 | dependencies: 2468 | call-bind: 1.0.8 2469 | define-properties: 1.2.1 2470 | es-abstract: 1.23.9 2471 | es-shim-unscopables: 1.0.2 2472 | 2473 | array.prototype.tosorted@1.1.4: 2474 | dependencies: 2475 | call-bind: 1.0.8 2476 | define-properties: 1.2.1 2477 | es-abstract: 1.23.9 2478 | es-errors: 1.3.0 2479 | es-shim-unscopables: 1.0.2 2480 | 2481 | arraybuffer.prototype.slice@1.0.4: 2482 | dependencies: 2483 | array-buffer-byte-length: 1.0.2 2484 | call-bind: 1.0.8 2485 | define-properties: 1.2.1 2486 | es-abstract: 1.23.9 2487 | es-errors: 1.3.0 2488 | get-intrinsic: 1.2.7 2489 | is-array-buffer: 3.0.5 2490 | 2491 | ast-types-flow@0.0.8: {} 2492 | 2493 | available-typed-arrays@1.0.7: 2494 | dependencies: 2495 | possible-typed-array-names: 1.0.0 2496 | 2497 | aws-sdk@2.1692.0: 2498 | dependencies: 2499 | buffer: 4.9.2 2500 | events: 1.1.1 2501 | ieee754: 1.1.13 2502 | jmespath: 0.16.0 2503 | querystring: 0.2.0 2504 | sax: 1.2.1 2505 | url: 0.10.3 2506 | util: 0.12.5 2507 | uuid: 8.0.0 2508 | xml2js: 0.6.2 2509 | 2510 | aws4fetch@1.0.18: {} 2511 | 2512 | axe-core@4.10.2: {} 2513 | 2514 | axobject-query@4.1.0: {} 2515 | 2516 | balanced-match@1.0.2: {} 2517 | 2518 | base64-js@1.5.1: {} 2519 | 2520 | binary-extensions@2.3.0: {} 2521 | 2522 | body-parser@2.2.0: 2523 | dependencies: 2524 | bytes: 3.1.2 2525 | content-type: 1.0.5 2526 | debug: 4.4.0 2527 | http-errors: 2.0.0 2528 | iconv-lite: 0.6.3 2529 | on-finished: 2.4.1 2530 | qs: 6.14.0 2531 | raw-body: 3.0.1 2532 | type-is: 2.0.1 2533 | transitivePeerDependencies: 2534 | - supports-color 2535 | 2536 | brace-expansion@1.1.11: 2537 | dependencies: 2538 | balanced-match: 1.0.2 2539 | concat-map: 0.0.1 2540 | 2541 | brace-expansion@2.0.1: 2542 | dependencies: 2543 | balanced-match: 1.0.2 2544 | 2545 | braces@3.0.3: 2546 | dependencies: 2547 | fill-range: 7.1.1 2548 | 2549 | buffer@4.9.2: 2550 | dependencies: 2551 | base64-js: 1.5.1 2552 | ieee754: 1.1.13 2553 | isarray: 1.0.0 2554 | 2555 | busboy@1.6.0: 2556 | dependencies: 2557 | streamsearch: 1.1.0 2558 | 2559 | bytes@3.1.2: {} 2560 | 2561 | call-bind-apply-helpers@1.0.1: 2562 | dependencies: 2563 | es-errors: 1.3.0 2564 | function-bind: 1.1.2 2565 | 2566 | call-bind@1.0.8: 2567 | dependencies: 2568 | call-bind-apply-helpers: 1.0.1 2569 | es-define-property: 1.0.1 2570 | get-intrinsic: 1.2.7 2571 | set-function-length: 1.2.2 2572 | 2573 | call-bound@1.0.3: 2574 | dependencies: 2575 | call-bind-apply-helpers: 1.0.1 2576 | get-intrinsic: 1.2.7 2577 | 2578 | callsites@3.1.0: {} 2579 | 2580 | camelcase-css@2.0.1: {} 2581 | 2582 | caniuse-lite@1.0.30001692: {} 2583 | 2584 | chalk@4.1.2: 2585 | dependencies: 2586 | ansi-styles: 4.3.0 2587 | supports-color: 7.2.0 2588 | 2589 | chokidar@3.6.0: 2590 | dependencies: 2591 | anymatch: 3.1.3 2592 | braces: 3.0.3 2593 | glob-parent: 5.1.2 2594 | is-binary-path: 2.1.0 2595 | is-glob: 4.0.3 2596 | normalize-path: 3.0.0 2597 | readdirp: 3.6.0 2598 | optionalDependencies: 2599 | fsevents: 2.3.3 2600 | 2601 | client-only@0.0.1: {} 2602 | 2603 | color-convert@2.0.1: 2604 | dependencies: 2605 | color-name: 1.1.4 2606 | 2607 | color-name@1.1.4: {} 2608 | 2609 | color-string@1.9.1: 2610 | dependencies: 2611 | color-name: 1.1.4 2612 | simple-swizzle: 0.2.2 2613 | optional: true 2614 | 2615 | color@4.2.3: 2616 | dependencies: 2617 | color-convert: 2.0.1 2618 | color-string: 1.9.1 2619 | optional: true 2620 | 2621 | commander@4.1.1: {} 2622 | 2623 | concat-map@0.0.1: {} 2624 | 2625 | content-disposition@1.0.0: 2626 | dependencies: 2627 | safe-buffer: 5.2.1 2628 | 2629 | content-type@1.0.5: {} 2630 | 2631 | cookie-signature@1.2.2: {} 2632 | 2633 | cookie@0.7.2: {} 2634 | 2635 | cors@2.8.5: 2636 | dependencies: 2637 | object-assign: 4.1.1 2638 | vary: 1.1.2 2639 | 2640 | cross-spawn@7.0.6: 2641 | dependencies: 2642 | path-key: 3.1.1 2643 | shebang-command: 2.0.0 2644 | which: 2.0.2 2645 | 2646 | cssesc@3.0.0: {} 2647 | 2648 | csstype@3.1.3: {} 2649 | 2650 | damerau-levenshtein@1.0.8: {} 2651 | 2652 | data-view-buffer@1.0.2: 2653 | dependencies: 2654 | call-bound: 1.0.3 2655 | es-errors: 1.3.0 2656 | is-data-view: 1.0.2 2657 | 2658 | data-view-byte-length@1.0.2: 2659 | dependencies: 2660 | call-bound: 1.0.3 2661 | es-errors: 1.3.0 2662 | is-data-view: 1.0.2 2663 | 2664 | data-view-byte-offset@1.0.1: 2665 | dependencies: 2666 | call-bound: 1.0.3 2667 | es-errors: 1.3.0 2668 | is-data-view: 1.0.2 2669 | 2670 | debug@3.2.7: 2671 | dependencies: 2672 | ms: 2.1.3 2673 | 2674 | debug@4.4.0: 2675 | dependencies: 2676 | ms: 2.1.3 2677 | 2678 | deep-is@0.1.4: {} 2679 | 2680 | define-data-property@1.1.4: 2681 | dependencies: 2682 | es-define-property: 1.0.1 2683 | es-errors: 1.3.0 2684 | gopd: 1.2.0 2685 | 2686 | define-properties@1.2.1: 2687 | dependencies: 2688 | define-data-property: 1.1.4 2689 | has-property-descriptors: 1.0.2 2690 | object-keys: 1.1.1 2691 | 2692 | depd@2.0.0: {} 2693 | 2694 | detect-libc@2.0.3: 2695 | optional: true 2696 | 2697 | didyoumean@1.2.2: {} 2698 | 2699 | dlv@1.1.3: {} 2700 | 2701 | doctrine@2.1.0: 2702 | dependencies: 2703 | esutils: 2.0.3 2704 | 2705 | dunder-proto@1.0.1: 2706 | dependencies: 2707 | call-bind-apply-helpers: 1.0.1 2708 | es-errors: 1.3.0 2709 | gopd: 1.2.0 2710 | 2711 | eastasianwidth@0.2.0: {} 2712 | 2713 | ee-first@1.1.1: {} 2714 | 2715 | emoji-regex@8.0.0: {} 2716 | 2717 | emoji-regex@9.2.2: {} 2718 | 2719 | encodeurl@2.0.0: {} 2720 | 2721 | enhanced-resolve@5.18.0: 2722 | dependencies: 2723 | graceful-fs: 4.2.11 2724 | tapable: 2.2.1 2725 | 2726 | es-abstract@1.23.9: 2727 | dependencies: 2728 | array-buffer-byte-length: 1.0.2 2729 | arraybuffer.prototype.slice: 1.0.4 2730 | available-typed-arrays: 1.0.7 2731 | call-bind: 1.0.8 2732 | call-bound: 1.0.3 2733 | data-view-buffer: 1.0.2 2734 | data-view-byte-length: 1.0.2 2735 | data-view-byte-offset: 1.0.1 2736 | es-define-property: 1.0.1 2737 | es-errors: 1.3.0 2738 | es-object-atoms: 1.0.0 2739 | es-set-tostringtag: 2.1.0 2740 | es-to-primitive: 1.3.0 2741 | function.prototype.name: 1.1.8 2742 | get-intrinsic: 1.2.7 2743 | get-proto: 1.0.1 2744 | get-symbol-description: 1.1.0 2745 | globalthis: 1.0.4 2746 | gopd: 1.2.0 2747 | has-property-descriptors: 1.0.2 2748 | has-proto: 1.2.0 2749 | has-symbols: 1.1.0 2750 | hasown: 2.0.2 2751 | internal-slot: 1.1.0 2752 | is-array-buffer: 3.0.5 2753 | is-callable: 1.2.7 2754 | is-data-view: 1.0.2 2755 | is-regex: 1.2.1 2756 | is-shared-array-buffer: 1.0.4 2757 | is-string: 1.1.1 2758 | is-typed-array: 1.1.15 2759 | is-weakref: 1.1.0 2760 | math-intrinsics: 1.1.0 2761 | object-inspect: 1.13.3 2762 | object-keys: 1.1.1 2763 | object.assign: 4.1.7 2764 | own-keys: 1.0.1 2765 | regexp.prototype.flags: 1.5.4 2766 | safe-array-concat: 1.1.3 2767 | safe-push-apply: 1.0.0 2768 | safe-regex-test: 1.1.0 2769 | set-proto: 1.0.0 2770 | string.prototype.trim: 1.2.10 2771 | string.prototype.trimend: 1.0.9 2772 | string.prototype.trimstart: 1.0.8 2773 | typed-array-buffer: 1.0.3 2774 | typed-array-byte-length: 1.0.3 2775 | typed-array-byte-offset: 1.0.4 2776 | typed-array-length: 1.0.7 2777 | unbox-primitive: 1.1.0 2778 | which-typed-array: 1.1.18 2779 | 2780 | es-define-property@1.0.1: {} 2781 | 2782 | es-errors@1.3.0: {} 2783 | 2784 | es-iterator-helpers@1.2.1: 2785 | dependencies: 2786 | call-bind: 1.0.8 2787 | call-bound: 1.0.3 2788 | define-properties: 1.2.1 2789 | es-abstract: 1.23.9 2790 | es-errors: 1.3.0 2791 | es-set-tostringtag: 2.1.0 2792 | function-bind: 1.1.2 2793 | get-intrinsic: 1.2.7 2794 | globalthis: 1.0.4 2795 | gopd: 1.2.0 2796 | has-property-descriptors: 1.0.2 2797 | has-proto: 1.2.0 2798 | has-symbols: 1.1.0 2799 | internal-slot: 1.1.0 2800 | iterator.prototype: 1.1.5 2801 | safe-array-concat: 1.1.3 2802 | 2803 | es-object-atoms@1.0.0: 2804 | dependencies: 2805 | es-errors: 1.3.0 2806 | 2807 | es-set-tostringtag@2.1.0: 2808 | dependencies: 2809 | es-errors: 1.3.0 2810 | get-intrinsic: 1.2.7 2811 | has-tostringtag: 1.0.2 2812 | hasown: 2.0.2 2813 | 2814 | es-shim-unscopables@1.0.2: 2815 | dependencies: 2816 | hasown: 2.0.2 2817 | 2818 | es-to-primitive@1.3.0: 2819 | dependencies: 2820 | is-callable: 1.2.7 2821 | is-date-object: 1.1.0 2822 | is-symbol: 1.1.1 2823 | 2824 | escape-html@1.0.3: {} 2825 | 2826 | escape-string-regexp@4.0.0: {} 2827 | 2828 | eslint-config-next@15.1.4(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3): 2829 | dependencies: 2830 | '@next/eslint-plugin-next': 15.1.4 2831 | '@rushstack/eslint-patch': 1.10.5 2832 | '@typescript-eslint/eslint-plugin': 8.19.1(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) 2833 | '@typescript-eslint/parser': 8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) 2834 | eslint: 9.18.0(jiti@1.21.7) 2835 | eslint-import-resolver-node: 0.3.9 2836 | eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.18.0(jiti@1.21.7)) 2837 | eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@1.21.7)) 2838 | eslint-plugin-jsx-a11y: 6.10.2(eslint@9.18.0(jiti@1.21.7)) 2839 | eslint-plugin-react: 7.37.4(eslint@9.18.0(jiti@1.21.7)) 2840 | eslint-plugin-react-hooks: 5.1.0(eslint@9.18.0(jiti@1.21.7)) 2841 | optionalDependencies: 2842 | typescript: 5.7.3 2843 | transitivePeerDependencies: 2844 | - eslint-import-resolver-webpack 2845 | - eslint-plugin-import-x 2846 | - supports-color 2847 | 2848 | eslint-import-resolver-node@0.3.9: 2849 | dependencies: 2850 | debug: 3.2.7 2851 | is-core-module: 2.16.1 2852 | resolve: 1.22.10 2853 | transitivePeerDependencies: 2854 | - supports-color 2855 | 2856 | eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.18.0(jiti@1.21.7)): 2857 | dependencies: 2858 | '@nolyfill/is-core-module': 1.0.39 2859 | debug: 4.4.0 2860 | enhanced-resolve: 5.18.0 2861 | eslint: 9.18.0(jiti@1.21.7) 2862 | fast-glob: 3.3.3 2863 | get-tsconfig: 4.8.1 2864 | is-bun-module: 1.3.0 2865 | is-glob: 4.0.3 2866 | stable-hash: 0.0.4 2867 | optionalDependencies: 2868 | eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@1.21.7)) 2869 | transitivePeerDependencies: 2870 | - supports-color 2871 | 2872 | eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.18.0(jiti@1.21.7)))(eslint@9.18.0(jiti@1.21.7)): 2873 | dependencies: 2874 | debug: 3.2.7 2875 | optionalDependencies: 2876 | '@typescript-eslint/parser': 8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) 2877 | eslint: 9.18.0(jiti@1.21.7) 2878 | eslint-import-resolver-node: 0.3.9 2879 | eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.18.0(jiti@1.21.7)) 2880 | transitivePeerDependencies: 2881 | - supports-color 2882 | 2883 | eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@1.21.7)): 2884 | dependencies: 2885 | '@rtsao/scc': 1.1.0 2886 | array-includes: 3.1.8 2887 | array.prototype.findlastindex: 1.2.5 2888 | array.prototype.flat: 1.3.3 2889 | array.prototype.flatmap: 1.3.3 2890 | debug: 3.2.7 2891 | doctrine: 2.1.0 2892 | eslint: 9.18.0(jiti@1.21.7) 2893 | eslint-import-resolver-node: 0.3.9 2894 | eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.18.0(jiti@1.21.7)))(eslint@9.18.0(jiti@1.21.7)) 2895 | hasown: 2.0.2 2896 | is-core-module: 2.16.1 2897 | is-glob: 4.0.3 2898 | minimatch: 3.1.2 2899 | object.fromentries: 2.0.8 2900 | object.groupby: 1.0.3 2901 | object.values: 1.2.1 2902 | semver: 6.3.1 2903 | string.prototype.trimend: 1.0.9 2904 | tsconfig-paths: 3.15.0 2905 | optionalDependencies: 2906 | '@typescript-eslint/parser': 8.19.1(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) 2907 | transitivePeerDependencies: 2908 | - eslint-import-resolver-typescript 2909 | - eslint-import-resolver-webpack 2910 | - supports-color 2911 | 2912 | eslint-plugin-jsx-a11y@6.10.2(eslint@9.18.0(jiti@1.21.7)): 2913 | dependencies: 2914 | aria-query: 5.3.2 2915 | array-includes: 3.1.8 2916 | array.prototype.flatmap: 1.3.3 2917 | ast-types-flow: 0.0.8 2918 | axe-core: 4.10.2 2919 | axobject-query: 4.1.0 2920 | damerau-levenshtein: 1.0.8 2921 | emoji-regex: 9.2.2 2922 | eslint: 9.18.0(jiti@1.21.7) 2923 | hasown: 2.0.2 2924 | jsx-ast-utils: 3.3.5 2925 | language-tags: 1.0.9 2926 | minimatch: 3.1.2 2927 | object.fromentries: 2.0.8 2928 | safe-regex-test: 1.1.0 2929 | string.prototype.includes: 2.0.1 2930 | 2931 | eslint-plugin-react-hooks@5.1.0(eslint@9.18.0(jiti@1.21.7)): 2932 | dependencies: 2933 | eslint: 9.18.0(jiti@1.21.7) 2934 | 2935 | eslint-plugin-react@7.37.4(eslint@9.18.0(jiti@1.21.7)): 2936 | dependencies: 2937 | array-includes: 3.1.8 2938 | array.prototype.findlast: 1.2.5 2939 | array.prototype.flatmap: 1.3.3 2940 | array.prototype.tosorted: 1.1.4 2941 | doctrine: 2.1.0 2942 | es-iterator-helpers: 1.2.1 2943 | eslint: 9.18.0(jiti@1.21.7) 2944 | estraverse: 5.3.0 2945 | hasown: 2.0.2 2946 | jsx-ast-utils: 3.3.5 2947 | minimatch: 3.1.2 2948 | object.entries: 1.1.8 2949 | object.fromentries: 2.0.8 2950 | object.values: 1.2.1 2951 | prop-types: 15.8.1 2952 | resolve: 2.0.0-next.5 2953 | semver: 6.3.1 2954 | string.prototype.matchall: 4.0.12 2955 | string.prototype.repeat: 1.0.0 2956 | 2957 | eslint-scope@8.2.0: 2958 | dependencies: 2959 | esrecurse: 4.3.0 2960 | estraverse: 5.3.0 2961 | 2962 | eslint-visitor-keys@3.4.3: {} 2963 | 2964 | eslint-visitor-keys@4.2.0: {} 2965 | 2966 | eslint@9.18.0(jiti@1.21.7): 2967 | dependencies: 2968 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@1.21.7)) 2969 | '@eslint-community/regexpp': 4.12.1 2970 | '@eslint/config-array': 0.19.1 2971 | '@eslint/core': 0.10.0 2972 | '@eslint/eslintrc': 3.2.0 2973 | '@eslint/js': 9.18.0 2974 | '@eslint/plugin-kit': 0.2.5 2975 | '@humanfs/node': 0.16.6 2976 | '@humanwhocodes/module-importer': 1.0.1 2977 | '@humanwhocodes/retry': 0.4.1 2978 | '@types/estree': 1.0.6 2979 | '@types/json-schema': 7.0.15 2980 | ajv: 6.12.6 2981 | chalk: 4.1.2 2982 | cross-spawn: 7.0.6 2983 | debug: 4.4.0 2984 | escape-string-regexp: 4.0.0 2985 | eslint-scope: 8.2.0 2986 | eslint-visitor-keys: 4.2.0 2987 | espree: 10.3.0 2988 | esquery: 1.6.0 2989 | esutils: 2.0.3 2990 | fast-deep-equal: 3.1.3 2991 | file-entry-cache: 8.0.0 2992 | find-up: 5.0.0 2993 | glob-parent: 6.0.2 2994 | ignore: 5.3.2 2995 | imurmurhash: 0.1.4 2996 | is-glob: 4.0.3 2997 | json-stable-stringify-without-jsonify: 1.0.1 2998 | lodash.merge: 4.6.2 2999 | minimatch: 3.1.2 3000 | natural-compare: 1.4.0 3001 | optionator: 0.9.4 3002 | optionalDependencies: 3003 | jiti: 1.21.7 3004 | transitivePeerDependencies: 3005 | - supports-color 3006 | 3007 | espree@10.3.0: 3008 | dependencies: 3009 | acorn: 8.14.0 3010 | acorn-jsx: 5.3.2(acorn@8.14.0) 3011 | eslint-visitor-keys: 4.2.0 3012 | 3013 | esquery@1.6.0: 3014 | dependencies: 3015 | estraverse: 5.3.0 3016 | 3017 | esrecurse@4.3.0: 3018 | dependencies: 3019 | estraverse: 5.3.0 3020 | 3021 | estraverse@5.3.0: {} 3022 | 3023 | esutils@2.0.3: {} 3024 | 3025 | etag@1.8.1: {} 3026 | 3027 | events@1.1.1: {} 3028 | 3029 | eventsource-parser@3.0.6: {} 3030 | 3031 | eventsource@3.0.7: 3032 | dependencies: 3033 | eventsource-parser: 3.0.6 3034 | 3035 | express-rate-limit@7.5.1(express@5.1.0): 3036 | dependencies: 3037 | express: 5.1.0 3038 | 3039 | express@5.1.0: 3040 | dependencies: 3041 | accepts: 2.0.0 3042 | body-parser: 2.2.0 3043 | content-disposition: 1.0.0 3044 | content-type: 1.0.5 3045 | cookie: 0.7.2 3046 | cookie-signature: 1.2.2 3047 | debug: 4.4.0 3048 | encodeurl: 2.0.0 3049 | escape-html: 1.0.3 3050 | etag: 1.8.1 3051 | finalhandler: 2.1.0 3052 | fresh: 2.0.0 3053 | http-errors: 2.0.0 3054 | merge-descriptors: 2.0.0 3055 | mime-types: 3.0.1 3056 | on-finished: 2.4.1 3057 | once: 1.4.0 3058 | parseurl: 1.3.3 3059 | proxy-addr: 2.0.7 3060 | qs: 6.14.0 3061 | range-parser: 1.2.1 3062 | router: 2.2.0 3063 | send: 1.2.0 3064 | serve-static: 2.2.0 3065 | statuses: 2.0.2 3066 | type-is: 2.0.1 3067 | vary: 1.1.2 3068 | transitivePeerDependencies: 3069 | - supports-color 3070 | 3071 | fast-deep-equal@3.1.3: {} 3072 | 3073 | fast-glob@3.3.1: 3074 | dependencies: 3075 | '@nodelib/fs.stat': 2.0.5 3076 | '@nodelib/fs.walk': 1.2.8 3077 | glob-parent: 5.1.2 3078 | merge2: 1.4.1 3079 | micromatch: 4.0.8 3080 | 3081 | fast-glob@3.3.3: 3082 | dependencies: 3083 | '@nodelib/fs.stat': 2.0.5 3084 | '@nodelib/fs.walk': 1.2.8 3085 | glob-parent: 5.1.2 3086 | merge2: 1.4.1 3087 | micromatch: 4.0.8 3088 | 3089 | fast-json-stable-stringify@2.1.0: {} 3090 | 3091 | fast-levenshtein@2.0.6: {} 3092 | 3093 | fastq@1.18.0: 3094 | dependencies: 3095 | reusify: 1.0.4 3096 | 3097 | file-entry-cache@8.0.0: 3098 | dependencies: 3099 | flat-cache: 4.0.1 3100 | 3101 | fill-range@7.1.1: 3102 | dependencies: 3103 | to-regex-range: 5.0.1 3104 | 3105 | finalhandler@2.1.0: 3106 | dependencies: 3107 | debug: 4.4.0 3108 | encodeurl: 2.0.0 3109 | escape-html: 1.0.3 3110 | on-finished: 2.4.1 3111 | parseurl: 1.3.3 3112 | statuses: 2.0.2 3113 | transitivePeerDependencies: 3114 | - supports-color 3115 | 3116 | find-up@5.0.0: 3117 | dependencies: 3118 | locate-path: 6.0.0 3119 | path-exists: 4.0.0 3120 | 3121 | flat-cache@4.0.1: 3122 | dependencies: 3123 | flatted: 3.3.2 3124 | keyv: 4.5.4 3125 | 3126 | flatted@3.3.2: {} 3127 | 3128 | for-each@0.3.3: 3129 | dependencies: 3130 | is-callable: 1.2.7 3131 | 3132 | foreground-child@3.3.0: 3133 | dependencies: 3134 | cross-spawn: 7.0.6 3135 | signal-exit: 4.1.0 3136 | 3137 | forwarded@0.2.0: {} 3138 | 3139 | fresh@2.0.0: {} 3140 | 3141 | fsevents@2.3.3: 3142 | optional: true 3143 | 3144 | function-bind@1.1.2: {} 3145 | 3146 | function.prototype.name@1.1.8: 3147 | dependencies: 3148 | call-bind: 1.0.8 3149 | call-bound: 1.0.3 3150 | define-properties: 1.2.1 3151 | functions-have-names: 1.2.3 3152 | hasown: 2.0.2 3153 | is-callable: 1.2.7 3154 | 3155 | functions-have-names@1.2.3: {} 3156 | 3157 | get-intrinsic@1.2.7: 3158 | dependencies: 3159 | call-bind-apply-helpers: 1.0.1 3160 | es-define-property: 1.0.1 3161 | es-errors: 1.3.0 3162 | es-object-atoms: 1.0.0 3163 | function-bind: 1.1.2 3164 | get-proto: 1.0.1 3165 | gopd: 1.2.0 3166 | has-symbols: 1.1.0 3167 | hasown: 2.0.2 3168 | math-intrinsics: 1.1.0 3169 | 3170 | get-proto@1.0.1: 3171 | dependencies: 3172 | dunder-proto: 1.0.1 3173 | es-object-atoms: 1.0.0 3174 | 3175 | get-symbol-description@1.1.0: 3176 | dependencies: 3177 | call-bound: 1.0.3 3178 | es-errors: 1.3.0 3179 | get-intrinsic: 1.2.7 3180 | 3181 | get-tsconfig@4.8.1: 3182 | dependencies: 3183 | resolve-pkg-maps: 1.0.0 3184 | 3185 | glob-parent@5.1.2: 3186 | dependencies: 3187 | is-glob: 4.0.3 3188 | 3189 | glob-parent@6.0.2: 3190 | dependencies: 3191 | is-glob: 4.0.3 3192 | 3193 | glob@10.4.5: 3194 | dependencies: 3195 | foreground-child: 3.3.0 3196 | jackspeak: 3.4.3 3197 | minimatch: 9.0.5 3198 | minipass: 7.1.2 3199 | package-json-from-dist: 1.0.1 3200 | path-scurry: 1.11.1 3201 | 3202 | globals@14.0.0: {} 3203 | 3204 | globalthis@1.0.4: 3205 | dependencies: 3206 | define-properties: 1.2.1 3207 | gopd: 1.2.0 3208 | 3209 | gopd@1.2.0: {} 3210 | 3211 | graceful-fs@4.2.11: {} 3212 | 3213 | graphemer@1.4.0: {} 3214 | 3215 | has-bigints@1.1.0: {} 3216 | 3217 | has-flag@4.0.0: {} 3218 | 3219 | has-property-descriptors@1.0.2: 3220 | dependencies: 3221 | es-define-property: 1.0.1 3222 | 3223 | has-proto@1.2.0: 3224 | dependencies: 3225 | dunder-proto: 1.0.1 3226 | 3227 | has-symbols@1.1.0: {} 3228 | 3229 | has-tostringtag@1.0.2: 3230 | dependencies: 3231 | has-symbols: 1.1.0 3232 | 3233 | hasown@2.0.2: 3234 | dependencies: 3235 | function-bind: 1.1.2 3236 | 3237 | hono@4.7.4: {} 3238 | 3239 | http-errors@2.0.0: 3240 | dependencies: 3241 | depd: 2.0.0 3242 | inherits: 2.0.4 3243 | setprototypeof: 1.2.0 3244 | statuses: 2.0.1 3245 | toidentifier: 1.0.1 3246 | 3247 | iconv-lite@0.6.3: 3248 | dependencies: 3249 | safer-buffer: 2.1.2 3250 | 3251 | iconv-lite@0.7.0: 3252 | dependencies: 3253 | safer-buffer: 2.1.2 3254 | 3255 | ieee754@1.1.13: {} 3256 | 3257 | ignore@5.3.2: {} 3258 | 3259 | import-fresh@3.3.0: 3260 | dependencies: 3261 | parent-module: 1.0.1 3262 | resolve-from: 4.0.0 3263 | 3264 | imurmurhash@0.1.4: {} 3265 | 3266 | inherits@2.0.4: {} 3267 | 3268 | internal-slot@1.1.0: 3269 | dependencies: 3270 | es-errors: 1.3.0 3271 | hasown: 2.0.2 3272 | side-channel: 1.1.0 3273 | 3274 | ipaddr.js@1.9.1: {} 3275 | 3276 | is-arguments@1.2.0: 3277 | dependencies: 3278 | call-bound: 1.0.3 3279 | has-tostringtag: 1.0.2 3280 | 3281 | is-array-buffer@3.0.5: 3282 | dependencies: 3283 | call-bind: 1.0.8 3284 | call-bound: 1.0.3 3285 | get-intrinsic: 1.2.7 3286 | 3287 | is-arrayish@0.3.2: 3288 | optional: true 3289 | 3290 | is-async-function@2.1.0: 3291 | dependencies: 3292 | call-bound: 1.0.3 3293 | get-proto: 1.0.1 3294 | has-tostringtag: 1.0.2 3295 | safe-regex-test: 1.1.0 3296 | 3297 | is-bigint@1.1.0: 3298 | dependencies: 3299 | has-bigints: 1.1.0 3300 | 3301 | is-binary-path@2.1.0: 3302 | dependencies: 3303 | binary-extensions: 2.3.0 3304 | 3305 | is-boolean-object@1.2.1: 3306 | dependencies: 3307 | call-bound: 1.0.3 3308 | has-tostringtag: 1.0.2 3309 | 3310 | is-bun-module@1.3.0: 3311 | dependencies: 3312 | semver: 7.6.3 3313 | 3314 | is-callable@1.2.7: {} 3315 | 3316 | is-core-module@2.16.1: 3317 | dependencies: 3318 | hasown: 2.0.2 3319 | 3320 | is-data-view@1.0.2: 3321 | dependencies: 3322 | call-bound: 1.0.3 3323 | get-intrinsic: 1.2.7 3324 | is-typed-array: 1.1.15 3325 | 3326 | is-date-object@1.1.0: 3327 | dependencies: 3328 | call-bound: 1.0.3 3329 | has-tostringtag: 1.0.2 3330 | 3331 | is-extglob@2.1.1: {} 3332 | 3333 | is-finalizationregistry@1.1.1: 3334 | dependencies: 3335 | call-bound: 1.0.3 3336 | 3337 | is-fullwidth-code-point@3.0.0: {} 3338 | 3339 | is-generator-function@1.1.0: 3340 | dependencies: 3341 | call-bound: 1.0.3 3342 | get-proto: 1.0.1 3343 | has-tostringtag: 1.0.2 3344 | safe-regex-test: 1.1.0 3345 | 3346 | is-glob@4.0.3: 3347 | dependencies: 3348 | is-extglob: 2.1.1 3349 | 3350 | is-map@2.0.3: {} 3351 | 3352 | is-number-object@1.1.1: 3353 | dependencies: 3354 | call-bound: 1.0.3 3355 | has-tostringtag: 1.0.2 3356 | 3357 | is-number@7.0.0: {} 3358 | 3359 | is-promise@4.0.0: {} 3360 | 3361 | is-regex@1.2.1: 3362 | dependencies: 3363 | call-bound: 1.0.3 3364 | gopd: 1.2.0 3365 | has-tostringtag: 1.0.2 3366 | hasown: 2.0.2 3367 | 3368 | is-set@2.0.3: {} 3369 | 3370 | is-shared-array-buffer@1.0.4: 3371 | dependencies: 3372 | call-bound: 1.0.3 3373 | 3374 | is-string@1.1.1: 3375 | dependencies: 3376 | call-bound: 1.0.3 3377 | has-tostringtag: 1.0.2 3378 | 3379 | is-symbol@1.1.1: 3380 | dependencies: 3381 | call-bound: 1.0.3 3382 | has-symbols: 1.1.0 3383 | safe-regex-test: 1.1.0 3384 | 3385 | is-typed-array@1.1.15: 3386 | dependencies: 3387 | which-typed-array: 1.1.18 3388 | 3389 | is-weakmap@2.0.2: {} 3390 | 3391 | is-weakref@1.1.0: 3392 | dependencies: 3393 | call-bound: 1.0.3 3394 | 3395 | is-weakset@2.0.4: 3396 | dependencies: 3397 | call-bound: 1.0.3 3398 | get-intrinsic: 1.2.7 3399 | 3400 | isarray@1.0.0: {} 3401 | 3402 | isarray@2.0.5: {} 3403 | 3404 | isexe@2.0.0: {} 3405 | 3406 | iterator.prototype@1.1.5: 3407 | dependencies: 3408 | define-data-property: 1.1.4 3409 | es-object-atoms: 1.0.0 3410 | get-intrinsic: 1.2.7 3411 | get-proto: 1.0.1 3412 | has-symbols: 1.1.0 3413 | set-function-name: 2.0.2 3414 | 3415 | jackspeak@3.4.3: 3416 | dependencies: 3417 | '@isaacs/cliui': 8.0.2 3418 | optionalDependencies: 3419 | '@pkgjs/parseargs': 0.11.0 3420 | 3421 | jiti@1.21.7: {} 3422 | 3423 | jmespath@0.16.0: {} 3424 | 3425 | jose@4.15.9: {} 3426 | 3427 | jose@5.2.3: {} 3428 | 3429 | js-tokens@4.0.0: {} 3430 | 3431 | js-yaml@4.1.0: 3432 | dependencies: 3433 | argparse: 2.0.1 3434 | 3435 | json-buffer@3.0.1: {} 3436 | 3437 | json-schema-traverse@0.4.1: {} 3438 | 3439 | json-stable-stringify-without-jsonify@1.0.1: {} 3440 | 3441 | json5@1.0.2: 3442 | dependencies: 3443 | minimist: 1.2.8 3444 | 3445 | jsx-ast-utils@3.3.5: 3446 | dependencies: 3447 | array-includes: 3.1.8 3448 | array.prototype.flat: 1.3.3 3449 | object.assign: 4.1.7 3450 | object.values: 1.2.1 3451 | 3452 | keyv@4.5.4: 3453 | dependencies: 3454 | json-buffer: 3.0.1 3455 | 3456 | language-subtag-registry@0.3.23: {} 3457 | 3458 | language-tags@1.0.9: 3459 | dependencies: 3460 | language-subtag-registry: 0.3.23 3461 | 3462 | levn@0.4.1: 3463 | dependencies: 3464 | prelude-ls: 1.2.1 3465 | type-check: 0.4.0 3466 | 3467 | lilconfig@3.1.3: {} 3468 | 3469 | lines-and-columns@1.2.4: {} 3470 | 3471 | locate-path@6.0.0: 3472 | dependencies: 3473 | p-locate: 5.0.0 3474 | 3475 | lodash.merge@4.6.2: {} 3476 | 3477 | loose-envify@1.4.0: 3478 | dependencies: 3479 | js-tokens: 4.0.0 3480 | 3481 | lru-cache@10.4.3: {} 3482 | 3483 | lru-cache@6.0.0: 3484 | dependencies: 3485 | yallist: 4.0.0 3486 | 3487 | math-intrinsics@1.1.0: {} 3488 | 3489 | media-typer@1.1.0: {} 3490 | 3491 | merge-descriptors@2.0.0: {} 3492 | 3493 | merge2@1.4.1: {} 3494 | 3495 | micromatch@4.0.8: 3496 | dependencies: 3497 | braces: 3.0.3 3498 | picomatch: 2.3.1 3499 | 3500 | mime-db@1.54.0: {} 3501 | 3502 | mime-types@3.0.1: 3503 | dependencies: 3504 | mime-db: 1.54.0 3505 | 3506 | minimatch@3.1.2: 3507 | dependencies: 3508 | brace-expansion: 1.1.11 3509 | 3510 | minimatch@9.0.5: 3511 | dependencies: 3512 | brace-expansion: 2.0.1 3513 | 3514 | minimist@1.2.8: {} 3515 | 3516 | minipass@7.1.2: {} 3517 | 3518 | ms@2.1.3: {} 3519 | 3520 | mz@2.7.0: 3521 | dependencies: 3522 | any-promise: 1.3.0 3523 | object-assign: 4.1.1 3524 | thenify-all: 1.6.0 3525 | 3526 | nanoid@3.3.8: {} 3527 | 3528 | natural-compare@1.4.0: {} 3529 | 3530 | negotiator@1.0.0: {} 3531 | 3532 | next@15.1.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 3533 | dependencies: 3534 | '@next/env': 15.1.4 3535 | '@swc/counter': 0.1.3 3536 | '@swc/helpers': 0.5.15 3537 | busboy: 1.6.0 3538 | caniuse-lite: 1.0.30001692 3539 | postcss: 8.4.31 3540 | react: 19.0.0 3541 | react-dom: 19.0.0(react@19.0.0) 3542 | styled-jsx: 5.1.6(react@19.0.0) 3543 | optionalDependencies: 3544 | '@next/swc-darwin-arm64': 15.1.4 3545 | '@next/swc-darwin-x64': 15.1.4 3546 | '@next/swc-linux-arm64-gnu': 15.1.4 3547 | '@next/swc-linux-arm64-musl': 15.1.4 3548 | '@next/swc-linux-x64-gnu': 15.1.4 3549 | '@next/swc-linux-x64-musl': 15.1.4 3550 | '@next/swc-win32-arm64-msvc': 15.1.4 3551 | '@next/swc-win32-x64-msvc': 15.1.4 3552 | '@opentelemetry/api': 1.9.0 3553 | sharp: 0.33.5 3554 | transitivePeerDependencies: 3555 | - '@babel/core' 3556 | - babel-plugin-macros 3557 | 3558 | normalize-path@3.0.0: {} 3559 | 3560 | object-assign@4.1.1: {} 3561 | 3562 | object-hash@2.2.0: {} 3563 | 3564 | object-hash@3.0.0: {} 3565 | 3566 | object-inspect@1.13.3: {} 3567 | 3568 | object-keys@1.1.1: {} 3569 | 3570 | object.assign@4.1.7: 3571 | dependencies: 3572 | call-bind: 1.0.8 3573 | call-bound: 1.0.3 3574 | define-properties: 1.2.1 3575 | es-object-atoms: 1.0.0 3576 | has-symbols: 1.1.0 3577 | object-keys: 1.1.1 3578 | 3579 | object.entries@1.1.8: 3580 | dependencies: 3581 | call-bind: 1.0.8 3582 | define-properties: 1.2.1 3583 | es-object-atoms: 1.0.0 3584 | 3585 | object.fromentries@2.0.8: 3586 | dependencies: 3587 | call-bind: 1.0.8 3588 | define-properties: 1.2.1 3589 | es-abstract: 1.23.9 3590 | es-object-atoms: 1.0.0 3591 | 3592 | object.groupby@1.0.3: 3593 | dependencies: 3594 | call-bind: 1.0.8 3595 | define-properties: 1.2.1 3596 | es-abstract: 1.23.9 3597 | 3598 | object.values@1.2.1: 3599 | dependencies: 3600 | call-bind: 1.0.8 3601 | call-bound: 1.0.3 3602 | define-properties: 1.2.1 3603 | es-object-atoms: 1.0.0 3604 | 3605 | oidc-token-hash@5.0.3: {} 3606 | 3607 | on-finished@2.4.1: 3608 | dependencies: 3609 | ee-first: 1.1.1 3610 | 3611 | once@1.4.0: 3612 | dependencies: 3613 | wrappy: 1.0.2 3614 | 3615 | opencontrol@0.0.6: 3616 | dependencies: 3617 | '@modelcontextprotocol/sdk': 1.6.1 3618 | '@tsconfig/bun': 1.0.7 3619 | hono: 4.7.4 3620 | zod: 3.24.2 3621 | zod-to-json-schema: 3.24.3(zod@3.24.2) 3622 | transitivePeerDependencies: 3623 | - supports-color 3624 | 3625 | openid-client@5.6.4: 3626 | dependencies: 3627 | jose: 4.15.9 3628 | lru-cache: 6.0.0 3629 | object-hash: 2.2.0 3630 | oidc-token-hash: 5.0.3 3631 | 3632 | optionator@0.9.4: 3633 | dependencies: 3634 | deep-is: 0.1.4 3635 | fast-levenshtein: 2.0.6 3636 | levn: 0.4.1 3637 | prelude-ls: 1.2.1 3638 | type-check: 0.4.0 3639 | word-wrap: 1.2.5 3640 | 3641 | own-keys@1.0.1: 3642 | dependencies: 3643 | get-intrinsic: 1.2.7 3644 | object-keys: 1.1.1 3645 | safe-push-apply: 1.0.0 3646 | 3647 | p-limit@3.1.0: 3648 | dependencies: 3649 | yocto-queue: 0.1.0 3650 | 3651 | p-locate@5.0.0: 3652 | dependencies: 3653 | p-limit: 3.1.0 3654 | 3655 | package-json-from-dist@1.0.1: {} 3656 | 3657 | parent-module@1.0.1: 3658 | dependencies: 3659 | callsites: 3.1.0 3660 | 3661 | parseurl@1.3.3: {} 3662 | 3663 | path-exists@4.0.0: {} 3664 | 3665 | path-key@3.1.1: {} 3666 | 3667 | path-parse@1.0.7: {} 3668 | 3669 | path-scurry@1.11.1: 3670 | dependencies: 3671 | lru-cache: 10.4.3 3672 | minipass: 7.1.2 3673 | 3674 | path-to-regexp@8.3.0: {} 3675 | 3676 | picocolors@1.1.1: {} 3677 | 3678 | picomatch@2.3.1: {} 3679 | 3680 | pify@2.3.0: {} 3681 | 3682 | pirates@4.0.6: {} 3683 | 3684 | pkce-challenge@4.1.0: {} 3685 | 3686 | possible-typed-array-names@1.0.0: {} 3687 | 3688 | postcss-import@15.1.0(postcss@8.4.49): 3689 | dependencies: 3690 | postcss: 8.4.49 3691 | postcss-value-parser: 4.2.0 3692 | read-cache: 1.0.0 3693 | resolve: 1.22.10 3694 | 3695 | postcss-js@4.0.1(postcss@8.4.49): 3696 | dependencies: 3697 | camelcase-css: 2.0.1 3698 | postcss: 8.4.49 3699 | 3700 | postcss-load-config@4.0.2(postcss@8.4.49): 3701 | dependencies: 3702 | lilconfig: 3.1.3 3703 | yaml: 2.7.0 3704 | optionalDependencies: 3705 | postcss: 8.4.49 3706 | 3707 | postcss-nested@6.2.0(postcss@8.4.49): 3708 | dependencies: 3709 | postcss: 8.4.49 3710 | postcss-selector-parser: 6.1.2 3711 | 3712 | postcss-selector-parser@6.1.2: 3713 | dependencies: 3714 | cssesc: 3.0.0 3715 | util-deprecate: 1.0.2 3716 | 3717 | postcss-value-parser@4.2.0: {} 3718 | 3719 | postcss@8.4.31: 3720 | dependencies: 3721 | nanoid: 3.3.8 3722 | picocolors: 1.1.1 3723 | source-map-js: 1.2.1 3724 | 3725 | postcss@8.4.49: 3726 | dependencies: 3727 | nanoid: 3.3.8 3728 | picocolors: 1.1.1 3729 | source-map-js: 1.2.1 3730 | 3731 | prelude-ls@1.2.1: {} 3732 | 3733 | prettier@3.4.2: {} 3734 | 3735 | prop-types@15.8.1: 3736 | dependencies: 3737 | loose-envify: 1.4.0 3738 | object-assign: 4.1.1 3739 | react-is: 16.13.1 3740 | 3741 | proxy-addr@2.0.7: 3742 | dependencies: 3743 | forwarded: 0.2.0 3744 | ipaddr.js: 1.9.1 3745 | 3746 | punycode@1.3.2: {} 3747 | 3748 | punycode@2.3.1: {} 3749 | 3750 | qs@6.14.0: 3751 | dependencies: 3752 | side-channel: 1.1.0 3753 | 3754 | querystring@0.2.0: {} 3755 | 3756 | queue-microtask@1.2.3: {} 3757 | 3758 | range-parser@1.2.1: {} 3759 | 3760 | raw-body@3.0.1: 3761 | dependencies: 3762 | bytes: 3.1.2 3763 | http-errors: 2.0.0 3764 | iconv-lite: 0.7.0 3765 | unpipe: 1.0.0 3766 | 3767 | react-dom@19.0.0(react@19.0.0): 3768 | dependencies: 3769 | react: 19.0.0 3770 | scheduler: 0.25.0 3771 | 3772 | react-is@16.13.1: {} 3773 | 3774 | react@19.0.0: {} 3775 | 3776 | read-cache@1.0.0: 3777 | dependencies: 3778 | pify: 2.3.0 3779 | 3780 | readdirp@3.6.0: 3781 | dependencies: 3782 | picomatch: 2.3.1 3783 | 3784 | reflect.getprototypeof@1.0.10: 3785 | dependencies: 3786 | call-bind: 1.0.8 3787 | define-properties: 1.2.1 3788 | es-abstract: 1.23.9 3789 | es-errors: 1.3.0 3790 | es-object-atoms: 1.0.0 3791 | get-intrinsic: 1.2.7 3792 | get-proto: 1.0.1 3793 | which-builtin-type: 1.2.1 3794 | 3795 | regexp.prototype.flags@1.5.4: 3796 | dependencies: 3797 | call-bind: 1.0.8 3798 | define-properties: 1.2.1 3799 | es-errors: 1.3.0 3800 | get-proto: 1.0.1 3801 | gopd: 1.2.0 3802 | set-function-name: 2.0.2 3803 | 3804 | resolve-from@4.0.0: {} 3805 | 3806 | resolve-pkg-maps@1.0.0: {} 3807 | 3808 | resolve@1.22.10: 3809 | dependencies: 3810 | is-core-module: 2.16.1 3811 | path-parse: 1.0.7 3812 | supports-preserve-symlinks-flag: 1.0.0 3813 | 3814 | resolve@2.0.0-next.5: 3815 | dependencies: 3816 | is-core-module: 2.16.1 3817 | path-parse: 1.0.7 3818 | supports-preserve-symlinks-flag: 1.0.0 3819 | 3820 | reusify@1.0.4: {} 3821 | 3822 | router@2.2.0: 3823 | dependencies: 3824 | debug: 4.4.0 3825 | depd: 2.0.0 3826 | is-promise: 4.0.0 3827 | parseurl: 1.3.3 3828 | path-to-regexp: 8.3.0 3829 | transitivePeerDependencies: 3830 | - supports-color 3831 | 3832 | run-parallel@1.2.0: 3833 | dependencies: 3834 | queue-microtask: 1.2.3 3835 | 3836 | safe-array-concat@1.1.3: 3837 | dependencies: 3838 | call-bind: 1.0.8 3839 | call-bound: 1.0.3 3840 | get-intrinsic: 1.2.7 3841 | has-symbols: 1.1.0 3842 | isarray: 2.0.5 3843 | 3844 | safe-buffer@5.2.1: {} 3845 | 3846 | safe-push-apply@1.0.0: 3847 | dependencies: 3848 | es-errors: 1.3.0 3849 | isarray: 2.0.5 3850 | 3851 | safe-regex-test@1.1.0: 3852 | dependencies: 3853 | call-bound: 1.0.3 3854 | es-errors: 1.3.0 3855 | is-regex: 1.2.1 3856 | 3857 | safer-buffer@2.1.2: {} 3858 | 3859 | sax@1.2.1: {} 3860 | 3861 | scheduler@0.25.0: {} 3862 | 3863 | semver@6.3.1: {} 3864 | 3865 | semver@7.6.3: {} 3866 | 3867 | send@1.2.0: 3868 | dependencies: 3869 | debug: 4.4.0 3870 | encodeurl: 2.0.0 3871 | escape-html: 1.0.3 3872 | etag: 1.8.1 3873 | fresh: 2.0.0 3874 | http-errors: 2.0.0 3875 | mime-types: 3.0.1 3876 | ms: 2.1.3 3877 | on-finished: 2.4.1 3878 | range-parser: 1.2.1 3879 | statuses: 2.0.2 3880 | transitivePeerDependencies: 3881 | - supports-color 3882 | 3883 | serve-static@2.2.0: 3884 | dependencies: 3885 | encodeurl: 2.0.0 3886 | escape-html: 1.0.3 3887 | parseurl: 1.3.3 3888 | send: 1.2.0 3889 | transitivePeerDependencies: 3890 | - supports-color 3891 | 3892 | set-function-length@1.2.2: 3893 | dependencies: 3894 | define-data-property: 1.1.4 3895 | es-errors: 1.3.0 3896 | function-bind: 1.1.2 3897 | get-intrinsic: 1.2.7 3898 | gopd: 1.2.0 3899 | has-property-descriptors: 1.0.2 3900 | 3901 | set-function-name@2.0.2: 3902 | dependencies: 3903 | define-data-property: 1.1.4 3904 | es-errors: 1.3.0 3905 | functions-have-names: 1.2.3 3906 | has-property-descriptors: 1.0.2 3907 | 3908 | set-proto@1.0.0: 3909 | dependencies: 3910 | dunder-proto: 1.0.1 3911 | es-errors: 1.3.0 3912 | es-object-atoms: 1.0.0 3913 | 3914 | setprototypeof@1.2.0: {} 3915 | 3916 | sharp@0.33.5: 3917 | dependencies: 3918 | color: 4.2.3 3919 | detect-libc: 2.0.3 3920 | semver: 7.6.3 3921 | optionalDependencies: 3922 | '@img/sharp-darwin-arm64': 0.33.5 3923 | '@img/sharp-darwin-x64': 0.33.5 3924 | '@img/sharp-libvips-darwin-arm64': 1.0.4 3925 | '@img/sharp-libvips-darwin-x64': 1.0.4 3926 | '@img/sharp-libvips-linux-arm': 1.0.5 3927 | '@img/sharp-libvips-linux-arm64': 1.0.4 3928 | '@img/sharp-libvips-linux-s390x': 1.0.4 3929 | '@img/sharp-libvips-linux-x64': 1.0.4 3930 | '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 3931 | '@img/sharp-libvips-linuxmusl-x64': 1.0.4 3932 | '@img/sharp-linux-arm': 0.33.5 3933 | '@img/sharp-linux-arm64': 0.33.5 3934 | '@img/sharp-linux-s390x': 0.33.5 3935 | '@img/sharp-linux-x64': 0.33.5 3936 | '@img/sharp-linuxmusl-arm64': 0.33.5 3937 | '@img/sharp-linuxmusl-x64': 0.33.5 3938 | '@img/sharp-wasm32': 0.33.5 3939 | '@img/sharp-win32-ia32': 0.33.5 3940 | '@img/sharp-win32-x64': 0.33.5 3941 | optional: true 3942 | 3943 | shebang-command@2.0.0: 3944 | dependencies: 3945 | shebang-regex: 3.0.0 3946 | 3947 | shebang-regex@3.0.0: {} 3948 | 3949 | side-channel-list@1.0.0: 3950 | dependencies: 3951 | es-errors: 1.3.0 3952 | object-inspect: 1.13.3 3953 | 3954 | side-channel-map@1.0.1: 3955 | dependencies: 3956 | call-bound: 1.0.3 3957 | es-errors: 1.3.0 3958 | get-intrinsic: 1.2.7 3959 | object-inspect: 1.13.3 3960 | 3961 | side-channel-weakmap@1.0.2: 3962 | dependencies: 3963 | call-bound: 1.0.3 3964 | es-errors: 1.3.0 3965 | get-intrinsic: 1.2.7 3966 | object-inspect: 1.13.3 3967 | side-channel-map: 1.0.1 3968 | 3969 | side-channel@1.1.0: 3970 | dependencies: 3971 | es-errors: 1.3.0 3972 | object-inspect: 1.13.3 3973 | side-channel-list: 1.0.0 3974 | side-channel-map: 1.0.1 3975 | side-channel-weakmap: 1.0.2 3976 | 3977 | signal-exit@4.1.0: {} 3978 | 3979 | simple-swizzle@0.2.2: 3980 | dependencies: 3981 | is-arrayish: 0.3.2 3982 | optional: true 3983 | 3984 | source-map-js@1.2.1: {} 3985 | 3986 | sst-darwin-arm64@3.17.13: 3987 | optional: true 3988 | 3989 | sst-darwin-x64@3.17.13: 3990 | optional: true 3991 | 3992 | sst-linux-arm64@3.17.13: 3993 | optional: true 3994 | 3995 | sst-linux-x64@3.17.13: 3996 | optional: true 3997 | 3998 | sst-linux-x86@3.17.13: 3999 | optional: true 4000 | 4001 | sst-win32-arm64@3.17.13: 4002 | optional: true 4003 | 4004 | sst-win32-x64@3.17.13: 4005 | optional: true 4006 | 4007 | sst-win32-x86@3.17.13: 4008 | optional: true 4009 | 4010 | sst@3.17.13: 4011 | dependencies: 4012 | aws-sdk: 2.1692.0 4013 | aws4fetch: 1.0.18 4014 | jose: 5.2.3 4015 | opencontrol: 0.0.6 4016 | openid-client: 5.6.4 4017 | optionalDependencies: 4018 | sst-darwin-arm64: 3.17.13 4019 | sst-darwin-x64: 3.17.13 4020 | sst-linux-arm64: 3.17.13 4021 | sst-linux-x64: 3.17.13 4022 | sst-linux-x86: 3.17.13 4023 | sst-win32-arm64: 3.17.13 4024 | sst-win32-x64: 3.17.13 4025 | sst-win32-x86: 3.17.13 4026 | transitivePeerDependencies: 4027 | - supports-color 4028 | 4029 | stable-hash@0.0.4: {} 4030 | 4031 | statuses@2.0.1: {} 4032 | 4033 | statuses@2.0.2: {} 4034 | 4035 | streamsearch@1.1.0: {} 4036 | 4037 | string-width@4.2.3: 4038 | dependencies: 4039 | emoji-regex: 8.0.0 4040 | is-fullwidth-code-point: 3.0.0 4041 | strip-ansi: 6.0.1 4042 | 4043 | string-width@5.1.2: 4044 | dependencies: 4045 | eastasianwidth: 0.2.0 4046 | emoji-regex: 9.2.2 4047 | strip-ansi: 7.1.0 4048 | 4049 | string.prototype.includes@2.0.1: 4050 | dependencies: 4051 | call-bind: 1.0.8 4052 | define-properties: 1.2.1 4053 | es-abstract: 1.23.9 4054 | 4055 | string.prototype.matchall@4.0.12: 4056 | dependencies: 4057 | call-bind: 1.0.8 4058 | call-bound: 1.0.3 4059 | define-properties: 1.2.1 4060 | es-abstract: 1.23.9 4061 | es-errors: 1.3.0 4062 | es-object-atoms: 1.0.0 4063 | get-intrinsic: 1.2.7 4064 | gopd: 1.2.0 4065 | has-symbols: 1.1.0 4066 | internal-slot: 1.1.0 4067 | regexp.prototype.flags: 1.5.4 4068 | set-function-name: 2.0.2 4069 | side-channel: 1.1.0 4070 | 4071 | string.prototype.repeat@1.0.0: 4072 | dependencies: 4073 | define-properties: 1.2.1 4074 | es-abstract: 1.23.9 4075 | 4076 | string.prototype.trim@1.2.10: 4077 | dependencies: 4078 | call-bind: 1.0.8 4079 | call-bound: 1.0.3 4080 | define-data-property: 1.1.4 4081 | define-properties: 1.2.1 4082 | es-abstract: 1.23.9 4083 | es-object-atoms: 1.0.0 4084 | has-property-descriptors: 1.0.2 4085 | 4086 | string.prototype.trimend@1.0.9: 4087 | dependencies: 4088 | call-bind: 1.0.8 4089 | call-bound: 1.0.3 4090 | define-properties: 1.2.1 4091 | es-object-atoms: 1.0.0 4092 | 4093 | string.prototype.trimstart@1.0.8: 4094 | dependencies: 4095 | call-bind: 1.0.8 4096 | define-properties: 1.2.1 4097 | es-object-atoms: 1.0.0 4098 | 4099 | strip-ansi@6.0.1: 4100 | dependencies: 4101 | ansi-regex: 5.0.1 4102 | 4103 | strip-ansi@7.1.0: 4104 | dependencies: 4105 | ansi-regex: 6.1.0 4106 | 4107 | strip-bom@3.0.0: {} 4108 | 4109 | strip-json-comments@3.1.1: {} 4110 | 4111 | styled-jsx@5.1.6(react@19.0.0): 4112 | dependencies: 4113 | client-only: 0.0.1 4114 | react: 19.0.0 4115 | 4116 | sucrase@3.35.0: 4117 | dependencies: 4118 | '@jridgewell/gen-mapping': 0.3.8 4119 | commander: 4.1.1 4120 | glob: 10.4.5 4121 | lines-and-columns: 1.2.4 4122 | mz: 2.7.0 4123 | pirates: 4.0.6 4124 | ts-interface-checker: 0.1.13 4125 | 4126 | supports-color@7.2.0: 4127 | dependencies: 4128 | has-flag: 4.0.0 4129 | 4130 | supports-preserve-symlinks-flag@1.0.0: {} 4131 | 4132 | tailwindcss@3.4.17: 4133 | dependencies: 4134 | '@alloc/quick-lru': 5.2.0 4135 | arg: 5.0.2 4136 | chokidar: 3.6.0 4137 | didyoumean: 1.2.2 4138 | dlv: 1.1.3 4139 | fast-glob: 3.3.3 4140 | glob-parent: 6.0.2 4141 | is-glob: 4.0.3 4142 | jiti: 1.21.7 4143 | lilconfig: 3.1.3 4144 | micromatch: 4.0.8 4145 | normalize-path: 3.0.0 4146 | object-hash: 3.0.0 4147 | picocolors: 1.1.1 4148 | postcss: 8.4.49 4149 | postcss-import: 15.1.0(postcss@8.4.49) 4150 | postcss-js: 4.0.1(postcss@8.4.49) 4151 | postcss-load-config: 4.0.2(postcss@8.4.49) 4152 | postcss-nested: 6.2.0(postcss@8.4.49) 4153 | postcss-selector-parser: 6.1.2 4154 | resolve: 1.22.10 4155 | sucrase: 3.35.0 4156 | transitivePeerDependencies: 4157 | - ts-node 4158 | 4159 | tapable@2.2.1: {} 4160 | 4161 | thenify-all@1.6.0: 4162 | dependencies: 4163 | thenify: 3.3.1 4164 | 4165 | thenify@3.3.1: 4166 | dependencies: 4167 | any-promise: 1.3.0 4168 | 4169 | to-regex-range@5.0.1: 4170 | dependencies: 4171 | is-number: 7.0.0 4172 | 4173 | toidentifier@1.0.1: {} 4174 | 4175 | ts-api-utils@2.0.0(typescript@5.7.3): 4176 | dependencies: 4177 | typescript: 5.7.3 4178 | 4179 | ts-interface-checker@0.1.13: {} 4180 | 4181 | tsconfig-paths@3.15.0: 4182 | dependencies: 4183 | '@types/json5': 0.0.29 4184 | json5: 1.0.2 4185 | minimist: 1.2.8 4186 | strip-bom: 3.0.0 4187 | 4188 | tslib@2.8.1: {} 4189 | 4190 | type-check@0.4.0: 4191 | dependencies: 4192 | prelude-ls: 1.2.1 4193 | 4194 | type-is@2.0.1: 4195 | dependencies: 4196 | content-type: 1.0.5 4197 | media-typer: 1.1.0 4198 | mime-types: 3.0.1 4199 | 4200 | typed-array-buffer@1.0.3: 4201 | dependencies: 4202 | call-bound: 1.0.3 4203 | es-errors: 1.3.0 4204 | is-typed-array: 1.1.15 4205 | 4206 | typed-array-byte-length@1.0.3: 4207 | dependencies: 4208 | call-bind: 1.0.8 4209 | for-each: 0.3.3 4210 | gopd: 1.2.0 4211 | has-proto: 1.2.0 4212 | is-typed-array: 1.1.15 4213 | 4214 | typed-array-byte-offset@1.0.4: 4215 | dependencies: 4216 | available-typed-arrays: 1.0.7 4217 | call-bind: 1.0.8 4218 | for-each: 0.3.3 4219 | gopd: 1.2.0 4220 | has-proto: 1.2.0 4221 | is-typed-array: 1.1.15 4222 | reflect.getprototypeof: 1.0.10 4223 | 4224 | typed-array-length@1.0.7: 4225 | dependencies: 4226 | call-bind: 1.0.8 4227 | for-each: 0.3.3 4228 | gopd: 1.2.0 4229 | is-typed-array: 1.1.15 4230 | possible-typed-array-names: 1.0.0 4231 | reflect.getprototypeof: 1.0.10 4232 | 4233 | typescript@5.7.3: {} 4234 | 4235 | unbox-primitive@1.1.0: 4236 | dependencies: 4237 | call-bound: 1.0.3 4238 | has-bigints: 1.1.0 4239 | has-symbols: 1.1.0 4240 | which-boxed-primitive: 1.1.1 4241 | 4242 | undici-types@6.19.8: {} 4243 | 4244 | unpipe@1.0.0: {} 4245 | 4246 | uri-js@4.4.1: 4247 | dependencies: 4248 | punycode: 2.3.1 4249 | 4250 | url@0.10.3: 4251 | dependencies: 4252 | punycode: 1.3.2 4253 | querystring: 0.2.0 4254 | 4255 | util-deprecate@1.0.2: {} 4256 | 4257 | util@0.12.5: 4258 | dependencies: 4259 | inherits: 2.0.4 4260 | is-arguments: 1.2.0 4261 | is-generator-function: 1.1.0 4262 | is-typed-array: 1.1.15 4263 | which-typed-array: 1.1.18 4264 | 4265 | uuid@8.0.0: {} 4266 | 4267 | vary@1.1.2: {} 4268 | 4269 | which-boxed-primitive@1.1.1: 4270 | dependencies: 4271 | is-bigint: 1.1.0 4272 | is-boolean-object: 1.2.1 4273 | is-number-object: 1.1.1 4274 | is-string: 1.1.1 4275 | is-symbol: 1.1.1 4276 | 4277 | which-builtin-type@1.2.1: 4278 | dependencies: 4279 | call-bound: 1.0.3 4280 | function.prototype.name: 1.1.8 4281 | has-tostringtag: 1.0.2 4282 | is-async-function: 2.1.0 4283 | is-date-object: 1.1.0 4284 | is-finalizationregistry: 1.1.1 4285 | is-generator-function: 1.1.0 4286 | is-regex: 1.2.1 4287 | is-weakref: 1.1.0 4288 | isarray: 2.0.5 4289 | which-boxed-primitive: 1.1.1 4290 | which-collection: 1.0.2 4291 | which-typed-array: 1.1.18 4292 | 4293 | which-collection@1.0.2: 4294 | dependencies: 4295 | is-map: 2.0.3 4296 | is-set: 2.0.3 4297 | is-weakmap: 2.0.2 4298 | is-weakset: 2.0.4 4299 | 4300 | which-typed-array@1.1.18: 4301 | dependencies: 4302 | available-typed-arrays: 1.0.7 4303 | call-bind: 1.0.8 4304 | call-bound: 1.0.3 4305 | for-each: 0.3.3 4306 | gopd: 1.2.0 4307 | has-tostringtag: 1.0.2 4308 | 4309 | which@2.0.2: 4310 | dependencies: 4311 | isexe: 2.0.0 4312 | 4313 | word-wrap@1.2.5: {} 4314 | 4315 | wrap-ansi@7.0.0: 4316 | dependencies: 4317 | ansi-styles: 4.3.0 4318 | string-width: 4.2.3 4319 | strip-ansi: 6.0.1 4320 | 4321 | wrap-ansi@8.1.0: 4322 | dependencies: 4323 | ansi-styles: 6.2.1 4324 | string-width: 5.1.2 4325 | strip-ansi: 7.1.0 4326 | 4327 | wrappy@1.0.2: {} 4328 | 4329 | xml2js@0.6.2: 4330 | dependencies: 4331 | sax: 1.2.1 4332 | xmlbuilder: 11.0.1 4333 | 4334 | xmlbuilder@11.0.1: {} 4335 | 4336 | yallist@4.0.0: {} 4337 | 4338 | yaml@2.7.0: {} 4339 | 4340 | yocto-queue@0.1.0: {} 4341 | 4342 | zod-to-json-schema@3.24.3(zod@3.24.2): 4343 | dependencies: 4344 | zod: 3.24.2 4345 | 4346 | zod@3.24.2: {} 4347 | --------------------------------------------------------------------------------