├── .gitignore ├── LICENSE ├── README.md ├── bin.js ├── images └── claude.png ├── index.ts ├── package-lock.json ├── package.json └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | node_modules/ 3 | npm-debug.log 4 | yarn-debug.log 5 | yarn-error.log 6 | 7 | # Build output 8 | dist/ 9 | build/ 10 | 11 | # Environment variables 12 | .env 13 | .env.local 14 | .env.*.local 15 | 16 | # GCP credentials 17 | credentials.json 18 | keyfile.json 19 | *.pem 20 | 21 | # IDE 22 | .idea/ 23 | .vscode/ 24 | *.swp 25 | *.swo 26 | 27 | # OS 28 | .DS_Store 29 | Thumbs.db 30 | 31 | # Logs 32 | logs/ 33 | *.log 34 | 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Oluwapelumi Oluwaseyi(Eniayomi) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GCP MCP 2 | 3 | A Model Context Protocol (MCP) server that enables AI assistants like Claude to interact with your Google Cloud Platform environment. This allows for natural language querying and management of your GCP resources during conversations. 4 | 5 | ![GCP MCP Demo](images/claude.png) 6 | 7 | ## Features 8 | 9 | * 🔍 Query and modify GCP resources using natural language 10 | * ☁️ Support for multiple GCP projects 11 | * 🌐 Multi-region support 12 | * 🔐 Secure credential handling (no credentials are exposed to external services) 13 | * 🏃‍♂️ Local execution with your GCP credentials 14 | * 🔄 Automatic retries for improved reliability 15 | 16 | ## Prerequisites 17 | 18 | * Node.js 19 | * Claude Desktop/Cursor/Windsurf 20 | * GCP credentials configured locally (application default credentials) 21 | 22 | ## Installation 23 | 24 | 1. Clone the repository: 25 | ```bash 26 | git clone https://github.com/eniayomi/gcp-mcp 27 | cd gcp-mcp 28 | ``` 29 | 30 | 2. Install dependencies: 31 | ```bash 32 | npm install 33 | ``` 34 | 35 | ## Configuration 36 | 37 | ### Claude Desktop 38 | 39 | 1. Open Claude desktop app and go to Settings -> Developer -> Edit Config 40 | 41 | 2. Add the following entry to your `claude_desktop_config.json`: 42 | 43 | via npm: 44 | ```json 45 | { 46 | "mcpServers": { 47 | "gcp": { 48 | "command": "sh", 49 | "args": ["-c", "npx -y gcp-mcp"] 50 | } 51 | } 52 | } 53 | ``` 54 | 55 | If you installed from source: 56 | ```json 57 | { 58 | "mcpServers": { 59 | "gcp": { 60 | "command": "npm", 61 | "args": [ 62 | "--silent", 63 | "--prefix", 64 | "/path/to/gcp-mcp", 65 | "start" 66 | ] 67 | } 68 | } 69 | } 70 | ``` 71 | 72 | Replace `/path/to/gcp-mcp` with the actual path to your project directory if using source installation. 73 | 74 | ### Cursor 75 | 76 | 1. Open Cursor and go to Settings (⌘,) 77 | 2. Navigate to AI -> Model Context Protocol 78 | 3. Add a new MCP configuration: 79 | ```json 80 | { 81 | "gcp": { 82 | "command": "npx -y gcp-mcp" 83 | } 84 | } 85 | ``` 86 | 87 | ### Windsurf 88 | 89 | 1. Open `~/.windsurf/config.json` (create if it doesn't exist) 90 | 2. Add the MCP configuration: 91 | ```json 92 | { 93 | "mcpServers": { 94 | "gcp": { 95 | "command": "npx -y gcp-mcp" 96 | } 97 | } 98 | } 99 | ``` 100 | 101 | ### GCP Setup 102 | 103 | 1. Set up GCP credentials: 104 | - Set up application default credentials using `gcloud auth application-default login` 105 | 106 | 2. Refresh your AI assistant (Claude Desktop/Cursor/Windsurf) 107 | 108 | ## Usage 109 | 110 | Start by selecting a project or asking questions like: 111 | * "List all GCP projects I have access to" 112 | * "Show me all Cloud SQL instances in project X" 113 | * "What's my current billing status?" 114 | * "Show me the logs from my Cloud Run services" 115 | * "List all GKE clusters in us-central1" 116 | * "Show me all Cloud Storage buckets in project X" 117 | * "What Cloud Functions are deployed in us-central1?" 118 | * "List all Cloud Run services" 119 | * "Show me BigQuery datasets and tables" 120 | 121 | ## Available Tools 122 | 123 | 1. `run-gcp-code`: Execute GCP API calls using TypeScript code 124 | 2. `list-projects`: List all accessible GCP projects 125 | 3. `select-project`: Select a GCP project for subsequent operations 126 | 4. `get-billing-info`: Get billing information for the current project 127 | 5. `get-cost-forecast`: Get cost forecast for the current project 128 | 6. `get-billing-budget`: Get billing budgets for the current project 129 | 7. `list-gke-clusters`: List all GKE clusters in the current project 130 | 8. `list-sql-instances`: List all Cloud SQL instances in the current project 131 | 9. `get-logs`: Get Cloud Logging entries for the current project 132 | 133 | ## Example Interactions 134 | 135 | 1. List available projects: 136 | ``` 137 | List all GCP projects I have access to 138 | ``` 139 | 140 | 2. Select a project: 141 | ``` 142 | Use project my-project-id 143 | ``` 144 | 145 | 3. Check billing status: 146 | ``` 147 | What's my current billing status? 148 | ``` 149 | 150 | 4. View logs: 151 | ``` 152 | Show me the last 10 log entries from my project 153 | ``` 154 | 155 | ## Supported Services 156 | 157 | * Google Compute Engine 158 | * Cloud Storage 159 | * Cloud Functions 160 | * Cloud Run 161 | * BigQuery 162 | * Cloud SQL 163 | * Google Kubernetes Engine (GKE) 164 | * Cloud Logging 165 | * Cloud Billing 166 | * Resource Manager 167 | * More coming soon... 168 | 169 | ## Troubleshooting 170 | 171 | To see logs: 172 | ```bash 173 | tail -n 50 -f ~/Library/Logs/Claude/mcp-server-gcp.log 174 | ``` 175 | 176 | Common issues: 177 | 1. Authentication errors: Ensure you've run `gcloud auth application-default login` 178 | 2. Permission errors: Check IAM roles for your account 179 | 3. API errors: Verify that required APIs are enabled in your project 180 | 181 | ## Contributing 182 | 183 | Contributions are welcome! Please feel free to submit a Pull Request. 184 | 185 | ## License 186 | 187 | MIT -------------------------------------------------------------------------------- /bin.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require('tsx/cjs'); 4 | require('./index.ts'); -------------------------------------------------------------------------------- /images/claude.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eniayomi/gcp-mcp/acfc8c173e9a53980231c4a1eccef34fc438c6f4/images/claude.png -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | import { Project, SyntaxKind } from "ts-morph"; 2 | import { createContext, runInContext } from "vm"; 3 | import { Server } from "@modelcontextprotocol/sdk/server/index.js"; 4 | import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; 5 | import { 6 | CallToolRequestSchema, 7 | ListToolsRequestSchema, 8 | CallToolRequest 9 | } from "@modelcontextprotocol/sdk/types"; 10 | import { z } from "zod"; 11 | import { GoogleAuth } from 'google-auth-library'; 12 | import { InstancesClient } from '@google-cloud/compute'; 13 | import { Storage } from '@google-cloud/storage'; 14 | import { CloudFunctionsServiceClient } from '@google-cloud/functions'; 15 | import { ServicesClient } from '@google-cloud/run'; 16 | import { BigQuery } from '@google-cloud/bigquery'; 17 | import { ProjectsClient } from '@google-cloud/resource-manager'; 18 | import { CloudBillingClient } from '@google-cloud/billing'; 19 | import { BudgetServiceClient } from '@google-cloud/billing-budgets'; 20 | import { ClusterManagerClient } from '@google-cloud/container'; 21 | import { Logging, Entry, Log } from '@google-cloud/logging'; 22 | import { SqlInstancesServiceClient } from '@google-cloud/sql'; 23 | 24 | const codePrompt = `Your job is to answer questions about GCP environment by writing Javascript/TypeScript code using Google Cloud Client Libraries. The code must adhere to a few rules: 25 | - Must use promises and async/await 26 | - Think step-by-step before writing the code, approach it logically 27 | - Must be written in TypeScript using official Google Cloud client libraries 28 | - Avoid hardcoded values like project IDs 29 | - Code written should be as parallel as possible enabling the fastest and most optimal execution 30 | - Code should handle errors gracefully, especially when doing multiple API calls 31 | - Each error should be handled and logged with a reason, script should continue to run despite errors 32 | - Data returned from GCP APIs must be returned as JSON containing only the minimal amount of data needed to answer the question 33 | - All extra data must be filtered out 34 | - Code MUST "return" a value: string, number, boolean or JSON object 35 | - If code does not return anything, it will be considered as FAILED 36 | - Whenever tool/function call fails, retry it 3 times before giving up 37 | - When listing resources, ensure pagination is handled correctly 38 | - Do not include any comments in the code 39 | - Try to write code that returns as few data as possible to answer without any additional processing required 40 | Be concise, professional and to the point. Do not give generic advice, always reply with detailed & contextual data sourced from the current GCP environment.`; 41 | 42 | // Add error handlers for uncaught exceptions and unhandled rejections 43 | process.on('uncaughtException', (error) => { 44 | console.error('Uncaught Exception:', error); 45 | process.exit(1); 46 | }); 47 | 48 | process.on('unhandledRejection', (reason, promise) => { 49 | console.error('Unhandled Rejection at:', promise, 'reason:', reason); 50 | process.exit(1); 51 | }); 52 | 53 | const server = new Server( 54 | { 55 | name: "gcp-mcp", 56 | version: "1.0.0", 57 | }, 58 | { 59 | capabilities: { 60 | tools: {}, 61 | }, 62 | } 63 | ); 64 | 65 | let selectedProject: string | null = null; 66 | let selectedProjectCredentials: any = null; 67 | let selectedRegion: string = "us-central1"; 68 | 69 | server.setRequestHandler(ListToolsRequestSchema, async () => { 70 | return { 71 | tools: [ 72 | { 73 | name: "run-gcp-code", 74 | description: "Run GCP code", 75 | inputSchema: { 76 | type: "object", 77 | properties: { 78 | reasoning: { 79 | type: "string", 80 | description: "The reasoning behind the code", 81 | }, 82 | code: { 83 | type: "string", 84 | description: codePrompt, 85 | }, 86 | projectId: { 87 | type: "string", 88 | description: "GCP project ID to use", 89 | }, 90 | region: { 91 | type: "string", 92 | description: "Region to use (if not provided, us-central1 is used)", 93 | }, 94 | }, 95 | required: ["reasoning", "code"], 96 | }, 97 | }, 98 | { 99 | name: "list-projects", 100 | description: "List all GCP projects accessible with current credentials", 101 | inputSchema: { 102 | type: "object", 103 | properties: {}, 104 | required: [], 105 | }, 106 | }, 107 | { 108 | name: "select-project", 109 | description: "Selects GCP project to use for subsequent interactions", 110 | inputSchema: { 111 | type: "object", 112 | properties: { 113 | projectId: { 114 | type: "string", 115 | description: "ID of the GCP project to select", 116 | }, 117 | region: { 118 | type: "string", 119 | description: "Region to use (if not provided, us-central1 is used)", 120 | }, 121 | }, 122 | required: ["projectId"], 123 | }, 124 | }, 125 | { 126 | name: "get-billing-info", 127 | description: "Get billing information for the current project", 128 | inputSchema: { 129 | type: "object", 130 | properties: { 131 | projectId: { 132 | type: "string", 133 | description: "Project ID to get billing info for (defaults to selected project)", 134 | }, 135 | }, 136 | required: [], 137 | }, 138 | }, 139 | { 140 | name: "get-cost-forecast", 141 | description: "Get cost forecast for the current project", 142 | inputSchema: { 143 | type: "object", 144 | properties: { 145 | projectId: { 146 | type: "string", 147 | description: "Project ID to get forecast for (defaults to selected project)", 148 | }, 149 | months: { 150 | type: "number", 151 | description: "Number of months to forecast (default: 3)", 152 | }, 153 | }, 154 | required: [], 155 | }, 156 | }, 157 | { 158 | name: "get-billing-budget", 159 | description: "Get billing budgets for the current project", 160 | inputSchema: { 161 | type: "object", 162 | properties: { 163 | projectId: { 164 | type: "string", 165 | description: "Project ID to get budgets for (defaults to selected project)", 166 | }, 167 | }, 168 | required: [], 169 | }, 170 | }, 171 | { 172 | name: "list-gke-clusters", 173 | description: "List all GKE clusters in the current project", 174 | inputSchema: { 175 | type: "object", 176 | properties: { 177 | location: { 178 | type: "string", 179 | description: "Location (region or zone) to list clusters from (defaults to all locations)", 180 | } 181 | }, 182 | required: [], 183 | }, 184 | }, 185 | { 186 | name: "list-sql-instances", 187 | description: "List all Cloud SQL instances in the current project", 188 | inputSchema: { 189 | type: "object", 190 | properties: {}, 191 | required: [], 192 | }, 193 | }, 194 | { 195 | name: "get-logs", 196 | description: "Get Cloud Logging entries for the current project", 197 | inputSchema: { 198 | type: "object", 199 | properties: { 200 | filter: { 201 | type: "string", 202 | description: "Filter for the log entries (see Cloud Logging query syntax)", 203 | }, 204 | pageSize: { 205 | type: "number", 206 | description: "Maximum number of entries to return (default: 10)", 207 | } 208 | }, 209 | required: [], 210 | }, 211 | } 212 | ], 213 | }; 214 | }); 215 | 216 | const RunGCPCodeSchema = z.object({ 217 | reasoning: z.string(), 218 | code: z.string(), 219 | projectId: z.string().optional(), 220 | region: z.string().optional(), 221 | }); 222 | 223 | const SelectProjectSchema = z.object({ 224 | projectId: z.string(), 225 | region: z.string().optional(), 226 | }); 227 | 228 | const GetBillingInfoSchema = z.object({ 229 | projectId: z.string().optional(), 230 | }); 231 | 232 | const GetCostForecastSchema = z.object({ 233 | projectId: z.string().optional(), 234 | months: z.number().optional(), 235 | }); 236 | 237 | const GetBillingBudgetSchema = z.object({ 238 | projectId: z.string().optional(), 239 | }); 240 | 241 | const ListGKEClustersSchema = z.object({ 242 | location: z.string().optional(), 243 | }); 244 | 245 | const GetLogsSchema = z.object({ 246 | filter: z.string().optional(), 247 | pageSize: z.number().optional(), 248 | }); 249 | 250 | interface GKECluster { 251 | name: string | null; 252 | location: string | null; 253 | status: string | null; 254 | currentNodeCount: number | null; 255 | currentMasterVersion: string | null; 256 | } 257 | 258 | interface SQLInstance { 259 | name: string | null; 260 | databaseVersion: string | null; 261 | state: string | null; 262 | region: string | null; 263 | } 264 | 265 | // Add retry utility function 266 | const retry = async (fn: () => Promise, retries = 3): Promise => { 267 | try { 268 | return await fn(); 269 | } catch (error) { 270 | if (retries > 0) { 271 | console.error(`Operation failed, retrying... (${retries} attempts left)`); 272 | await new Promise(resolve => setTimeout(resolve, 1000)); 273 | return retry(fn, retries - 1); 274 | } 275 | throw error; 276 | } 277 | }; 278 | 279 | // Initialize auth client with retry 280 | const initializeAuth = async () => { 281 | try { 282 | const auth = new GoogleAuth({ 283 | scopes: ['https://www.googleapis.com/auth/cloud-platform'] 284 | }); 285 | return await retry(async () => await auth.getClient()); 286 | } catch (error) { 287 | console.error('Failed to initialize authentication:', error); 288 | throw error; 289 | } 290 | }; 291 | 292 | // Update project selection with better error handling 293 | const selectProject = async (projectId: string, region?: string) => { 294 | try { 295 | selectedProject = projectId; 296 | selectedRegion = region || "us-central1"; 297 | selectedProjectCredentials = await initializeAuth(); 298 | return true; 299 | } catch (error) { 300 | console.error('Failed to select project:', error); 301 | selectedProject = null; 302 | selectedProjectCredentials = null; 303 | throw error; 304 | } 305 | }; 306 | 307 | // Add documentation for available clients and example usage 308 | const gcpClientDocs = ` 309 | Available clients and their usage: 310 | 311 | 1. compute: InstancesClient 312 | Example: const [instances] = await compute.list({project: selectedProject}); 313 | 314 | 2. storage: Storage 315 | Example: const [buckets] = await storage.getBuckets(); 316 | 317 | 3. functions: CloudFunctionsServiceClient 318 | Example: const [functions] = await functions.listFunctions({parent: \`projects/\${selectedProject}/locations/-\`}); 319 | 320 | 4. run: ServicesClient 321 | Example: const [services] = await run.listServices({parent: \`projects/\${selectedProject}/locations/-\`}); 322 | 323 | 5. bigquery: BigQuery 324 | Example: const [datasets] = await bigquery.getDatasets(); 325 | 326 | 6. resourceManager: ProjectsClient 327 | Example: const [project] = await resourceManager.getProject({name: \`projects/\${selectedProject}\`}); 328 | 329 | 7. container: ClusterManagerClient 330 | Example: const [clusters] = await container.listClusters({parent: \`projects/\${selectedProject}/locations/-\`}); 331 | 332 | 8. logging: Logging 333 | Example: const [entries] = await logging.getEntries({pageSize: 10}); 334 | 335 | 9. sql: SqlInstancesServiceClient 336 | Example: const [instances] = await sql.list({project: selectedProject}); 337 | `; 338 | 339 | // Handle tool execution 340 | server.setRequestHandler(CallToolRequestSchema, async (request: CallToolRequest) => { 341 | const { name, arguments: args } = request.params; 342 | 343 | try { 344 | const auth = new GoogleAuth({ 345 | scopes: ['https://www.googleapis.com/auth/cloud-platform'] 346 | }); 347 | 348 | if (name === "run-gcp-code") { 349 | const { reasoning, code, projectId, region } = RunGCPCodeSchema.parse(args); 350 | 351 | if (!selectedProject && !projectId) { 352 | const projects = await listAvailableProjects(); 353 | return createTextResponse( 354 | `Please select a project first using the 'select-project' tool! Available projects: ${projects.join(", ")}` 355 | ); 356 | } 357 | 358 | if (projectId) { 359 | selectedProjectCredentials = await auth.getClient(); 360 | selectedProject = projectId; 361 | selectedRegion = region || "us-central1"; 362 | } 363 | 364 | // Initialize context with better error handling and type safety 365 | const context = { 366 | selectedProject, 367 | selectedRegion, 368 | compute: new InstancesClient({ projectId: selectedProject || undefined }), 369 | storage: new Storage({ projectId: selectedProject || undefined }), 370 | functions: new CloudFunctionsServiceClient({ projectId: selectedProject || undefined }), 371 | run: new ServicesClient({ projectId: selectedProject || undefined }), 372 | bigquery: new BigQuery({ projectId: selectedProject || undefined }), 373 | resourceManager: new ProjectsClient({ projectId: selectedProject || undefined }), 374 | container: new ClusterManagerClient({ projectId: selectedProject || undefined }), 375 | logging: new Logging({ projectId: selectedProject || undefined }), 376 | sql: new SqlInstancesServiceClient({ projectId: selectedProject || undefined }), 377 | // Add helper functions 378 | retry: async (fn: () => Promise, retries = 3): Promise => { 379 | try { 380 | return await fn(); 381 | } catch (error) { 382 | if (retries > 0) { 383 | console.error(`Operation failed, retrying... (${retries} attempts left)`); 384 | await new Promise(resolve => setTimeout(resolve, 1000)); 385 | return context.retry(fn, retries - 1); 386 | } 387 | throw error; 388 | } 389 | }, 390 | // Add documentation 391 | help: () => gcpClientDocs 392 | }; 393 | 394 | try { 395 | const wrappedCode = wrapUserCode(code); 396 | const wrappedIIFECode = `(async function() { return (async () => { ${wrappedCode} })(); })()`; 397 | const result = await runInContext(wrappedIIFECode, createContext(context)); 398 | 399 | return createTextResponse(JSON.stringify(result, null, 2)); 400 | } catch (error: any) { 401 | console.error('Error executing GCP code:', error); 402 | return createTextResponse(`Error executing GCP code: ${error.message}\n\nAvailable clients and their usage:\n${gcpClientDocs}`); 403 | } 404 | } else if (name === "list-projects") { 405 | const projects = await listAvailableProjects(); 406 | return createTextResponse(JSON.stringify({ projects })); 407 | } else if (name === "select-project") { 408 | const { projectId, region } = SelectProjectSchema.parse(args); 409 | selectedProjectCredentials = await auth.getClient(); 410 | selectedProject = projectId; 411 | selectedRegion = region || "us-central1"; 412 | return createTextResponse("Project selected successfully!"); 413 | } else if (name === "get-billing-info") { 414 | const { projectId } = GetBillingInfoSchema.parse(args); 415 | const targetProject = projectId || selectedProject; 416 | 417 | if (!targetProject) { 418 | return createTextResponse("No project selected. Please select a project first."); 419 | } 420 | 421 | try { 422 | const billingClient = new CloudBillingClient(); 423 | const [billingInfo] = await billingClient.getProjectBillingInfo({ 424 | name: `projects/${targetProject}` 425 | }); 426 | 427 | if (!billingInfo.billingEnabled) { 428 | return createTextResponse("Billing is not enabled for this project."); 429 | } 430 | 431 | const billingAccount = billingInfo.billingAccountName; 432 | if (!billingAccount) { 433 | return createTextResponse("No billing account associated with this project."); 434 | } 435 | 436 | // Get billing account details 437 | const [account] = await billingClient.getBillingAccount({ 438 | name: billingAccount 439 | }); 440 | 441 | return createTextResponse(JSON.stringify({ 442 | projectId: targetProject, 443 | billingEnabled: billingInfo.billingEnabled, 444 | billingAccountName: billingAccount, 445 | displayName: account.displayName, 446 | open: account.open 447 | }, null, 2)); 448 | } catch (error: any) { 449 | console.error('Error getting billing info:', error); 450 | if (error.code === 7) { 451 | return createTextResponse("Error: Cloud Billing API is not enabled. Please enable it in the Google Cloud Console."); 452 | } 453 | return createTextResponse(`Error getting billing info: ${error.message}`); 454 | } 455 | } else if (name === "get-cost-forecast") { 456 | const { projectId, months = 3 } = GetCostForecastSchema.parse(args); 457 | const targetProject = projectId || selectedProject; 458 | 459 | if (!targetProject) { 460 | return createTextResponse("No project selected. Please select a project first."); 461 | } 462 | 463 | try { 464 | const billingClient = new CloudBillingClient(); 465 | const [billingInfo] = await billingClient.getProjectBillingInfo({ 466 | name: `projects/${targetProject}` 467 | }); 468 | 469 | if (!billingInfo.billingEnabled) { 470 | return createTextResponse("Billing is not enabled for this project."); 471 | } 472 | 473 | const billingAccount = billingInfo.billingAccountName; 474 | if (!billingAccount) { 475 | return createTextResponse("No billing account associated with this project."); 476 | } 477 | 478 | // Get cost forecast using Cloud Billing API 479 | const [costInfo] = await billingClient.getProjectBillingInfo({ 480 | name: `projects/${targetProject}` 481 | }); 482 | 483 | return createTextResponse(JSON.stringify({ 484 | projectId: targetProject, 485 | billingAccount: billingAccount, 486 | billingEnabled: costInfo.billingEnabled, 487 | currency: 'USD' 488 | }, null, 2)); 489 | } catch (error: any) { 490 | console.error('Error getting cost forecast:', error); 491 | if (error.code === 7) { 492 | return createTextResponse("Error: Cloud Billing API is not enabled. Please enable it in the Google Cloud Console."); 493 | } 494 | return createTextResponse(`Error getting cost forecast: ${error.message}`); 495 | } 496 | } else if (name === "get-billing-budget") { 497 | const { projectId } = GetBillingBudgetSchema.parse(args); 498 | const targetProject = projectId || selectedProject; 499 | 500 | if (!targetProject) { 501 | return createTextResponse("No project selected. Please select a project first."); 502 | } 503 | 504 | try { 505 | const billingClient = new CloudBillingClient(); 506 | const [billingInfo] = await billingClient.getProjectBillingInfo({ 507 | name: `projects/${targetProject}` 508 | }); 509 | 510 | if (!billingInfo.billingEnabled) { 511 | return createTextResponse("Billing is not enabled for this project."); 512 | } 513 | 514 | const billingAccount = billingInfo.billingAccountName; 515 | if (!billingAccount) { 516 | return createTextResponse("No billing account associated with this project."); 517 | } 518 | 519 | // Use the BudgetServiceClient to list budgets 520 | const budgetClient = new BudgetServiceClient(); 521 | const [budgets] = await budgetClient.listBudgets({ 522 | parent: billingAccount 523 | }); 524 | 525 | interface Budget { 526 | name: string | null; 527 | displayName: string | null; 528 | amount: { 529 | units: string | null; 530 | currencyCode: string | null; 531 | }; 532 | thresholdRules: Array<{ 533 | thresholdPercent: number | null; 534 | spendBasis: string | null; 535 | }>; 536 | } 537 | 538 | const formattedBudgets = budgets.map((budget: any) => ({ 539 | name: budget.name ?? null, 540 | displayName: budget.displayName ?? null, 541 | amount: budget.amount ? { 542 | units: budget.amount.units ?? null, 543 | currencyCode: budget.amount.currencyCode ?? null 544 | } : null, 545 | thresholdRules: budget.thresholdRules?.map((rule: any) => ({ 546 | thresholdPercent: rule.thresholdPercent ?? null, 547 | spendBasis: rule.spendBasis ?? null 548 | })) ?? [] 549 | })); 550 | 551 | return createTextResponse(JSON.stringify({ 552 | projectId: targetProject, 553 | billingAccount: billingAccount, 554 | budgets: formattedBudgets 555 | }, null, 2)); 556 | } catch (error: any) { 557 | console.error('Error getting billing budgets:', error); 558 | if (error.code === 7) { 559 | return createTextResponse("Error: Cloud Billing API or Cloud Billing Budgets API is not enabled. Please enable it in the Google Cloud Console."); 560 | } 561 | return createTextResponse(`Error getting billing budgets: ${error.message}`); 562 | } 563 | } else if (name === "list-gke-clusters") { 564 | const { location } = ListGKEClustersSchema.parse(args); 565 | 566 | if (!selectedProject) { 567 | return createTextResponse("No project selected. Please select a project first."); 568 | } 569 | 570 | try { 571 | const containerClient = new ClusterManagerClient(); 572 | const parent = location 573 | ? `projects/${selectedProject}/locations/${location}` 574 | : `projects/${selectedProject}/locations/-`; 575 | 576 | const [clusters] = await containerClient.listClusters({ parent }); 577 | 578 | return createTextResponse(JSON.stringify({ 579 | clusters: clusters.clusters?.map((cluster: any) => ({ 580 | name: cluster.name || null, 581 | location: cluster.location || null, 582 | status: cluster.status || null, 583 | nodeCount: cluster.currentNodeCount || null, 584 | k8sVersion: cluster.currentMasterVersion || null 585 | })) || [] 586 | }, null, 2)); 587 | } catch (error: any) { 588 | console.error('Error listing GKE clusters:', error); 589 | return createTextResponse(`Error listing GKE clusters: ${error.message}`); 590 | } 591 | } else if (name === "list-sql-instances") { 592 | if (!selectedProject) { 593 | return createTextResponse("No project selected. Please select a project first."); 594 | } 595 | 596 | try { 597 | const sqlClient = new SqlInstancesServiceClient({ 598 | fallback: 'rest' // Use HTTP/1.1 fallback mode instead of gRPC 599 | }); 600 | 601 | const request = { 602 | project: selectedProject 603 | }; 604 | 605 | const [response] = await sqlClient.list(request); 606 | 607 | return createTextResponse(JSON.stringify({ 608 | instances: (response?.items || []).map(instance => ({ 609 | name: instance.name || null, 610 | databaseVersion: instance.databaseVersion || null, 611 | state: instance.state || null, 612 | region: instance.region || null 613 | })) 614 | }, null, 2)); 615 | } catch (error: any) { 616 | console.error('Error listing SQL instances:', error); 617 | return createTextResponse(`Error listing SQL instances: ${error.message}`); 618 | } 619 | } else if (name === "get-logs") { 620 | const { filter, pageSize = 10 } = GetLogsSchema.parse(args); 621 | 622 | if (!selectedProject) { 623 | return createTextResponse("No project selected. Please select a project first."); 624 | } 625 | 626 | try { 627 | const logging = new Logging({ 628 | projectId: selectedProject 629 | }); 630 | const [entries] = await logging.getEntries({ 631 | pageSize, 632 | filter: filter || undefined, 633 | orderBy: 'timestamp desc' 634 | }); 635 | 636 | return createTextResponse(JSON.stringify({ 637 | entries: entries.map((entry: Entry) => ({ 638 | timestamp: entry.metadata.timestamp, 639 | severity: entry.metadata.severity, 640 | resource: entry.metadata.resource, 641 | textPayload: entry.data, 642 | jsonPayload: typeof entry.data === 'object' ? entry.data : null 643 | })) 644 | }, null, 2)); 645 | } catch (error: any) { 646 | console.error('Error getting logs:', error); 647 | return createTextResponse(`Error getting logs: ${error.message}`); 648 | } 649 | } else { 650 | throw new Error(`Unknown tool: ${name}`); 651 | } 652 | } catch (error: any) { 653 | console.error('Error:', error); 654 | return createTextResponse(`Error: ${error.message}`); 655 | } 656 | }); 657 | 658 | function wrapUserCode(userCode: string) { 659 | const project = new Project({ 660 | useInMemoryFileSystem: true, 661 | }); 662 | const sourceFile = project.createSourceFile("userCode.ts", userCode); 663 | const lastStatement = sourceFile.getStatements().pop(); 664 | 665 | if ( 666 | lastStatement && 667 | lastStatement.getKind() === SyntaxKind.ExpressionStatement 668 | ) { 669 | const returnStatement = lastStatement.asKind(SyntaxKind.ExpressionStatement); 670 | if (returnStatement) { 671 | const expression = returnStatement.getExpression(); 672 | sourceFile.addStatements(`return ${expression.getText()};`); 673 | returnStatement.remove(); 674 | } 675 | } 676 | 677 | return sourceFile.getFullText(); 678 | } 679 | 680 | async function listAvailableProjects(): Promise { 681 | const projectsClient = new ProjectsClient(); 682 | 683 | try { 684 | const [projects] = await projectsClient.searchProjects(); 685 | return projects.map((p: any) => JSON.stringify(p)); 686 | } catch (error) { 687 | console.error('Error listing projects:', error); 688 | return []; 689 | } 690 | } 691 | 692 | // Initialize transport with error handling 693 | const transport = new StdioServerTransport(); 694 | 695 | // Wrap server connection in async function for better error handling 696 | async function startServer() { 697 | try { 698 | await server.connect(transport); 699 | console.error("GCP MCP Server running on stdio"); 700 | } catch (error) { 701 | console.error("Failed to start GCP MCP Server:", error); 702 | process.exit(1); 703 | } 704 | } 705 | 706 | // Start the server 707 | startServer(); 708 | 709 | const createTextResponse = (text: string) => ({ 710 | content: [{ type: "text", text }], 711 | }); -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gcp-mcp", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "gcp-mcp", 9 | "version": "1.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@google-cloud/bigquery": "^7.9.2", 13 | "@google-cloud/billing": "^4.6.0", 14 | "@google-cloud/billing-budgets": "^4.3.0", 15 | "@google-cloud/compute": "^4.12.0", 16 | "@google-cloud/container": "^5.19.0", 17 | "@google-cloud/functions": "^3.6.1", 18 | "@google-cloud/logging": "^11.2.0", 19 | "@google-cloud/resource-manager": "^5.3.1", 20 | "@google-cloud/run": "^1.5.1", 21 | "@google-cloud/sql": "^0.19.1", 22 | "@google-cloud/storage": "^7.15.0", 23 | "@modelcontextprotocol/sdk": "^1.6.1", 24 | "google-auth-library": "^9.0.0", 25 | "googleapis": "^146.0.0", 26 | "ts-morph": "^24.0.0", 27 | "tsx": "^4.19.2", 28 | "zod": "^3.24.1" 29 | }, 30 | "bin": { 31 | "gcp-mcp": "bin.js" 32 | }, 33 | "devDependencies": { 34 | "@types/node": "^22.10.2", 35 | "tslib": "^2.8.1", 36 | "typescript": "^5.7.2" 37 | } 38 | }, 39 | "node_modules/@babel/helper-string-parser": { 40 | "version": "7.25.9", 41 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", 42 | "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", 43 | "license": "MIT", 44 | "engines": { 45 | "node": ">=6.9.0" 46 | } 47 | }, 48 | "node_modules/@babel/helper-validator-identifier": { 49 | "version": "7.25.9", 50 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", 51 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", 52 | "license": "MIT", 53 | "engines": { 54 | "node": ">=6.9.0" 55 | } 56 | }, 57 | "node_modules/@babel/parser": { 58 | "version": "7.26.9", 59 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", 60 | "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", 61 | "license": "MIT", 62 | "dependencies": { 63 | "@babel/types": "^7.26.9" 64 | }, 65 | "bin": { 66 | "parser": "bin/babel-parser.js" 67 | }, 68 | "engines": { 69 | "node": ">=6.0.0" 70 | } 71 | }, 72 | "node_modules/@babel/types": { 73 | "version": "7.26.9", 74 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", 75 | "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", 76 | "license": "MIT", 77 | "dependencies": { 78 | "@babel/helper-string-parser": "^7.25.9", 79 | "@babel/helper-validator-identifier": "^7.25.9" 80 | }, 81 | "engines": { 82 | "node": ">=6.9.0" 83 | } 84 | }, 85 | "node_modules/@esbuild/aix-ppc64": { 86 | "version": "0.25.0", 87 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", 88 | "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", 89 | "cpu": [ 90 | "ppc64" 91 | ], 92 | "license": "MIT", 93 | "optional": true, 94 | "os": [ 95 | "aix" 96 | ], 97 | "engines": { 98 | "node": ">=18" 99 | } 100 | }, 101 | "node_modules/@esbuild/android-arm": { 102 | "version": "0.25.0", 103 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", 104 | "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", 105 | "cpu": [ 106 | "arm" 107 | ], 108 | "license": "MIT", 109 | "optional": true, 110 | "os": [ 111 | "android" 112 | ], 113 | "engines": { 114 | "node": ">=18" 115 | } 116 | }, 117 | "node_modules/@esbuild/android-arm64": { 118 | "version": "0.25.0", 119 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", 120 | "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", 121 | "cpu": [ 122 | "arm64" 123 | ], 124 | "license": "MIT", 125 | "optional": true, 126 | "os": [ 127 | "android" 128 | ], 129 | "engines": { 130 | "node": ">=18" 131 | } 132 | }, 133 | "node_modules/@esbuild/android-x64": { 134 | "version": "0.25.0", 135 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", 136 | "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", 137 | "cpu": [ 138 | "x64" 139 | ], 140 | "license": "MIT", 141 | "optional": true, 142 | "os": [ 143 | "android" 144 | ], 145 | "engines": { 146 | "node": ">=18" 147 | } 148 | }, 149 | "node_modules/@esbuild/darwin-arm64": { 150 | "version": "0.25.0", 151 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", 152 | "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", 153 | "cpu": [ 154 | "arm64" 155 | ], 156 | "license": "MIT", 157 | "optional": true, 158 | "os": [ 159 | "darwin" 160 | ], 161 | "engines": { 162 | "node": ">=18" 163 | } 164 | }, 165 | "node_modules/@esbuild/darwin-x64": { 166 | "version": "0.25.0", 167 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", 168 | "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", 169 | "cpu": [ 170 | "x64" 171 | ], 172 | "license": "MIT", 173 | "optional": true, 174 | "os": [ 175 | "darwin" 176 | ], 177 | "engines": { 178 | "node": ">=18" 179 | } 180 | }, 181 | "node_modules/@esbuild/freebsd-arm64": { 182 | "version": "0.25.0", 183 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", 184 | "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", 185 | "cpu": [ 186 | "arm64" 187 | ], 188 | "license": "MIT", 189 | "optional": true, 190 | "os": [ 191 | "freebsd" 192 | ], 193 | "engines": { 194 | "node": ">=18" 195 | } 196 | }, 197 | "node_modules/@esbuild/freebsd-x64": { 198 | "version": "0.25.0", 199 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", 200 | "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", 201 | "cpu": [ 202 | "x64" 203 | ], 204 | "license": "MIT", 205 | "optional": true, 206 | "os": [ 207 | "freebsd" 208 | ], 209 | "engines": { 210 | "node": ">=18" 211 | } 212 | }, 213 | "node_modules/@esbuild/linux-arm": { 214 | "version": "0.25.0", 215 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", 216 | "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", 217 | "cpu": [ 218 | "arm" 219 | ], 220 | "license": "MIT", 221 | "optional": true, 222 | "os": [ 223 | "linux" 224 | ], 225 | "engines": { 226 | "node": ">=18" 227 | } 228 | }, 229 | "node_modules/@esbuild/linux-arm64": { 230 | "version": "0.25.0", 231 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", 232 | "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", 233 | "cpu": [ 234 | "arm64" 235 | ], 236 | "license": "MIT", 237 | "optional": true, 238 | "os": [ 239 | "linux" 240 | ], 241 | "engines": { 242 | "node": ">=18" 243 | } 244 | }, 245 | "node_modules/@esbuild/linux-ia32": { 246 | "version": "0.25.0", 247 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", 248 | "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", 249 | "cpu": [ 250 | "ia32" 251 | ], 252 | "license": "MIT", 253 | "optional": true, 254 | "os": [ 255 | "linux" 256 | ], 257 | "engines": { 258 | "node": ">=18" 259 | } 260 | }, 261 | "node_modules/@esbuild/linux-loong64": { 262 | "version": "0.25.0", 263 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", 264 | "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", 265 | "cpu": [ 266 | "loong64" 267 | ], 268 | "license": "MIT", 269 | "optional": true, 270 | "os": [ 271 | "linux" 272 | ], 273 | "engines": { 274 | "node": ">=18" 275 | } 276 | }, 277 | "node_modules/@esbuild/linux-mips64el": { 278 | "version": "0.25.0", 279 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", 280 | "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", 281 | "cpu": [ 282 | "mips64el" 283 | ], 284 | "license": "MIT", 285 | "optional": true, 286 | "os": [ 287 | "linux" 288 | ], 289 | "engines": { 290 | "node": ">=18" 291 | } 292 | }, 293 | "node_modules/@esbuild/linux-ppc64": { 294 | "version": "0.25.0", 295 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", 296 | "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", 297 | "cpu": [ 298 | "ppc64" 299 | ], 300 | "license": "MIT", 301 | "optional": true, 302 | "os": [ 303 | "linux" 304 | ], 305 | "engines": { 306 | "node": ">=18" 307 | } 308 | }, 309 | "node_modules/@esbuild/linux-riscv64": { 310 | "version": "0.25.0", 311 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", 312 | "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", 313 | "cpu": [ 314 | "riscv64" 315 | ], 316 | "license": "MIT", 317 | "optional": true, 318 | "os": [ 319 | "linux" 320 | ], 321 | "engines": { 322 | "node": ">=18" 323 | } 324 | }, 325 | "node_modules/@esbuild/linux-s390x": { 326 | "version": "0.25.0", 327 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", 328 | "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", 329 | "cpu": [ 330 | "s390x" 331 | ], 332 | "license": "MIT", 333 | "optional": true, 334 | "os": [ 335 | "linux" 336 | ], 337 | "engines": { 338 | "node": ">=18" 339 | } 340 | }, 341 | "node_modules/@esbuild/linux-x64": { 342 | "version": "0.25.0", 343 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", 344 | "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", 345 | "cpu": [ 346 | "x64" 347 | ], 348 | "license": "MIT", 349 | "optional": true, 350 | "os": [ 351 | "linux" 352 | ], 353 | "engines": { 354 | "node": ">=18" 355 | } 356 | }, 357 | "node_modules/@esbuild/netbsd-arm64": { 358 | "version": "0.25.0", 359 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", 360 | "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", 361 | "cpu": [ 362 | "arm64" 363 | ], 364 | "license": "MIT", 365 | "optional": true, 366 | "os": [ 367 | "netbsd" 368 | ], 369 | "engines": { 370 | "node": ">=18" 371 | } 372 | }, 373 | "node_modules/@esbuild/netbsd-x64": { 374 | "version": "0.25.0", 375 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", 376 | "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", 377 | "cpu": [ 378 | "x64" 379 | ], 380 | "license": "MIT", 381 | "optional": true, 382 | "os": [ 383 | "netbsd" 384 | ], 385 | "engines": { 386 | "node": ">=18" 387 | } 388 | }, 389 | "node_modules/@esbuild/openbsd-arm64": { 390 | "version": "0.25.0", 391 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", 392 | "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", 393 | "cpu": [ 394 | "arm64" 395 | ], 396 | "license": "MIT", 397 | "optional": true, 398 | "os": [ 399 | "openbsd" 400 | ], 401 | "engines": { 402 | "node": ">=18" 403 | } 404 | }, 405 | "node_modules/@esbuild/openbsd-x64": { 406 | "version": "0.25.0", 407 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", 408 | "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", 409 | "cpu": [ 410 | "x64" 411 | ], 412 | "license": "MIT", 413 | "optional": true, 414 | "os": [ 415 | "openbsd" 416 | ], 417 | "engines": { 418 | "node": ">=18" 419 | } 420 | }, 421 | "node_modules/@esbuild/sunos-x64": { 422 | "version": "0.25.0", 423 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", 424 | "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", 425 | "cpu": [ 426 | "x64" 427 | ], 428 | "license": "MIT", 429 | "optional": true, 430 | "os": [ 431 | "sunos" 432 | ], 433 | "engines": { 434 | "node": ">=18" 435 | } 436 | }, 437 | "node_modules/@esbuild/win32-arm64": { 438 | "version": "0.25.0", 439 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", 440 | "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", 441 | "cpu": [ 442 | "arm64" 443 | ], 444 | "license": "MIT", 445 | "optional": true, 446 | "os": [ 447 | "win32" 448 | ], 449 | "engines": { 450 | "node": ">=18" 451 | } 452 | }, 453 | "node_modules/@esbuild/win32-ia32": { 454 | "version": "0.25.0", 455 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", 456 | "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", 457 | "cpu": [ 458 | "ia32" 459 | ], 460 | "license": "MIT", 461 | "optional": true, 462 | "os": [ 463 | "win32" 464 | ], 465 | "engines": { 466 | "node": ">=18" 467 | } 468 | }, 469 | "node_modules/@esbuild/win32-x64": { 470 | "version": "0.25.0", 471 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", 472 | "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", 473 | "cpu": [ 474 | "x64" 475 | ], 476 | "license": "MIT", 477 | "optional": true, 478 | "os": [ 479 | "win32" 480 | ], 481 | "engines": { 482 | "node": ">=18" 483 | } 484 | }, 485 | "node_modules/@google-cloud/bigquery": { 486 | "version": "7.9.2", 487 | "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-7.9.2.tgz", 488 | "integrity": "sha512-Yo7oYE6m7bBT28tYDn6dBwbXZxCt+nWREj/0y5aoUq0rFUGwLUDKAXwgt6OQJ2htDzGiQ3s0yltCBjKFtqVCmA==", 489 | "license": "Apache-2.0", 490 | "dependencies": { 491 | "@google-cloud/common": "^5.0.0", 492 | "@google-cloud/paginator": "^5.0.2", 493 | "@google-cloud/precise-date": "^4.0.0", 494 | "@google-cloud/promisify": "^4.0.0", 495 | "arrify": "^2.0.1", 496 | "big.js": "^6.0.0", 497 | "duplexify": "^4.0.0", 498 | "extend": "^3.0.2", 499 | "is": "^3.3.0", 500 | "stream-events": "^1.0.5", 501 | "uuid": "^9.0.0" 502 | }, 503 | "engines": { 504 | "node": ">=14.0.0" 505 | } 506 | }, 507 | "node_modules/@google-cloud/billing": { 508 | "version": "4.6.0", 509 | "resolved": "https://registry.npmjs.org/@google-cloud/billing/-/billing-4.6.0.tgz", 510 | "integrity": "sha512-2MB7RGt18ayxRum06fUU/Pfz6uV3dYxHLb+6BfNcZyqZJsHMnZuTC+XZt0So3k6qJS1Fpjb+mx8EVVnNGwdQ+Q==", 511 | "license": "Apache-2.0", 512 | "dependencies": { 513 | "google-gax": "^4.0.3" 514 | }, 515 | "engines": { 516 | "node": ">=14.0.0" 517 | } 518 | }, 519 | "node_modules/@google-cloud/billing-budgets": { 520 | "version": "4.3.0", 521 | "resolved": "https://registry.npmjs.org/@google-cloud/billing-budgets/-/billing-budgets-4.3.0.tgz", 522 | "integrity": "sha512-w38HXqWQrtvVb+CJLi1gDk/vjJ1IZrEb/6e5hEZzxaIaWzURpYx4iewzRrtA4vMaIuh5yuoV25Qe8GOK037pBQ==", 523 | "license": "Apache-2.0", 524 | "dependencies": { 525 | "google-gax": "^3.5.8" 526 | }, 527 | "engines": { 528 | "node": ">=12.0.0" 529 | } 530 | }, 531 | "node_modules/@google-cloud/billing-budgets/node_modules/@grpc/grpc-js": { 532 | "version": "1.8.22", 533 | "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.22.tgz", 534 | "integrity": "sha512-oAjDdN7fzbUi+4hZjKG96MR6KTEubAeMpQEb+77qy+3r0Ua5xTFuie6JOLr4ZZgl5g+W5/uRTS2M1V8mVAFPuA==", 535 | "license": "Apache-2.0", 536 | "dependencies": { 537 | "@grpc/proto-loader": "^0.7.0", 538 | "@types/node": ">=12.12.47" 539 | }, 540 | "engines": { 541 | "node": "^8.13.0 || >=10.10.0" 542 | } 543 | }, 544 | "node_modules/@google-cloud/billing-budgets/node_modules/agent-base": { 545 | "version": "6.0.2", 546 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 547 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 548 | "license": "MIT", 549 | "dependencies": { 550 | "debug": "4" 551 | }, 552 | "engines": { 553 | "node": ">= 6.0.0" 554 | } 555 | }, 556 | "node_modules/@google-cloud/billing-budgets/node_modules/gaxios": { 557 | "version": "5.1.3", 558 | "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", 559 | "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", 560 | "license": "Apache-2.0", 561 | "dependencies": { 562 | "extend": "^3.0.2", 563 | "https-proxy-agent": "^5.0.0", 564 | "is-stream": "^2.0.0", 565 | "node-fetch": "^2.6.9" 566 | }, 567 | "engines": { 568 | "node": ">=12" 569 | } 570 | }, 571 | "node_modules/@google-cloud/billing-budgets/node_modules/gcp-metadata": { 572 | "version": "5.3.0", 573 | "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", 574 | "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", 575 | "license": "Apache-2.0", 576 | "dependencies": { 577 | "gaxios": "^5.0.0", 578 | "json-bigint": "^1.0.0" 579 | }, 580 | "engines": { 581 | "node": ">=12" 582 | } 583 | }, 584 | "node_modules/@google-cloud/billing-budgets/node_modules/google-auth-library": { 585 | "version": "8.9.0", 586 | "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", 587 | "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", 588 | "license": "Apache-2.0", 589 | "dependencies": { 590 | "arrify": "^2.0.0", 591 | "base64-js": "^1.3.0", 592 | "ecdsa-sig-formatter": "^1.0.11", 593 | "fast-text-encoding": "^1.0.0", 594 | "gaxios": "^5.0.0", 595 | "gcp-metadata": "^5.3.0", 596 | "gtoken": "^6.1.0", 597 | "jws": "^4.0.0", 598 | "lru-cache": "^6.0.0" 599 | }, 600 | "engines": { 601 | "node": ">=12" 602 | } 603 | }, 604 | "node_modules/@google-cloud/billing-budgets/node_modules/google-gax": { 605 | "version": "3.6.1", 606 | "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.1.tgz", 607 | "integrity": "sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w==", 608 | "license": "Apache-2.0", 609 | "dependencies": { 610 | "@grpc/grpc-js": "~1.8.0", 611 | "@grpc/proto-loader": "^0.7.0", 612 | "@types/long": "^4.0.0", 613 | "@types/rimraf": "^3.0.2", 614 | "abort-controller": "^3.0.0", 615 | "duplexify": "^4.0.0", 616 | "fast-text-encoding": "^1.0.3", 617 | "google-auth-library": "^8.0.2", 618 | "is-stream-ended": "^0.1.4", 619 | "node-fetch": "^2.6.1", 620 | "object-hash": "^3.0.0", 621 | "proto3-json-serializer": "^1.0.0", 622 | "protobufjs": "7.2.4", 623 | "protobufjs-cli": "1.1.1", 624 | "retry-request": "^5.0.0" 625 | }, 626 | "bin": { 627 | "compileProtos": "build/tools/compileProtos.js", 628 | "minifyProtoJson": "build/tools/minify.js" 629 | }, 630 | "engines": { 631 | "node": ">=12" 632 | } 633 | }, 634 | "node_modules/@google-cloud/billing-budgets/node_modules/gtoken": { 635 | "version": "6.1.2", 636 | "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", 637 | "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", 638 | "license": "MIT", 639 | "dependencies": { 640 | "gaxios": "^5.0.1", 641 | "google-p12-pem": "^4.0.0", 642 | "jws": "^4.0.0" 643 | }, 644 | "engines": { 645 | "node": ">=12.0.0" 646 | } 647 | }, 648 | "node_modules/@google-cloud/billing-budgets/node_modules/https-proxy-agent": { 649 | "version": "5.0.1", 650 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 651 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 652 | "license": "MIT", 653 | "dependencies": { 654 | "agent-base": "6", 655 | "debug": "4" 656 | }, 657 | "engines": { 658 | "node": ">= 6" 659 | } 660 | }, 661 | "node_modules/@google-cloud/billing-budgets/node_modules/proto3-json-serializer": { 662 | "version": "1.1.1", 663 | "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz", 664 | "integrity": "sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw==", 665 | "license": "Apache-2.0", 666 | "dependencies": { 667 | "protobufjs": "^7.0.0" 668 | }, 669 | "engines": { 670 | "node": ">=12.0.0" 671 | } 672 | }, 673 | "node_modules/@google-cloud/billing-budgets/node_modules/protobufjs": { 674 | "version": "7.2.4", 675 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", 676 | "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", 677 | "hasInstallScript": true, 678 | "license": "BSD-3-Clause", 679 | "dependencies": { 680 | "@protobufjs/aspromise": "^1.1.2", 681 | "@protobufjs/base64": "^1.1.2", 682 | "@protobufjs/codegen": "^2.0.4", 683 | "@protobufjs/eventemitter": "^1.1.0", 684 | "@protobufjs/fetch": "^1.1.0", 685 | "@protobufjs/float": "^1.0.2", 686 | "@protobufjs/inquire": "^1.1.0", 687 | "@protobufjs/path": "^1.1.2", 688 | "@protobufjs/pool": "^1.1.0", 689 | "@protobufjs/utf8": "^1.1.0", 690 | "@types/node": ">=13.7.0", 691 | "long": "^5.0.0" 692 | }, 693 | "engines": { 694 | "node": ">=12.0.0" 695 | } 696 | }, 697 | "node_modules/@google-cloud/billing-budgets/node_modules/retry-request": { 698 | "version": "5.0.2", 699 | "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", 700 | "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", 701 | "license": "MIT", 702 | "dependencies": { 703 | "debug": "^4.1.1", 704 | "extend": "^3.0.2" 705 | }, 706 | "engines": { 707 | "node": ">=12" 708 | } 709 | }, 710 | "node_modules/@google-cloud/common": { 711 | "version": "5.0.2", 712 | "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-5.0.2.tgz", 713 | "integrity": "sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA==", 714 | "license": "Apache-2.0", 715 | "dependencies": { 716 | "@google-cloud/projectify": "^4.0.0", 717 | "@google-cloud/promisify": "^4.0.0", 718 | "arrify": "^2.0.1", 719 | "duplexify": "^4.1.1", 720 | "extend": "^3.0.2", 721 | "google-auth-library": "^9.0.0", 722 | "html-entities": "^2.5.2", 723 | "retry-request": "^7.0.0", 724 | "teeny-request": "^9.0.0" 725 | }, 726 | "engines": { 727 | "node": ">=14.0.0" 728 | } 729 | }, 730 | "node_modules/@google-cloud/compute": { 731 | "version": "4.12.0", 732 | "resolved": "https://registry.npmjs.org/@google-cloud/compute/-/compute-4.12.0.tgz", 733 | "integrity": "sha512-N3isWbxIMd02qzdlFFxHxEM+2B/vNgn9N7WMpteY2sfwN1yT9PJHcilKDLyw+uIwuQAoErNxBM+JOLq3r/Tv+Q==", 734 | "license": "Apache-2.0", 735 | "dependencies": { 736 | "google-gax": "^4.0.3" 737 | }, 738 | "engines": { 739 | "node": ">=14.0.0" 740 | } 741 | }, 742 | "node_modules/@google-cloud/container": { 743 | "version": "5.19.0", 744 | "resolved": "https://registry.npmjs.org/@google-cloud/container/-/container-5.19.0.tgz", 745 | "integrity": "sha512-1gPAZbID65XVpQhi7nmE8BednUuxomsphc6wrkzjkq3AQqMKhnqj8Uhn4hfJgT26DSQ5IPPS9PVECS2HHV13EA==", 746 | "license": "Apache-2.0", 747 | "dependencies": { 748 | "google-gax": "^4.0.3" 749 | }, 750 | "engines": { 751 | "node": ">=14.0.0" 752 | } 753 | }, 754 | "node_modules/@google-cloud/functions": { 755 | "version": "3.6.1", 756 | "resolved": "https://registry.npmjs.org/@google-cloud/functions/-/functions-3.6.1.tgz", 757 | "integrity": "sha512-qClaAMwUMy5dDhCYfzBGC7CugZQkptwAk1yiHCw+1rllorGy8eeCUx5OMMg+SmbR04CRimThBDdbjw5PBZQ8Iw==", 758 | "license": "Apache-2.0", 759 | "dependencies": { 760 | "google-gax": "^4.0.3" 761 | }, 762 | "engines": { 763 | "node": ">=14.0.0" 764 | } 765 | }, 766 | "node_modules/@google-cloud/logging": { 767 | "version": "11.2.0", 768 | "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-11.2.0.tgz", 769 | "integrity": "sha512-Ma94jvuoMpbgNniwtelOt8w82hxK62FuOXZonEv0Hyk3B+/YVuLG/SWNyY9yMso/RXnPEc1fP2qo9kDrjf/b2w==", 770 | "license": "Apache-2.0", 771 | "dependencies": { 772 | "@google-cloud/common": "^5.0.0", 773 | "@google-cloud/paginator": "^5.0.0", 774 | "@google-cloud/projectify": "^4.0.0", 775 | "@google-cloud/promisify": "^4.0.0", 776 | "@opentelemetry/api": "^1.7.0", 777 | "arrify": "^2.0.1", 778 | "dot-prop": "^6.0.0", 779 | "eventid": "^2.0.0", 780 | "extend": "^3.0.2", 781 | "gcp-metadata": "^6.0.0", 782 | "google-auth-library": "^9.0.0", 783 | "google-gax": "^4.0.3", 784 | "on-finished": "^2.3.0", 785 | "pumpify": "^2.0.1", 786 | "stream-events": "^1.0.5", 787 | "uuid": "^9.0.0" 788 | }, 789 | "engines": { 790 | "node": ">=14.0.0" 791 | } 792 | }, 793 | "node_modules/@google-cloud/paginator": { 794 | "version": "5.0.2", 795 | "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz", 796 | "integrity": "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==", 797 | "license": "Apache-2.0", 798 | "dependencies": { 799 | "arrify": "^2.0.0", 800 | "extend": "^3.0.2" 801 | }, 802 | "engines": { 803 | "node": ">=14.0.0" 804 | } 805 | }, 806 | "node_modules/@google-cloud/precise-date": { 807 | "version": "4.0.0", 808 | "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-4.0.0.tgz", 809 | "integrity": "sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==", 810 | "license": "Apache-2.0", 811 | "engines": { 812 | "node": ">=14.0.0" 813 | } 814 | }, 815 | "node_modules/@google-cloud/projectify": { 816 | "version": "4.0.0", 817 | "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", 818 | "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==", 819 | "license": "Apache-2.0", 820 | "engines": { 821 | "node": ">=14.0.0" 822 | } 823 | }, 824 | "node_modules/@google-cloud/promisify": { 825 | "version": "4.0.0", 826 | "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz", 827 | "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==", 828 | "license": "Apache-2.0", 829 | "engines": { 830 | "node": ">=14" 831 | } 832 | }, 833 | "node_modules/@google-cloud/resource-manager": { 834 | "version": "5.3.1", 835 | "resolved": "https://registry.npmjs.org/@google-cloud/resource-manager/-/resource-manager-5.3.1.tgz", 836 | "integrity": "sha512-/7fzwFY6xhvEqkTd2Li/Tg0KThuAoJSIR3zIWNsGS2VGCyqaIt6IgkzpnvFzEUWr/d5hjna+ol4J0fVTAS8puQ==", 837 | "license": "Apache-2.0", 838 | "dependencies": { 839 | "google-gax": "^4.0.3" 840 | }, 841 | "engines": { 842 | "node": ">=14.0.0" 843 | } 844 | }, 845 | "node_modules/@google-cloud/run": { 846 | "version": "1.5.1", 847 | "resolved": "https://registry.npmjs.org/@google-cloud/run/-/run-1.5.1.tgz", 848 | "integrity": "sha512-4SHyaRMOIHc/EwaiDbi6mtBsTxBmxQTN4VHe3Yp7EHVfodSIY8YJThya3YJkGR1eayyWGmfYFoW6qiepLEmP2g==", 849 | "license": "Apache-2.0", 850 | "dependencies": { 851 | "google-gax": "^4.0.3" 852 | }, 853 | "engines": { 854 | "node": ">=14.0.0" 855 | } 856 | }, 857 | "node_modules/@google-cloud/sql": { 858 | "version": "0.19.1", 859 | "resolved": "https://registry.npmjs.org/@google-cloud/sql/-/sql-0.19.1.tgz", 860 | "integrity": "sha512-L7gp6pLb2UD2zAAQzhdLbt+QXUKby1BRrAIn/h3YzmR3Enx7QJBcubLo2l3ej6lTbKQK1cE0fjPYw456dZ+kJg==", 861 | "license": "Apache-2.0", 862 | "dependencies": { 863 | "google-gax": "^4.0.5" 864 | }, 865 | "engines": { 866 | "node": ">=v14" 867 | } 868 | }, 869 | "node_modules/@google-cloud/storage": { 870 | "version": "7.15.2", 871 | "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.15.2.tgz", 872 | "integrity": "sha512-+2k+mcQBb9zkaXMllf2wwR/rI07guAx+eZLWsGTDihW2lJRGfiqB7xu1r7/s4uvSP/T+nAumvzT5TTscwHKJ9A==", 873 | "license": "Apache-2.0", 874 | "dependencies": { 875 | "@google-cloud/paginator": "^5.0.0", 876 | "@google-cloud/projectify": "^4.0.0", 877 | "@google-cloud/promisify": "^4.0.0", 878 | "abort-controller": "^3.0.0", 879 | "async-retry": "^1.3.3", 880 | "duplexify": "^4.1.3", 881 | "fast-xml-parser": "^4.4.1", 882 | "gaxios": "^6.0.2", 883 | "google-auth-library": "^9.6.3", 884 | "html-entities": "^2.5.2", 885 | "mime": "^3.0.0", 886 | "p-limit": "^3.0.1", 887 | "retry-request": "^7.0.0", 888 | "teeny-request": "^9.0.0", 889 | "uuid": "^8.0.0" 890 | }, 891 | "engines": { 892 | "node": ">=14" 893 | } 894 | }, 895 | "node_modules/@google-cloud/storage/node_modules/uuid": { 896 | "version": "8.3.2", 897 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 898 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 899 | "license": "MIT", 900 | "bin": { 901 | "uuid": "dist/bin/uuid" 902 | } 903 | }, 904 | "node_modules/@grpc/grpc-js": { 905 | "version": "1.12.6", 906 | "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.12.6.tgz", 907 | "integrity": "sha512-JXUj6PI0oqqzTGvKtzOkxtpsyPRNsrmhh41TtIz/zEB6J+AUiZZ0dxWzcMwO9Ns5rmSPuMdghlTbUuqIM48d3Q==", 908 | "license": "Apache-2.0", 909 | "dependencies": { 910 | "@grpc/proto-loader": "^0.7.13", 911 | "@js-sdsl/ordered-map": "^4.4.2" 912 | }, 913 | "engines": { 914 | "node": ">=12.10.0" 915 | } 916 | }, 917 | "node_modules/@grpc/proto-loader": { 918 | "version": "0.7.13", 919 | "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", 920 | "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", 921 | "license": "Apache-2.0", 922 | "dependencies": { 923 | "lodash.camelcase": "^4.3.0", 924 | "long": "^5.0.0", 925 | "protobufjs": "^7.2.5", 926 | "yargs": "^17.7.2" 927 | }, 928 | "bin": { 929 | "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" 930 | }, 931 | "engines": { 932 | "node": ">=6" 933 | } 934 | }, 935 | "node_modules/@js-sdsl/ordered-map": { 936 | "version": "4.4.2", 937 | "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", 938 | "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", 939 | "license": "MIT", 940 | "funding": { 941 | "type": "opencollective", 942 | "url": "https://opencollective.com/js-sdsl" 943 | } 944 | }, 945 | "node_modules/@jsdoc/salty": { 946 | "version": "0.2.9", 947 | "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.9.tgz", 948 | "integrity": "sha512-yYxMVH7Dqw6nO0d5NIV8OQWnitU8k6vXH8NtgqAfIa/IUqRMxRv/NUJJ08VEKbAakwxlgBl5PJdrU0dMPStsnw==", 949 | "license": "Apache-2.0", 950 | "dependencies": { 951 | "lodash": "^4.17.21" 952 | }, 953 | "engines": { 954 | "node": ">=v12.0.0" 955 | } 956 | }, 957 | "node_modules/@modelcontextprotocol/sdk": { 958 | "version": "1.6.1", 959 | "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.6.1.tgz", 960 | "integrity": "sha512-oxzMzYCkZHMntzuyerehK3fV6A2Kwh5BD6CGEJSVDU2QNEhfLOptf2X7esQgaHZXHZY0oHmMsOtIDLP71UJXgA==", 961 | "license": "MIT", 962 | "dependencies": { 963 | "content-type": "^1.0.5", 964 | "cors": "^2.8.5", 965 | "eventsource": "^3.0.2", 966 | "express": "^5.0.1", 967 | "express-rate-limit": "^7.5.0", 968 | "pkce-challenge": "^4.1.0", 969 | "raw-body": "^3.0.0", 970 | "zod": "^3.23.8", 971 | "zod-to-json-schema": "^3.24.1" 972 | }, 973 | "engines": { 974 | "node": ">=18" 975 | } 976 | }, 977 | "node_modules/@opentelemetry/api": { 978 | "version": "1.9.0", 979 | "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", 980 | "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", 981 | "license": "Apache-2.0", 982 | "engines": { 983 | "node": ">=8.0.0" 984 | } 985 | }, 986 | "node_modules/@protobufjs/aspromise": { 987 | "version": "1.1.2", 988 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 989 | "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", 990 | "license": "BSD-3-Clause" 991 | }, 992 | "node_modules/@protobufjs/base64": { 993 | "version": "1.1.2", 994 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 995 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", 996 | "license": "BSD-3-Clause" 997 | }, 998 | "node_modules/@protobufjs/codegen": { 999 | "version": "2.0.4", 1000 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 1001 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", 1002 | "license": "BSD-3-Clause" 1003 | }, 1004 | "node_modules/@protobufjs/eventemitter": { 1005 | "version": "1.1.0", 1006 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 1007 | "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", 1008 | "license": "BSD-3-Clause" 1009 | }, 1010 | "node_modules/@protobufjs/fetch": { 1011 | "version": "1.1.0", 1012 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 1013 | "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", 1014 | "license": "BSD-3-Clause", 1015 | "dependencies": { 1016 | "@protobufjs/aspromise": "^1.1.1", 1017 | "@protobufjs/inquire": "^1.1.0" 1018 | } 1019 | }, 1020 | "node_modules/@protobufjs/float": { 1021 | "version": "1.0.2", 1022 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 1023 | "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", 1024 | "license": "BSD-3-Clause" 1025 | }, 1026 | "node_modules/@protobufjs/inquire": { 1027 | "version": "1.1.0", 1028 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 1029 | "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", 1030 | "license": "BSD-3-Clause" 1031 | }, 1032 | "node_modules/@protobufjs/path": { 1033 | "version": "1.1.2", 1034 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 1035 | "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", 1036 | "license": "BSD-3-Clause" 1037 | }, 1038 | "node_modules/@protobufjs/pool": { 1039 | "version": "1.1.0", 1040 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 1041 | "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", 1042 | "license": "BSD-3-Clause" 1043 | }, 1044 | "node_modules/@protobufjs/utf8": { 1045 | "version": "1.1.0", 1046 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 1047 | "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", 1048 | "license": "BSD-3-Clause" 1049 | }, 1050 | "node_modules/@tootallnate/once": { 1051 | "version": "2.0.0", 1052 | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", 1053 | "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", 1054 | "license": "MIT", 1055 | "engines": { 1056 | "node": ">= 10" 1057 | } 1058 | }, 1059 | "node_modules/@ts-morph/common": { 1060 | "version": "0.25.0", 1061 | "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.25.0.tgz", 1062 | "integrity": "sha512-kMnZz+vGGHi4GoHnLmMhGNjm44kGtKUXGnOvrKmMwAuvNjM/PgKVGfUnL7IDvK7Jb2QQ82jq3Zmp04Gy+r3Dkg==", 1063 | "license": "MIT", 1064 | "dependencies": { 1065 | "minimatch": "^9.0.4", 1066 | "path-browserify": "^1.0.1", 1067 | "tinyglobby": "^0.2.9" 1068 | } 1069 | }, 1070 | "node_modules/@ts-morph/common/node_modules/minimatch": { 1071 | "version": "9.0.5", 1072 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 1073 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1074 | "license": "ISC", 1075 | "dependencies": { 1076 | "brace-expansion": "^2.0.1" 1077 | }, 1078 | "engines": { 1079 | "node": ">=16 || 14 >=14.17" 1080 | }, 1081 | "funding": { 1082 | "url": "https://github.com/sponsors/isaacs" 1083 | } 1084 | }, 1085 | "node_modules/@types/caseless": { 1086 | "version": "0.12.5", 1087 | "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", 1088 | "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==", 1089 | "license": "MIT" 1090 | }, 1091 | "node_modules/@types/glob": { 1092 | "version": "8.1.0", 1093 | "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", 1094 | "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", 1095 | "license": "MIT", 1096 | "dependencies": { 1097 | "@types/minimatch": "^5.1.2", 1098 | "@types/node": "*" 1099 | } 1100 | }, 1101 | "node_modules/@types/linkify-it": { 1102 | "version": "5.0.0", 1103 | "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", 1104 | "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", 1105 | "license": "MIT" 1106 | }, 1107 | "node_modules/@types/long": { 1108 | "version": "4.0.2", 1109 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", 1110 | "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", 1111 | "license": "MIT" 1112 | }, 1113 | "node_modules/@types/markdown-it": { 1114 | "version": "14.1.2", 1115 | "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", 1116 | "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", 1117 | "license": "MIT", 1118 | "dependencies": { 1119 | "@types/linkify-it": "^5", 1120 | "@types/mdurl": "^2" 1121 | } 1122 | }, 1123 | "node_modules/@types/mdurl": { 1124 | "version": "2.0.0", 1125 | "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", 1126 | "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", 1127 | "license": "MIT" 1128 | }, 1129 | "node_modules/@types/minimatch": { 1130 | "version": "5.1.2", 1131 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", 1132 | "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", 1133 | "license": "MIT" 1134 | }, 1135 | "node_modules/@types/node": { 1136 | "version": "22.13.9", 1137 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", 1138 | "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", 1139 | "license": "MIT", 1140 | "dependencies": { 1141 | "undici-types": "~6.20.0" 1142 | } 1143 | }, 1144 | "node_modules/@types/request": { 1145 | "version": "2.48.12", 1146 | "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", 1147 | "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", 1148 | "license": "MIT", 1149 | "dependencies": { 1150 | "@types/caseless": "*", 1151 | "@types/node": "*", 1152 | "@types/tough-cookie": "*", 1153 | "form-data": "^2.5.0" 1154 | } 1155 | }, 1156 | "node_modules/@types/rimraf": { 1157 | "version": "3.0.2", 1158 | "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz", 1159 | "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==", 1160 | "license": "MIT", 1161 | "dependencies": { 1162 | "@types/glob": "*", 1163 | "@types/node": "*" 1164 | } 1165 | }, 1166 | "node_modules/@types/tough-cookie": { 1167 | "version": "4.0.5", 1168 | "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", 1169 | "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", 1170 | "license": "MIT" 1171 | }, 1172 | "node_modules/abort-controller": { 1173 | "version": "3.0.0", 1174 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 1175 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 1176 | "license": "MIT", 1177 | "dependencies": { 1178 | "event-target-shim": "^5.0.0" 1179 | }, 1180 | "engines": { 1181 | "node": ">=6.5" 1182 | } 1183 | }, 1184 | "node_modules/accepts": { 1185 | "version": "2.0.0", 1186 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", 1187 | "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", 1188 | "license": "MIT", 1189 | "dependencies": { 1190 | "mime-types": "^3.0.0", 1191 | "negotiator": "^1.0.0" 1192 | }, 1193 | "engines": { 1194 | "node": ">= 0.6" 1195 | } 1196 | }, 1197 | "node_modules/accepts/node_modules/mime-db": { 1198 | "version": "1.53.0", 1199 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", 1200 | "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", 1201 | "license": "MIT", 1202 | "engines": { 1203 | "node": ">= 0.6" 1204 | } 1205 | }, 1206 | "node_modules/accepts/node_modules/mime-types": { 1207 | "version": "3.0.0", 1208 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", 1209 | "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", 1210 | "license": "MIT", 1211 | "dependencies": { 1212 | "mime-db": "^1.53.0" 1213 | }, 1214 | "engines": { 1215 | "node": ">= 0.6" 1216 | } 1217 | }, 1218 | "node_modules/acorn": { 1219 | "version": "8.14.0", 1220 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", 1221 | "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", 1222 | "license": "MIT", 1223 | "bin": { 1224 | "acorn": "bin/acorn" 1225 | }, 1226 | "engines": { 1227 | "node": ">=0.4.0" 1228 | } 1229 | }, 1230 | "node_modules/acorn-jsx": { 1231 | "version": "5.3.2", 1232 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1233 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1234 | "license": "MIT", 1235 | "peerDependencies": { 1236 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1237 | } 1238 | }, 1239 | "node_modules/agent-base": { 1240 | "version": "7.1.3", 1241 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", 1242 | "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", 1243 | "license": "MIT", 1244 | "engines": { 1245 | "node": ">= 14" 1246 | } 1247 | }, 1248 | "node_modules/ansi-regex": { 1249 | "version": "5.0.1", 1250 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1251 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1252 | "license": "MIT", 1253 | "engines": { 1254 | "node": ">=8" 1255 | } 1256 | }, 1257 | "node_modules/ansi-styles": { 1258 | "version": "4.3.0", 1259 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1260 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1261 | "license": "MIT", 1262 | "dependencies": { 1263 | "color-convert": "^2.0.1" 1264 | }, 1265 | "engines": { 1266 | "node": ">=8" 1267 | }, 1268 | "funding": { 1269 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1270 | } 1271 | }, 1272 | "node_modules/argparse": { 1273 | "version": "2.0.1", 1274 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1275 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1276 | "license": "Python-2.0" 1277 | }, 1278 | "node_modules/arrify": { 1279 | "version": "2.0.1", 1280 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", 1281 | "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", 1282 | "license": "MIT", 1283 | "engines": { 1284 | "node": ">=8" 1285 | } 1286 | }, 1287 | "node_modules/async-retry": { 1288 | "version": "1.3.3", 1289 | "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", 1290 | "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", 1291 | "license": "MIT", 1292 | "dependencies": { 1293 | "retry": "0.13.1" 1294 | } 1295 | }, 1296 | "node_modules/asynckit": { 1297 | "version": "0.4.0", 1298 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1299 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 1300 | "license": "MIT" 1301 | }, 1302 | "node_modules/balanced-match": { 1303 | "version": "1.0.2", 1304 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1305 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1306 | "license": "MIT" 1307 | }, 1308 | "node_modules/base64-js": { 1309 | "version": "1.5.1", 1310 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1311 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 1312 | "funding": [ 1313 | { 1314 | "type": "github", 1315 | "url": "https://github.com/sponsors/feross" 1316 | }, 1317 | { 1318 | "type": "patreon", 1319 | "url": "https://www.patreon.com/feross" 1320 | }, 1321 | { 1322 | "type": "consulting", 1323 | "url": "https://feross.org/support" 1324 | } 1325 | ], 1326 | "license": "MIT" 1327 | }, 1328 | "node_modules/big.js": { 1329 | "version": "6.2.2", 1330 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.2.tgz", 1331 | "integrity": "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==", 1332 | "license": "MIT", 1333 | "engines": { 1334 | "node": "*" 1335 | }, 1336 | "funding": { 1337 | "type": "opencollective", 1338 | "url": "https://opencollective.com/bigjs" 1339 | } 1340 | }, 1341 | "node_modules/bignumber.js": { 1342 | "version": "9.1.2", 1343 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", 1344 | "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", 1345 | "license": "MIT", 1346 | "engines": { 1347 | "node": "*" 1348 | } 1349 | }, 1350 | "node_modules/bluebird": { 1351 | "version": "3.7.2", 1352 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 1353 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", 1354 | "license": "MIT" 1355 | }, 1356 | "node_modules/body-parser": { 1357 | "version": "2.1.0", 1358 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.1.0.tgz", 1359 | "integrity": "sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ==", 1360 | "license": "MIT", 1361 | "dependencies": { 1362 | "bytes": "^3.1.2", 1363 | "content-type": "^1.0.5", 1364 | "debug": "^4.4.0", 1365 | "http-errors": "^2.0.0", 1366 | "iconv-lite": "^0.5.2", 1367 | "on-finished": "^2.4.1", 1368 | "qs": "^6.14.0", 1369 | "raw-body": "^3.0.0", 1370 | "type-is": "^2.0.0" 1371 | }, 1372 | "engines": { 1373 | "node": ">=18" 1374 | } 1375 | }, 1376 | "node_modules/body-parser/node_modules/iconv-lite": { 1377 | "version": "0.5.2", 1378 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", 1379 | "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", 1380 | "license": "MIT", 1381 | "dependencies": { 1382 | "safer-buffer": ">= 2.1.2 < 3" 1383 | }, 1384 | "engines": { 1385 | "node": ">=0.10.0" 1386 | } 1387 | }, 1388 | "node_modules/body-parser/node_modules/qs": { 1389 | "version": "6.14.0", 1390 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", 1391 | "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", 1392 | "license": "BSD-3-Clause", 1393 | "dependencies": { 1394 | "side-channel": "^1.1.0" 1395 | }, 1396 | "engines": { 1397 | "node": ">=0.6" 1398 | }, 1399 | "funding": { 1400 | "url": "https://github.com/sponsors/ljharb" 1401 | } 1402 | }, 1403 | "node_modules/brace-expansion": { 1404 | "version": "2.0.1", 1405 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1406 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1407 | "license": "MIT", 1408 | "dependencies": { 1409 | "balanced-match": "^1.0.0" 1410 | } 1411 | }, 1412 | "node_modules/buffer-equal-constant-time": { 1413 | "version": "1.0.1", 1414 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 1415 | "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", 1416 | "license": "BSD-3-Clause" 1417 | }, 1418 | "node_modules/bytes": { 1419 | "version": "3.1.2", 1420 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 1421 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 1422 | "license": "MIT", 1423 | "engines": { 1424 | "node": ">= 0.8" 1425 | } 1426 | }, 1427 | "node_modules/call-bind-apply-helpers": { 1428 | "version": "1.0.2", 1429 | "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", 1430 | "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 1431 | "license": "MIT", 1432 | "dependencies": { 1433 | "es-errors": "^1.3.0", 1434 | "function-bind": "^1.1.2" 1435 | }, 1436 | "engines": { 1437 | "node": ">= 0.4" 1438 | } 1439 | }, 1440 | "node_modules/call-bound": { 1441 | "version": "1.0.4", 1442 | "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", 1443 | "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", 1444 | "license": "MIT", 1445 | "dependencies": { 1446 | "call-bind-apply-helpers": "^1.0.2", 1447 | "get-intrinsic": "^1.3.0" 1448 | }, 1449 | "engines": { 1450 | "node": ">= 0.4" 1451 | }, 1452 | "funding": { 1453 | "url": "https://github.com/sponsors/ljharb" 1454 | } 1455 | }, 1456 | "node_modules/catharsis": { 1457 | "version": "0.9.0", 1458 | "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", 1459 | "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", 1460 | "license": "MIT", 1461 | "dependencies": { 1462 | "lodash": "^4.17.15" 1463 | }, 1464 | "engines": { 1465 | "node": ">= 10" 1466 | } 1467 | }, 1468 | "node_modules/chalk": { 1469 | "version": "4.1.2", 1470 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1471 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1472 | "license": "MIT", 1473 | "dependencies": { 1474 | "ansi-styles": "^4.1.0", 1475 | "supports-color": "^7.1.0" 1476 | }, 1477 | "engines": { 1478 | "node": ">=10" 1479 | }, 1480 | "funding": { 1481 | "url": "https://github.com/chalk/chalk?sponsor=1" 1482 | } 1483 | }, 1484 | "node_modules/cliui": { 1485 | "version": "8.0.1", 1486 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 1487 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 1488 | "license": "ISC", 1489 | "dependencies": { 1490 | "string-width": "^4.2.0", 1491 | "strip-ansi": "^6.0.1", 1492 | "wrap-ansi": "^7.0.0" 1493 | }, 1494 | "engines": { 1495 | "node": ">=12" 1496 | } 1497 | }, 1498 | "node_modules/code-block-writer": { 1499 | "version": "13.0.3", 1500 | "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", 1501 | "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", 1502 | "license": "MIT" 1503 | }, 1504 | "node_modules/color-convert": { 1505 | "version": "2.0.1", 1506 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1507 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1508 | "license": "MIT", 1509 | "dependencies": { 1510 | "color-name": "~1.1.4" 1511 | }, 1512 | "engines": { 1513 | "node": ">=7.0.0" 1514 | } 1515 | }, 1516 | "node_modules/color-name": { 1517 | "version": "1.1.4", 1518 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1519 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1520 | "license": "MIT" 1521 | }, 1522 | "node_modules/combined-stream": { 1523 | "version": "1.0.8", 1524 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 1525 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 1526 | "license": "MIT", 1527 | "dependencies": { 1528 | "delayed-stream": "~1.0.0" 1529 | }, 1530 | "engines": { 1531 | "node": ">= 0.8" 1532 | } 1533 | }, 1534 | "node_modules/content-disposition": { 1535 | "version": "1.0.0", 1536 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", 1537 | "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", 1538 | "license": "MIT", 1539 | "dependencies": { 1540 | "safe-buffer": "5.2.1" 1541 | }, 1542 | "engines": { 1543 | "node": ">= 0.6" 1544 | } 1545 | }, 1546 | "node_modules/content-type": { 1547 | "version": "1.0.5", 1548 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 1549 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 1550 | "license": "MIT", 1551 | "engines": { 1552 | "node": ">= 0.6" 1553 | } 1554 | }, 1555 | "node_modules/cookie": { 1556 | "version": "0.7.1", 1557 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", 1558 | "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", 1559 | "license": "MIT", 1560 | "engines": { 1561 | "node": ">= 0.6" 1562 | } 1563 | }, 1564 | "node_modules/cookie-signature": { 1565 | "version": "1.2.2", 1566 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", 1567 | "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", 1568 | "license": "MIT", 1569 | "engines": { 1570 | "node": ">=6.6.0" 1571 | } 1572 | }, 1573 | "node_modules/cors": { 1574 | "version": "2.8.5", 1575 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 1576 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 1577 | "license": "MIT", 1578 | "dependencies": { 1579 | "object-assign": "^4", 1580 | "vary": "^1" 1581 | }, 1582 | "engines": { 1583 | "node": ">= 0.10" 1584 | } 1585 | }, 1586 | "node_modules/debug": { 1587 | "version": "4.4.0", 1588 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 1589 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 1590 | "license": "MIT", 1591 | "dependencies": { 1592 | "ms": "^2.1.3" 1593 | }, 1594 | "engines": { 1595 | "node": ">=6.0" 1596 | }, 1597 | "peerDependenciesMeta": { 1598 | "supports-color": { 1599 | "optional": true 1600 | } 1601 | } 1602 | }, 1603 | "node_modules/deep-is": { 1604 | "version": "0.1.4", 1605 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1606 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1607 | "license": "MIT" 1608 | }, 1609 | "node_modules/delayed-stream": { 1610 | "version": "1.0.0", 1611 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1612 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 1613 | "license": "MIT", 1614 | "engines": { 1615 | "node": ">=0.4.0" 1616 | } 1617 | }, 1618 | "node_modules/depd": { 1619 | "version": "2.0.0", 1620 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 1621 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 1622 | "license": "MIT", 1623 | "engines": { 1624 | "node": ">= 0.8" 1625 | } 1626 | }, 1627 | "node_modules/destroy": { 1628 | "version": "1.2.0", 1629 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 1630 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 1631 | "license": "MIT", 1632 | "engines": { 1633 | "node": ">= 0.8", 1634 | "npm": "1.2.8000 || >= 1.4.16" 1635 | } 1636 | }, 1637 | "node_modules/dot-prop": { 1638 | "version": "6.0.1", 1639 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", 1640 | "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", 1641 | "license": "MIT", 1642 | "dependencies": { 1643 | "is-obj": "^2.0.0" 1644 | }, 1645 | "engines": { 1646 | "node": ">=10" 1647 | }, 1648 | "funding": { 1649 | "url": "https://github.com/sponsors/sindresorhus" 1650 | } 1651 | }, 1652 | "node_modules/dunder-proto": { 1653 | "version": "1.0.1", 1654 | "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 1655 | "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 1656 | "license": "MIT", 1657 | "dependencies": { 1658 | "call-bind-apply-helpers": "^1.0.1", 1659 | "es-errors": "^1.3.0", 1660 | "gopd": "^1.2.0" 1661 | }, 1662 | "engines": { 1663 | "node": ">= 0.4" 1664 | } 1665 | }, 1666 | "node_modules/duplexify": { 1667 | "version": "4.1.3", 1668 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", 1669 | "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", 1670 | "license": "MIT", 1671 | "dependencies": { 1672 | "end-of-stream": "^1.4.1", 1673 | "inherits": "^2.0.3", 1674 | "readable-stream": "^3.1.1", 1675 | "stream-shift": "^1.0.2" 1676 | } 1677 | }, 1678 | "node_modules/ecdsa-sig-formatter": { 1679 | "version": "1.0.11", 1680 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 1681 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 1682 | "license": "Apache-2.0", 1683 | "dependencies": { 1684 | "safe-buffer": "^5.0.1" 1685 | } 1686 | }, 1687 | "node_modules/ee-first": { 1688 | "version": "1.1.1", 1689 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1690 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", 1691 | "license": "MIT" 1692 | }, 1693 | "node_modules/emoji-regex": { 1694 | "version": "8.0.0", 1695 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1696 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1697 | "license": "MIT" 1698 | }, 1699 | "node_modules/encodeurl": { 1700 | "version": "2.0.0", 1701 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", 1702 | "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", 1703 | "license": "MIT", 1704 | "engines": { 1705 | "node": ">= 0.8" 1706 | } 1707 | }, 1708 | "node_modules/end-of-stream": { 1709 | "version": "1.4.4", 1710 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1711 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1712 | "license": "MIT", 1713 | "dependencies": { 1714 | "once": "^1.4.0" 1715 | } 1716 | }, 1717 | "node_modules/entities": { 1718 | "version": "4.5.0", 1719 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 1720 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 1721 | "license": "BSD-2-Clause", 1722 | "engines": { 1723 | "node": ">=0.12" 1724 | }, 1725 | "funding": { 1726 | "url": "https://github.com/fb55/entities?sponsor=1" 1727 | } 1728 | }, 1729 | "node_modules/es-define-property": { 1730 | "version": "1.0.1", 1731 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 1732 | "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 1733 | "license": "MIT", 1734 | "engines": { 1735 | "node": ">= 0.4" 1736 | } 1737 | }, 1738 | "node_modules/es-errors": { 1739 | "version": "1.3.0", 1740 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 1741 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 1742 | "license": "MIT", 1743 | "engines": { 1744 | "node": ">= 0.4" 1745 | } 1746 | }, 1747 | "node_modules/es-object-atoms": { 1748 | "version": "1.1.1", 1749 | "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", 1750 | "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 1751 | "license": "MIT", 1752 | "dependencies": { 1753 | "es-errors": "^1.3.0" 1754 | }, 1755 | "engines": { 1756 | "node": ">= 0.4" 1757 | } 1758 | }, 1759 | "node_modules/es-set-tostringtag": { 1760 | "version": "2.1.0", 1761 | "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", 1762 | "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", 1763 | "license": "MIT", 1764 | "dependencies": { 1765 | "es-errors": "^1.3.0", 1766 | "get-intrinsic": "^1.2.6", 1767 | "has-tostringtag": "^1.0.2", 1768 | "hasown": "^2.0.2" 1769 | }, 1770 | "engines": { 1771 | "node": ">= 0.4" 1772 | } 1773 | }, 1774 | "node_modules/esbuild": { 1775 | "version": "0.25.0", 1776 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", 1777 | "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", 1778 | "hasInstallScript": true, 1779 | "license": "MIT", 1780 | "bin": { 1781 | "esbuild": "bin/esbuild" 1782 | }, 1783 | "engines": { 1784 | "node": ">=18" 1785 | }, 1786 | "optionalDependencies": { 1787 | "@esbuild/aix-ppc64": "0.25.0", 1788 | "@esbuild/android-arm": "0.25.0", 1789 | "@esbuild/android-arm64": "0.25.0", 1790 | "@esbuild/android-x64": "0.25.0", 1791 | "@esbuild/darwin-arm64": "0.25.0", 1792 | "@esbuild/darwin-x64": "0.25.0", 1793 | "@esbuild/freebsd-arm64": "0.25.0", 1794 | "@esbuild/freebsd-x64": "0.25.0", 1795 | "@esbuild/linux-arm": "0.25.0", 1796 | "@esbuild/linux-arm64": "0.25.0", 1797 | "@esbuild/linux-ia32": "0.25.0", 1798 | "@esbuild/linux-loong64": "0.25.0", 1799 | "@esbuild/linux-mips64el": "0.25.0", 1800 | "@esbuild/linux-ppc64": "0.25.0", 1801 | "@esbuild/linux-riscv64": "0.25.0", 1802 | "@esbuild/linux-s390x": "0.25.0", 1803 | "@esbuild/linux-x64": "0.25.0", 1804 | "@esbuild/netbsd-arm64": "0.25.0", 1805 | "@esbuild/netbsd-x64": "0.25.0", 1806 | "@esbuild/openbsd-arm64": "0.25.0", 1807 | "@esbuild/openbsd-x64": "0.25.0", 1808 | "@esbuild/sunos-x64": "0.25.0", 1809 | "@esbuild/win32-arm64": "0.25.0", 1810 | "@esbuild/win32-ia32": "0.25.0", 1811 | "@esbuild/win32-x64": "0.25.0" 1812 | } 1813 | }, 1814 | "node_modules/escalade": { 1815 | "version": "3.2.0", 1816 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 1817 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 1818 | "license": "MIT", 1819 | "engines": { 1820 | "node": ">=6" 1821 | } 1822 | }, 1823 | "node_modules/escape-html": { 1824 | "version": "1.0.3", 1825 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 1826 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", 1827 | "license": "MIT" 1828 | }, 1829 | "node_modules/escape-string-regexp": { 1830 | "version": "2.0.0", 1831 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", 1832 | "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", 1833 | "license": "MIT", 1834 | "engines": { 1835 | "node": ">=8" 1836 | } 1837 | }, 1838 | "node_modules/escodegen": { 1839 | "version": "1.14.3", 1840 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", 1841 | "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", 1842 | "license": "BSD-2-Clause", 1843 | "dependencies": { 1844 | "esprima": "^4.0.1", 1845 | "estraverse": "^4.2.0", 1846 | "esutils": "^2.0.2", 1847 | "optionator": "^0.8.1" 1848 | }, 1849 | "bin": { 1850 | "escodegen": "bin/escodegen.js", 1851 | "esgenerate": "bin/esgenerate.js" 1852 | }, 1853 | "engines": { 1854 | "node": ">=4.0" 1855 | }, 1856 | "optionalDependencies": { 1857 | "source-map": "~0.6.1" 1858 | } 1859 | }, 1860 | "node_modules/escodegen/node_modules/estraverse": { 1861 | "version": "4.3.0", 1862 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 1863 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 1864 | "license": "BSD-2-Clause", 1865 | "engines": { 1866 | "node": ">=4.0" 1867 | } 1868 | }, 1869 | "node_modules/eslint-visitor-keys": { 1870 | "version": "3.4.3", 1871 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 1872 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 1873 | "license": "Apache-2.0", 1874 | "engines": { 1875 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1876 | }, 1877 | "funding": { 1878 | "url": "https://opencollective.com/eslint" 1879 | } 1880 | }, 1881 | "node_modules/espree": { 1882 | "version": "9.6.1", 1883 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 1884 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 1885 | "license": "BSD-2-Clause", 1886 | "dependencies": { 1887 | "acorn": "^8.9.0", 1888 | "acorn-jsx": "^5.3.2", 1889 | "eslint-visitor-keys": "^3.4.1" 1890 | }, 1891 | "engines": { 1892 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1893 | }, 1894 | "funding": { 1895 | "url": "https://opencollective.com/eslint" 1896 | } 1897 | }, 1898 | "node_modules/esprima": { 1899 | "version": "4.0.1", 1900 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1901 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1902 | "license": "BSD-2-Clause", 1903 | "bin": { 1904 | "esparse": "bin/esparse.js", 1905 | "esvalidate": "bin/esvalidate.js" 1906 | }, 1907 | "engines": { 1908 | "node": ">=4" 1909 | } 1910 | }, 1911 | "node_modules/estraverse": { 1912 | "version": "5.3.0", 1913 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1914 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1915 | "license": "BSD-2-Clause", 1916 | "engines": { 1917 | "node": ">=4.0" 1918 | } 1919 | }, 1920 | "node_modules/esutils": { 1921 | "version": "2.0.3", 1922 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1923 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1924 | "license": "BSD-2-Clause", 1925 | "engines": { 1926 | "node": ">=0.10.0" 1927 | } 1928 | }, 1929 | "node_modules/etag": { 1930 | "version": "1.8.1", 1931 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1932 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 1933 | "license": "MIT", 1934 | "engines": { 1935 | "node": ">= 0.6" 1936 | } 1937 | }, 1938 | "node_modules/event-target-shim": { 1939 | "version": "5.0.1", 1940 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 1941 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 1942 | "license": "MIT", 1943 | "engines": { 1944 | "node": ">=6" 1945 | } 1946 | }, 1947 | "node_modules/eventid": { 1948 | "version": "2.0.1", 1949 | "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", 1950 | "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", 1951 | "license": "Apache-2.0", 1952 | "dependencies": { 1953 | "uuid": "^8.0.0" 1954 | }, 1955 | "engines": { 1956 | "node": ">=10" 1957 | } 1958 | }, 1959 | "node_modules/eventid/node_modules/uuid": { 1960 | "version": "8.3.2", 1961 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 1962 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 1963 | "license": "MIT", 1964 | "bin": { 1965 | "uuid": "dist/bin/uuid" 1966 | } 1967 | }, 1968 | "node_modules/eventsource": { 1969 | "version": "3.0.5", 1970 | "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.5.tgz", 1971 | "integrity": "sha512-LT/5J605bx5SNyE+ITBDiM3FxffBiq9un7Vx0EwMDM3vg8sWKx/tO2zC+LMqZ+smAM0F2hblaDZUVZF0te2pSw==", 1972 | "license": "MIT", 1973 | "dependencies": { 1974 | "eventsource-parser": "^3.0.0" 1975 | }, 1976 | "engines": { 1977 | "node": ">=18.0.0" 1978 | } 1979 | }, 1980 | "node_modules/eventsource-parser": { 1981 | "version": "3.0.0", 1982 | "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.0.tgz", 1983 | "integrity": "sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==", 1984 | "license": "MIT", 1985 | "engines": { 1986 | "node": ">=18.0.0" 1987 | } 1988 | }, 1989 | "node_modules/express": { 1990 | "version": "5.0.1", 1991 | "resolved": "https://registry.npmjs.org/express/-/express-5.0.1.tgz", 1992 | "integrity": "sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==", 1993 | "license": "MIT", 1994 | "dependencies": { 1995 | "accepts": "^2.0.0", 1996 | "body-parser": "^2.0.1", 1997 | "content-disposition": "^1.0.0", 1998 | "content-type": "~1.0.4", 1999 | "cookie": "0.7.1", 2000 | "cookie-signature": "^1.2.1", 2001 | "debug": "4.3.6", 2002 | "depd": "2.0.0", 2003 | "encodeurl": "~2.0.0", 2004 | "escape-html": "~1.0.3", 2005 | "etag": "~1.8.1", 2006 | "finalhandler": "^2.0.0", 2007 | "fresh": "2.0.0", 2008 | "http-errors": "2.0.0", 2009 | "merge-descriptors": "^2.0.0", 2010 | "methods": "~1.1.2", 2011 | "mime-types": "^3.0.0", 2012 | "on-finished": "2.4.1", 2013 | "once": "1.4.0", 2014 | "parseurl": "~1.3.3", 2015 | "proxy-addr": "~2.0.7", 2016 | "qs": "6.13.0", 2017 | "range-parser": "~1.2.1", 2018 | "router": "^2.0.0", 2019 | "safe-buffer": "5.2.1", 2020 | "send": "^1.1.0", 2021 | "serve-static": "^2.1.0", 2022 | "setprototypeof": "1.2.0", 2023 | "statuses": "2.0.1", 2024 | "type-is": "^2.0.0", 2025 | "utils-merge": "1.0.1", 2026 | "vary": "~1.1.2" 2027 | }, 2028 | "engines": { 2029 | "node": ">= 18" 2030 | } 2031 | }, 2032 | "node_modules/express-rate-limit": { 2033 | "version": "7.5.0", 2034 | "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", 2035 | "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", 2036 | "license": "MIT", 2037 | "engines": { 2038 | "node": ">= 16" 2039 | }, 2040 | "funding": { 2041 | "url": "https://github.com/sponsors/express-rate-limit" 2042 | }, 2043 | "peerDependencies": { 2044 | "express": "^4.11 || 5 || ^5.0.0-beta.1" 2045 | } 2046 | }, 2047 | "node_modules/express/node_modules/debug": { 2048 | "version": "4.3.6", 2049 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", 2050 | "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", 2051 | "license": "MIT", 2052 | "dependencies": { 2053 | "ms": "2.1.2" 2054 | }, 2055 | "engines": { 2056 | "node": ">=6.0" 2057 | }, 2058 | "peerDependenciesMeta": { 2059 | "supports-color": { 2060 | "optional": true 2061 | } 2062 | } 2063 | }, 2064 | "node_modules/express/node_modules/mime-db": { 2065 | "version": "1.53.0", 2066 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", 2067 | "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", 2068 | "license": "MIT", 2069 | "engines": { 2070 | "node": ">= 0.6" 2071 | } 2072 | }, 2073 | "node_modules/express/node_modules/mime-types": { 2074 | "version": "3.0.0", 2075 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", 2076 | "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", 2077 | "license": "MIT", 2078 | "dependencies": { 2079 | "mime-db": "^1.53.0" 2080 | }, 2081 | "engines": { 2082 | "node": ">= 0.6" 2083 | } 2084 | }, 2085 | "node_modules/express/node_modules/ms": { 2086 | "version": "2.1.2", 2087 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2088 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2089 | "license": "MIT" 2090 | }, 2091 | "node_modules/extend": { 2092 | "version": "3.0.2", 2093 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 2094 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 2095 | "license": "MIT" 2096 | }, 2097 | "node_modules/fast-levenshtein": { 2098 | "version": "2.0.6", 2099 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2100 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 2101 | "license": "MIT" 2102 | }, 2103 | "node_modules/fast-text-encoding": { 2104 | "version": "1.0.6", 2105 | "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", 2106 | "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", 2107 | "license": "Apache-2.0" 2108 | }, 2109 | "node_modules/fast-xml-parser": { 2110 | "version": "4.5.3", 2111 | "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", 2112 | "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", 2113 | "funding": [ 2114 | { 2115 | "type": "github", 2116 | "url": "https://github.com/sponsors/NaturalIntelligence" 2117 | } 2118 | ], 2119 | "license": "MIT", 2120 | "dependencies": { 2121 | "strnum": "^1.1.1" 2122 | }, 2123 | "bin": { 2124 | "fxparser": "src/cli/cli.js" 2125 | } 2126 | }, 2127 | "node_modules/finalhandler": { 2128 | "version": "2.0.0", 2129 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.0.0.tgz", 2130 | "integrity": "sha512-MX6Zo2adDViYh+GcxxB1dpO43eypOGUOL12rLCOTMQv/DfIbpSJUy4oQIIZhVZkH9e+bZWKMon0XHFEju16tkQ==", 2131 | "license": "MIT", 2132 | "dependencies": { 2133 | "debug": "2.6.9", 2134 | "encodeurl": "~1.0.2", 2135 | "escape-html": "~1.0.3", 2136 | "on-finished": "2.4.1", 2137 | "parseurl": "~1.3.3", 2138 | "statuses": "2.0.1", 2139 | "unpipe": "~1.0.0" 2140 | }, 2141 | "engines": { 2142 | "node": ">= 0.8" 2143 | } 2144 | }, 2145 | "node_modules/finalhandler/node_modules/debug": { 2146 | "version": "2.6.9", 2147 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2148 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2149 | "license": "MIT", 2150 | "dependencies": { 2151 | "ms": "2.0.0" 2152 | } 2153 | }, 2154 | "node_modules/finalhandler/node_modules/encodeurl": { 2155 | "version": "1.0.2", 2156 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 2157 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 2158 | "license": "MIT", 2159 | "engines": { 2160 | "node": ">= 0.8" 2161 | } 2162 | }, 2163 | "node_modules/finalhandler/node_modules/ms": { 2164 | "version": "2.0.0", 2165 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2166 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 2167 | "license": "MIT" 2168 | }, 2169 | "node_modules/form-data": { 2170 | "version": "2.5.3", 2171 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.3.tgz", 2172 | "integrity": "sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ==", 2173 | "license": "MIT", 2174 | "dependencies": { 2175 | "asynckit": "^0.4.0", 2176 | "combined-stream": "^1.0.8", 2177 | "es-set-tostringtag": "^2.1.0", 2178 | "mime-types": "^2.1.35", 2179 | "safe-buffer": "^5.2.1" 2180 | }, 2181 | "engines": { 2182 | "node": ">= 0.12" 2183 | } 2184 | }, 2185 | "node_modules/forwarded": { 2186 | "version": "0.2.0", 2187 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 2188 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 2189 | "license": "MIT", 2190 | "engines": { 2191 | "node": ">= 0.6" 2192 | } 2193 | }, 2194 | "node_modules/fresh": { 2195 | "version": "2.0.0", 2196 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", 2197 | "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", 2198 | "license": "MIT", 2199 | "engines": { 2200 | "node": ">= 0.8" 2201 | } 2202 | }, 2203 | "node_modules/fs.realpath": { 2204 | "version": "1.0.0", 2205 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2206 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 2207 | "license": "ISC" 2208 | }, 2209 | "node_modules/fsevents": { 2210 | "version": "2.3.3", 2211 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 2212 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2213 | "hasInstallScript": true, 2214 | "license": "MIT", 2215 | "optional": true, 2216 | "os": [ 2217 | "darwin" 2218 | ], 2219 | "engines": { 2220 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 2221 | } 2222 | }, 2223 | "node_modules/function-bind": { 2224 | "version": "1.1.2", 2225 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 2226 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 2227 | "license": "MIT", 2228 | "funding": { 2229 | "url": "https://github.com/sponsors/ljharb" 2230 | } 2231 | }, 2232 | "node_modules/gaxios": { 2233 | "version": "6.7.1", 2234 | "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", 2235 | "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", 2236 | "license": "Apache-2.0", 2237 | "dependencies": { 2238 | "extend": "^3.0.2", 2239 | "https-proxy-agent": "^7.0.1", 2240 | "is-stream": "^2.0.0", 2241 | "node-fetch": "^2.6.9", 2242 | "uuid": "^9.0.1" 2243 | }, 2244 | "engines": { 2245 | "node": ">=14" 2246 | } 2247 | }, 2248 | "node_modules/gcp-metadata": { 2249 | "version": "6.1.1", 2250 | "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz", 2251 | "integrity": "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==", 2252 | "license": "Apache-2.0", 2253 | "dependencies": { 2254 | "gaxios": "^6.1.1", 2255 | "google-logging-utils": "^0.0.2", 2256 | "json-bigint": "^1.0.0" 2257 | }, 2258 | "engines": { 2259 | "node": ">=14" 2260 | } 2261 | }, 2262 | "node_modules/get-caller-file": { 2263 | "version": "2.0.5", 2264 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 2265 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 2266 | "license": "ISC", 2267 | "engines": { 2268 | "node": "6.* || 8.* || >= 10.*" 2269 | } 2270 | }, 2271 | "node_modules/get-intrinsic": { 2272 | "version": "1.3.0", 2273 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", 2274 | "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 2275 | "license": "MIT", 2276 | "dependencies": { 2277 | "call-bind-apply-helpers": "^1.0.2", 2278 | "es-define-property": "^1.0.1", 2279 | "es-errors": "^1.3.0", 2280 | "es-object-atoms": "^1.1.1", 2281 | "function-bind": "^1.1.2", 2282 | "get-proto": "^1.0.1", 2283 | "gopd": "^1.2.0", 2284 | "has-symbols": "^1.1.0", 2285 | "hasown": "^2.0.2", 2286 | "math-intrinsics": "^1.1.0" 2287 | }, 2288 | "engines": { 2289 | "node": ">= 0.4" 2290 | }, 2291 | "funding": { 2292 | "url": "https://github.com/sponsors/ljharb" 2293 | } 2294 | }, 2295 | "node_modules/get-proto": { 2296 | "version": "1.0.1", 2297 | "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 2298 | "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 2299 | "license": "MIT", 2300 | "dependencies": { 2301 | "dunder-proto": "^1.0.1", 2302 | "es-object-atoms": "^1.0.0" 2303 | }, 2304 | "engines": { 2305 | "node": ">= 0.4" 2306 | } 2307 | }, 2308 | "node_modules/get-tsconfig": { 2309 | "version": "4.10.0", 2310 | "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", 2311 | "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", 2312 | "license": "MIT", 2313 | "dependencies": { 2314 | "resolve-pkg-maps": "^1.0.0" 2315 | }, 2316 | "funding": { 2317 | "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" 2318 | } 2319 | }, 2320 | "node_modules/glob": { 2321 | "version": "8.1.0", 2322 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", 2323 | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", 2324 | "deprecated": "Glob versions prior to v9 are no longer supported", 2325 | "license": "ISC", 2326 | "dependencies": { 2327 | "fs.realpath": "^1.0.0", 2328 | "inflight": "^1.0.4", 2329 | "inherits": "2", 2330 | "minimatch": "^5.0.1", 2331 | "once": "^1.3.0" 2332 | }, 2333 | "engines": { 2334 | "node": ">=12" 2335 | }, 2336 | "funding": { 2337 | "url": "https://github.com/sponsors/isaacs" 2338 | } 2339 | }, 2340 | "node_modules/google-auth-library": { 2341 | "version": "9.15.1", 2342 | "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz", 2343 | "integrity": "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==", 2344 | "license": "Apache-2.0", 2345 | "dependencies": { 2346 | "base64-js": "^1.3.0", 2347 | "ecdsa-sig-formatter": "^1.0.11", 2348 | "gaxios": "^6.1.1", 2349 | "gcp-metadata": "^6.1.0", 2350 | "gtoken": "^7.0.0", 2351 | "jws": "^4.0.0" 2352 | }, 2353 | "engines": { 2354 | "node": ">=14" 2355 | } 2356 | }, 2357 | "node_modules/google-gax": { 2358 | "version": "4.4.1", 2359 | "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-4.4.1.tgz", 2360 | "integrity": "sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg==", 2361 | "license": "Apache-2.0", 2362 | "dependencies": { 2363 | "@grpc/grpc-js": "^1.10.9", 2364 | "@grpc/proto-loader": "^0.7.13", 2365 | "@types/long": "^4.0.0", 2366 | "abort-controller": "^3.0.0", 2367 | "duplexify": "^4.0.0", 2368 | "google-auth-library": "^9.3.0", 2369 | "node-fetch": "^2.7.0", 2370 | "object-hash": "^3.0.0", 2371 | "proto3-json-serializer": "^2.0.2", 2372 | "protobufjs": "^7.3.2", 2373 | "retry-request": "^7.0.0", 2374 | "uuid": "^9.0.1" 2375 | }, 2376 | "engines": { 2377 | "node": ">=14" 2378 | } 2379 | }, 2380 | "node_modules/google-logging-utils": { 2381 | "version": "0.0.2", 2382 | "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz", 2383 | "integrity": "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==", 2384 | "license": "Apache-2.0", 2385 | "engines": { 2386 | "node": ">=14" 2387 | } 2388 | }, 2389 | "node_modules/google-p12-pem": { 2390 | "version": "4.0.1", 2391 | "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", 2392 | "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", 2393 | "deprecated": "Package is no longer maintained", 2394 | "license": "MIT", 2395 | "dependencies": { 2396 | "node-forge": "^1.3.1" 2397 | }, 2398 | "bin": { 2399 | "gp12-pem": "build/src/bin/gp12-pem.js" 2400 | }, 2401 | "engines": { 2402 | "node": ">=12.0.0" 2403 | } 2404 | }, 2405 | "node_modules/googleapis": { 2406 | "version": "146.0.0", 2407 | "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-146.0.0.tgz", 2408 | "integrity": "sha512-NewqvhnBZOJsugCAOo636O0BGE/xY7Cg/v8Rjm1+5LkJCjcqAzLleJ6igd5vrRExJLSKrY9uHy9iKE7r0PrfhQ==", 2409 | "license": "Apache-2.0", 2410 | "dependencies": { 2411 | "google-auth-library": "^9.0.0", 2412 | "googleapis-common": "^7.0.0" 2413 | }, 2414 | "engines": { 2415 | "node": ">=14.0.0" 2416 | } 2417 | }, 2418 | "node_modules/googleapis-common": { 2419 | "version": "7.2.0", 2420 | "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.2.0.tgz", 2421 | "integrity": "sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==", 2422 | "license": "Apache-2.0", 2423 | "dependencies": { 2424 | "extend": "^3.0.2", 2425 | "gaxios": "^6.0.3", 2426 | "google-auth-library": "^9.7.0", 2427 | "qs": "^6.7.0", 2428 | "url-template": "^2.0.8", 2429 | "uuid": "^9.0.0" 2430 | }, 2431 | "engines": { 2432 | "node": ">=14.0.0" 2433 | } 2434 | }, 2435 | "node_modules/gopd": { 2436 | "version": "1.2.0", 2437 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 2438 | "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 2439 | "license": "MIT", 2440 | "engines": { 2441 | "node": ">= 0.4" 2442 | }, 2443 | "funding": { 2444 | "url": "https://github.com/sponsors/ljharb" 2445 | } 2446 | }, 2447 | "node_modules/graceful-fs": { 2448 | "version": "4.2.11", 2449 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 2450 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 2451 | "license": "ISC" 2452 | }, 2453 | "node_modules/gtoken": { 2454 | "version": "7.1.0", 2455 | "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", 2456 | "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", 2457 | "license": "MIT", 2458 | "dependencies": { 2459 | "gaxios": "^6.0.0", 2460 | "jws": "^4.0.0" 2461 | }, 2462 | "engines": { 2463 | "node": ">=14.0.0" 2464 | } 2465 | }, 2466 | "node_modules/has-flag": { 2467 | "version": "4.0.0", 2468 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2469 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2470 | "license": "MIT", 2471 | "engines": { 2472 | "node": ">=8" 2473 | } 2474 | }, 2475 | "node_modules/has-symbols": { 2476 | "version": "1.1.0", 2477 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 2478 | "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 2479 | "license": "MIT", 2480 | "engines": { 2481 | "node": ">= 0.4" 2482 | }, 2483 | "funding": { 2484 | "url": "https://github.com/sponsors/ljharb" 2485 | } 2486 | }, 2487 | "node_modules/has-tostringtag": { 2488 | "version": "1.0.2", 2489 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", 2490 | "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", 2491 | "license": "MIT", 2492 | "dependencies": { 2493 | "has-symbols": "^1.0.3" 2494 | }, 2495 | "engines": { 2496 | "node": ">= 0.4" 2497 | }, 2498 | "funding": { 2499 | "url": "https://github.com/sponsors/ljharb" 2500 | } 2501 | }, 2502 | "node_modules/hasown": { 2503 | "version": "2.0.2", 2504 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 2505 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 2506 | "license": "MIT", 2507 | "dependencies": { 2508 | "function-bind": "^1.1.2" 2509 | }, 2510 | "engines": { 2511 | "node": ">= 0.4" 2512 | } 2513 | }, 2514 | "node_modules/html-entities": { 2515 | "version": "2.5.2", 2516 | "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", 2517 | "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", 2518 | "funding": [ 2519 | { 2520 | "type": "github", 2521 | "url": "https://github.com/sponsors/mdevils" 2522 | }, 2523 | { 2524 | "type": "patreon", 2525 | "url": "https://patreon.com/mdevils" 2526 | } 2527 | ], 2528 | "license": "MIT" 2529 | }, 2530 | "node_modules/http-errors": { 2531 | "version": "2.0.0", 2532 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 2533 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 2534 | "license": "MIT", 2535 | "dependencies": { 2536 | "depd": "2.0.0", 2537 | "inherits": "2.0.4", 2538 | "setprototypeof": "1.2.0", 2539 | "statuses": "2.0.1", 2540 | "toidentifier": "1.0.1" 2541 | }, 2542 | "engines": { 2543 | "node": ">= 0.8" 2544 | } 2545 | }, 2546 | "node_modules/http-proxy-agent": { 2547 | "version": "5.0.0", 2548 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", 2549 | "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", 2550 | "license": "MIT", 2551 | "dependencies": { 2552 | "@tootallnate/once": "2", 2553 | "agent-base": "6", 2554 | "debug": "4" 2555 | }, 2556 | "engines": { 2557 | "node": ">= 6" 2558 | } 2559 | }, 2560 | "node_modules/http-proxy-agent/node_modules/agent-base": { 2561 | "version": "6.0.2", 2562 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 2563 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 2564 | "license": "MIT", 2565 | "dependencies": { 2566 | "debug": "4" 2567 | }, 2568 | "engines": { 2569 | "node": ">= 6.0.0" 2570 | } 2571 | }, 2572 | "node_modules/https-proxy-agent": { 2573 | "version": "7.0.6", 2574 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", 2575 | "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", 2576 | "license": "MIT", 2577 | "dependencies": { 2578 | "agent-base": "^7.1.2", 2579 | "debug": "4" 2580 | }, 2581 | "engines": { 2582 | "node": ">= 14" 2583 | } 2584 | }, 2585 | "node_modules/iconv-lite": { 2586 | "version": "0.6.3", 2587 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 2588 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 2589 | "license": "MIT", 2590 | "dependencies": { 2591 | "safer-buffer": ">= 2.1.2 < 3.0.0" 2592 | }, 2593 | "engines": { 2594 | "node": ">=0.10.0" 2595 | } 2596 | }, 2597 | "node_modules/inflight": { 2598 | "version": "1.0.6", 2599 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2600 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2601 | "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", 2602 | "license": "ISC", 2603 | "dependencies": { 2604 | "once": "^1.3.0", 2605 | "wrappy": "1" 2606 | } 2607 | }, 2608 | "node_modules/inherits": { 2609 | "version": "2.0.4", 2610 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2611 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2612 | "license": "ISC" 2613 | }, 2614 | "node_modules/ipaddr.js": { 2615 | "version": "1.9.1", 2616 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 2617 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 2618 | "license": "MIT", 2619 | "engines": { 2620 | "node": ">= 0.10" 2621 | } 2622 | }, 2623 | "node_modules/is": { 2624 | "version": "3.3.0", 2625 | "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", 2626 | "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", 2627 | "license": "MIT", 2628 | "engines": { 2629 | "node": "*" 2630 | } 2631 | }, 2632 | "node_modules/is-fullwidth-code-point": { 2633 | "version": "3.0.0", 2634 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2635 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2636 | "license": "MIT", 2637 | "engines": { 2638 | "node": ">=8" 2639 | } 2640 | }, 2641 | "node_modules/is-obj": { 2642 | "version": "2.0.0", 2643 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 2644 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", 2645 | "license": "MIT", 2646 | "engines": { 2647 | "node": ">=8" 2648 | } 2649 | }, 2650 | "node_modules/is-promise": { 2651 | "version": "4.0.0", 2652 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", 2653 | "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", 2654 | "license": "MIT" 2655 | }, 2656 | "node_modules/is-stream": { 2657 | "version": "2.0.1", 2658 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 2659 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 2660 | "license": "MIT", 2661 | "engines": { 2662 | "node": ">=8" 2663 | }, 2664 | "funding": { 2665 | "url": "https://github.com/sponsors/sindresorhus" 2666 | } 2667 | }, 2668 | "node_modules/is-stream-ended": { 2669 | "version": "0.1.4", 2670 | "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", 2671 | "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==", 2672 | "license": "MIT" 2673 | }, 2674 | "node_modules/js2xmlparser": { 2675 | "version": "4.0.2", 2676 | "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", 2677 | "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", 2678 | "license": "Apache-2.0", 2679 | "dependencies": { 2680 | "xmlcreate": "^2.0.4" 2681 | } 2682 | }, 2683 | "node_modules/jsdoc": { 2684 | "version": "4.0.4", 2685 | "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.4.tgz", 2686 | "integrity": "sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw==", 2687 | "license": "Apache-2.0", 2688 | "dependencies": { 2689 | "@babel/parser": "^7.20.15", 2690 | "@jsdoc/salty": "^0.2.1", 2691 | "@types/markdown-it": "^14.1.1", 2692 | "bluebird": "^3.7.2", 2693 | "catharsis": "^0.9.0", 2694 | "escape-string-regexp": "^2.0.0", 2695 | "js2xmlparser": "^4.0.2", 2696 | "klaw": "^3.0.0", 2697 | "markdown-it": "^14.1.0", 2698 | "markdown-it-anchor": "^8.6.7", 2699 | "marked": "^4.0.10", 2700 | "mkdirp": "^1.0.4", 2701 | "requizzle": "^0.2.3", 2702 | "strip-json-comments": "^3.1.0", 2703 | "underscore": "~1.13.2" 2704 | }, 2705 | "bin": { 2706 | "jsdoc": "jsdoc.js" 2707 | }, 2708 | "engines": { 2709 | "node": ">=12.0.0" 2710 | } 2711 | }, 2712 | "node_modules/json-bigint": { 2713 | "version": "1.0.0", 2714 | "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", 2715 | "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", 2716 | "license": "MIT", 2717 | "dependencies": { 2718 | "bignumber.js": "^9.0.0" 2719 | } 2720 | }, 2721 | "node_modules/jwa": { 2722 | "version": "2.0.0", 2723 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", 2724 | "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", 2725 | "license": "MIT", 2726 | "dependencies": { 2727 | "buffer-equal-constant-time": "1.0.1", 2728 | "ecdsa-sig-formatter": "1.0.11", 2729 | "safe-buffer": "^5.0.1" 2730 | } 2731 | }, 2732 | "node_modules/jws": { 2733 | "version": "4.0.0", 2734 | "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", 2735 | "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", 2736 | "license": "MIT", 2737 | "dependencies": { 2738 | "jwa": "^2.0.0", 2739 | "safe-buffer": "^5.0.1" 2740 | } 2741 | }, 2742 | "node_modules/klaw": { 2743 | "version": "3.0.0", 2744 | "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", 2745 | "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", 2746 | "license": "MIT", 2747 | "dependencies": { 2748 | "graceful-fs": "^4.1.9" 2749 | } 2750 | }, 2751 | "node_modules/levn": { 2752 | "version": "0.3.0", 2753 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 2754 | "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", 2755 | "license": "MIT", 2756 | "dependencies": { 2757 | "prelude-ls": "~1.1.2", 2758 | "type-check": "~0.3.2" 2759 | }, 2760 | "engines": { 2761 | "node": ">= 0.8.0" 2762 | } 2763 | }, 2764 | "node_modules/linkify-it": { 2765 | "version": "5.0.0", 2766 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", 2767 | "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", 2768 | "license": "MIT", 2769 | "dependencies": { 2770 | "uc.micro": "^2.0.0" 2771 | } 2772 | }, 2773 | "node_modules/lodash": { 2774 | "version": "4.17.21", 2775 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2776 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 2777 | "license": "MIT" 2778 | }, 2779 | "node_modules/lodash.camelcase": { 2780 | "version": "4.3.0", 2781 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", 2782 | "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", 2783 | "license": "MIT" 2784 | }, 2785 | "node_modules/long": { 2786 | "version": "5.3.1", 2787 | "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", 2788 | "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==", 2789 | "license": "Apache-2.0" 2790 | }, 2791 | "node_modules/lru-cache": { 2792 | "version": "6.0.0", 2793 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2794 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2795 | "license": "ISC", 2796 | "dependencies": { 2797 | "yallist": "^4.0.0" 2798 | }, 2799 | "engines": { 2800 | "node": ">=10" 2801 | } 2802 | }, 2803 | "node_modules/markdown-it": { 2804 | "version": "14.1.0", 2805 | "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", 2806 | "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", 2807 | "license": "MIT", 2808 | "dependencies": { 2809 | "argparse": "^2.0.1", 2810 | "entities": "^4.4.0", 2811 | "linkify-it": "^5.0.0", 2812 | "mdurl": "^2.0.0", 2813 | "punycode.js": "^2.3.1", 2814 | "uc.micro": "^2.1.0" 2815 | }, 2816 | "bin": { 2817 | "markdown-it": "bin/markdown-it.mjs" 2818 | } 2819 | }, 2820 | "node_modules/markdown-it-anchor": { 2821 | "version": "8.6.7", 2822 | "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", 2823 | "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", 2824 | "license": "Unlicense", 2825 | "peerDependencies": { 2826 | "@types/markdown-it": "*", 2827 | "markdown-it": "*" 2828 | } 2829 | }, 2830 | "node_modules/marked": { 2831 | "version": "4.3.0", 2832 | "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", 2833 | "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", 2834 | "license": "MIT", 2835 | "bin": { 2836 | "marked": "bin/marked.js" 2837 | }, 2838 | "engines": { 2839 | "node": ">= 12" 2840 | } 2841 | }, 2842 | "node_modules/math-intrinsics": { 2843 | "version": "1.1.0", 2844 | "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 2845 | "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 2846 | "license": "MIT", 2847 | "engines": { 2848 | "node": ">= 0.4" 2849 | } 2850 | }, 2851 | "node_modules/mdurl": { 2852 | "version": "2.0.0", 2853 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", 2854 | "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", 2855 | "license": "MIT" 2856 | }, 2857 | "node_modules/media-typer": { 2858 | "version": "1.1.0", 2859 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", 2860 | "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", 2861 | "license": "MIT", 2862 | "engines": { 2863 | "node": ">= 0.8" 2864 | } 2865 | }, 2866 | "node_modules/merge-descriptors": { 2867 | "version": "2.0.0", 2868 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", 2869 | "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", 2870 | "license": "MIT", 2871 | "engines": { 2872 | "node": ">=18" 2873 | }, 2874 | "funding": { 2875 | "url": "https://github.com/sponsors/sindresorhus" 2876 | } 2877 | }, 2878 | "node_modules/methods": { 2879 | "version": "1.1.2", 2880 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 2881 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 2882 | "license": "MIT", 2883 | "engines": { 2884 | "node": ">= 0.6" 2885 | } 2886 | }, 2887 | "node_modules/mime": { 2888 | "version": "3.0.0", 2889 | "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", 2890 | "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", 2891 | "license": "MIT", 2892 | "bin": { 2893 | "mime": "cli.js" 2894 | }, 2895 | "engines": { 2896 | "node": ">=10.0.0" 2897 | } 2898 | }, 2899 | "node_modules/mime-db": { 2900 | "version": "1.52.0", 2901 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2902 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 2903 | "license": "MIT", 2904 | "engines": { 2905 | "node": ">= 0.6" 2906 | } 2907 | }, 2908 | "node_modules/mime-types": { 2909 | "version": "2.1.35", 2910 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2911 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2912 | "license": "MIT", 2913 | "dependencies": { 2914 | "mime-db": "1.52.0" 2915 | }, 2916 | "engines": { 2917 | "node": ">= 0.6" 2918 | } 2919 | }, 2920 | "node_modules/minimatch": { 2921 | "version": "5.1.6", 2922 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 2923 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 2924 | "license": "ISC", 2925 | "dependencies": { 2926 | "brace-expansion": "^2.0.1" 2927 | }, 2928 | "engines": { 2929 | "node": ">=10" 2930 | } 2931 | }, 2932 | "node_modules/minimist": { 2933 | "version": "1.2.8", 2934 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 2935 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 2936 | "license": "MIT", 2937 | "funding": { 2938 | "url": "https://github.com/sponsors/ljharb" 2939 | } 2940 | }, 2941 | "node_modules/mkdirp": { 2942 | "version": "1.0.4", 2943 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 2944 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 2945 | "license": "MIT", 2946 | "bin": { 2947 | "mkdirp": "bin/cmd.js" 2948 | }, 2949 | "engines": { 2950 | "node": ">=10" 2951 | } 2952 | }, 2953 | "node_modules/ms": { 2954 | "version": "2.1.3", 2955 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2956 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2957 | "license": "MIT" 2958 | }, 2959 | "node_modules/negotiator": { 2960 | "version": "1.0.0", 2961 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", 2962 | "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", 2963 | "license": "MIT", 2964 | "engines": { 2965 | "node": ">= 0.6" 2966 | } 2967 | }, 2968 | "node_modules/node-fetch": { 2969 | "version": "2.7.0", 2970 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 2971 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 2972 | "license": "MIT", 2973 | "dependencies": { 2974 | "whatwg-url": "^5.0.0" 2975 | }, 2976 | "engines": { 2977 | "node": "4.x || >=6.0.0" 2978 | }, 2979 | "peerDependencies": { 2980 | "encoding": "^0.1.0" 2981 | }, 2982 | "peerDependenciesMeta": { 2983 | "encoding": { 2984 | "optional": true 2985 | } 2986 | } 2987 | }, 2988 | "node_modules/node-forge": { 2989 | "version": "1.3.1", 2990 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", 2991 | "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", 2992 | "license": "(BSD-3-Clause OR GPL-2.0)", 2993 | "engines": { 2994 | "node": ">= 6.13.0" 2995 | } 2996 | }, 2997 | "node_modules/object-assign": { 2998 | "version": "4.1.1", 2999 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 3000 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 3001 | "license": "MIT", 3002 | "engines": { 3003 | "node": ">=0.10.0" 3004 | } 3005 | }, 3006 | "node_modules/object-hash": { 3007 | "version": "3.0.0", 3008 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 3009 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 3010 | "license": "MIT", 3011 | "engines": { 3012 | "node": ">= 6" 3013 | } 3014 | }, 3015 | "node_modules/object-inspect": { 3016 | "version": "1.13.4", 3017 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", 3018 | "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", 3019 | "license": "MIT", 3020 | "engines": { 3021 | "node": ">= 0.4" 3022 | }, 3023 | "funding": { 3024 | "url": "https://github.com/sponsors/ljharb" 3025 | } 3026 | }, 3027 | "node_modules/on-finished": { 3028 | "version": "2.4.1", 3029 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 3030 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 3031 | "license": "MIT", 3032 | "dependencies": { 3033 | "ee-first": "1.1.1" 3034 | }, 3035 | "engines": { 3036 | "node": ">= 0.8" 3037 | } 3038 | }, 3039 | "node_modules/once": { 3040 | "version": "1.4.0", 3041 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3042 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 3043 | "license": "ISC", 3044 | "dependencies": { 3045 | "wrappy": "1" 3046 | } 3047 | }, 3048 | "node_modules/optionator": { 3049 | "version": "0.8.3", 3050 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 3051 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 3052 | "license": "MIT", 3053 | "dependencies": { 3054 | "deep-is": "~0.1.3", 3055 | "fast-levenshtein": "~2.0.6", 3056 | "levn": "~0.3.0", 3057 | "prelude-ls": "~1.1.2", 3058 | "type-check": "~0.3.2", 3059 | "word-wrap": "~1.2.3" 3060 | }, 3061 | "engines": { 3062 | "node": ">= 0.8.0" 3063 | } 3064 | }, 3065 | "node_modules/p-limit": { 3066 | "version": "3.1.0", 3067 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 3068 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 3069 | "license": "MIT", 3070 | "dependencies": { 3071 | "yocto-queue": "^0.1.0" 3072 | }, 3073 | "engines": { 3074 | "node": ">=10" 3075 | }, 3076 | "funding": { 3077 | "url": "https://github.com/sponsors/sindresorhus" 3078 | } 3079 | }, 3080 | "node_modules/parseurl": { 3081 | "version": "1.3.3", 3082 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 3083 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 3084 | "license": "MIT", 3085 | "engines": { 3086 | "node": ">= 0.8" 3087 | } 3088 | }, 3089 | "node_modules/path-browserify": { 3090 | "version": "1.0.1", 3091 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", 3092 | "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", 3093 | "license": "MIT" 3094 | }, 3095 | "node_modules/path-to-regexp": { 3096 | "version": "8.2.0", 3097 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", 3098 | "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", 3099 | "license": "MIT", 3100 | "engines": { 3101 | "node": ">=16" 3102 | } 3103 | }, 3104 | "node_modules/pkce-challenge": { 3105 | "version": "4.1.0", 3106 | "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-4.1.0.tgz", 3107 | "integrity": "sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==", 3108 | "license": "MIT", 3109 | "engines": { 3110 | "node": ">=16.20.0" 3111 | } 3112 | }, 3113 | "node_modules/prelude-ls": { 3114 | "version": "1.1.2", 3115 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 3116 | "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", 3117 | "engines": { 3118 | "node": ">= 0.8.0" 3119 | } 3120 | }, 3121 | "node_modules/proto3-json-serializer": { 3122 | "version": "2.0.2", 3123 | "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz", 3124 | "integrity": "sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==", 3125 | "license": "Apache-2.0", 3126 | "dependencies": { 3127 | "protobufjs": "^7.2.5" 3128 | }, 3129 | "engines": { 3130 | "node": ">=14.0.0" 3131 | } 3132 | }, 3133 | "node_modules/protobufjs": { 3134 | "version": "7.4.0", 3135 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", 3136 | "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", 3137 | "hasInstallScript": true, 3138 | "license": "BSD-3-Clause", 3139 | "dependencies": { 3140 | "@protobufjs/aspromise": "^1.1.2", 3141 | "@protobufjs/base64": "^1.1.2", 3142 | "@protobufjs/codegen": "^2.0.4", 3143 | "@protobufjs/eventemitter": "^1.1.0", 3144 | "@protobufjs/fetch": "^1.1.0", 3145 | "@protobufjs/float": "^1.0.2", 3146 | "@protobufjs/inquire": "^1.1.0", 3147 | "@protobufjs/path": "^1.1.2", 3148 | "@protobufjs/pool": "^1.1.0", 3149 | "@protobufjs/utf8": "^1.1.0", 3150 | "@types/node": ">=13.7.0", 3151 | "long": "^5.0.0" 3152 | }, 3153 | "engines": { 3154 | "node": ">=12.0.0" 3155 | } 3156 | }, 3157 | "node_modules/protobufjs-cli": { 3158 | "version": "1.1.1", 3159 | "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", 3160 | "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", 3161 | "license": "BSD-3-Clause", 3162 | "dependencies": { 3163 | "chalk": "^4.0.0", 3164 | "escodegen": "^1.13.0", 3165 | "espree": "^9.0.0", 3166 | "estraverse": "^5.1.0", 3167 | "glob": "^8.0.0", 3168 | "jsdoc": "^4.0.0", 3169 | "minimist": "^1.2.0", 3170 | "semver": "^7.1.2", 3171 | "tmp": "^0.2.1", 3172 | "uglify-js": "^3.7.7" 3173 | }, 3174 | "bin": { 3175 | "pbjs": "bin/pbjs", 3176 | "pbts": "bin/pbts" 3177 | }, 3178 | "engines": { 3179 | "node": ">=12.0.0" 3180 | }, 3181 | "peerDependencies": { 3182 | "protobufjs": "^7.0.0" 3183 | } 3184 | }, 3185 | "node_modules/proxy-addr": { 3186 | "version": "2.0.7", 3187 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 3188 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 3189 | "license": "MIT", 3190 | "dependencies": { 3191 | "forwarded": "0.2.0", 3192 | "ipaddr.js": "1.9.1" 3193 | }, 3194 | "engines": { 3195 | "node": ">= 0.10" 3196 | } 3197 | }, 3198 | "node_modules/pump": { 3199 | "version": "3.0.2", 3200 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", 3201 | "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", 3202 | "license": "MIT", 3203 | "dependencies": { 3204 | "end-of-stream": "^1.1.0", 3205 | "once": "^1.3.1" 3206 | } 3207 | }, 3208 | "node_modules/pumpify": { 3209 | "version": "2.0.1", 3210 | "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", 3211 | "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", 3212 | "license": "MIT", 3213 | "dependencies": { 3214 | "duplexify": "^4.1.1", 3215 | "inherits": "^2.0.3", 3216 | "pump": "^3.0.0" 3217 | } 3218 | }, 3219 | "node_modules/punycode.js": { 3220 | "version": "2.3.1", 3221 | "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", 3222 | "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", 3223 | "license": "MIT", 3224 | "engines": { 3225 | "node": ">=6" 3226 | } 3227 | }, 3228 | "node_modules/qs": { 3229 | "version": "6.13.0", 3230 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", 3231 | "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", 3232 | "license": "BSD-3-Clause", 3233 | "dependencies": { 3234 | "side-channel": "^1.0.6" 3235 | }, 3236 | "engines": { 3237 | "node": ">=0.6" 3238 | }, 3239 | "funding": { 3240 | "url": "https://github.com/sponsors/ljharb" 3241 | } 3242 | }, 3243 | "node_modules/range-parser": { 3244 | "version": "1.2.1", 3245 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 3246 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 3247 | "license": "MIT", 3248 | "engines": { 3249 | "node": ">= 0.6" 3250 | } 3251 | }, 3252 | "node_modules/raw-body": { 3253 | "version": "3.0.0", 3254 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", 3255 | "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", 3256 | "license": "MIT", 3257 | "dependencies": { 3258 | "bytes": "3.1.2", 3259 | "http-errors": "2.0.0", 3260 | "iconv-lite": "0.6.3", 3261 | "unpipe": "1.0.0" 3262 | }, 3263 | "engines": { 3264 | "node": ">= 0.8" 3265 | } 3266 | }, 3267 | "node_modules/readable-stream": { 3268 | "version": "3.6.2", 3269 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 3270 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 3271 | "license": "MIT", 3272 | "dependencies": { 3273 | "inherits": "^2.0.3", 3274 | "string_decoder": "^1.1.1", 3275 | "util-deprecate": "^1.0.1" 3276 | }, 3277 | "engines": { 3278 | "node": ">= 6" 3279 | } 3280 | }, 3281 | "node_modules/require-directory": { 3282 | "version": "2.1.1", 3283 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 3284 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 3285 | "license": "MIT", 3286 | "engines": { 3287 | "node": ">=0.10.0" 3288 | } 3289 | }, 3290 | "node_modules/requizzle": { 3291 | "version": "0.2.4", 3292 | "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", 3293 | "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", 3294 | "license": "MIT", 3295 | "dependencies": { 3296 | "lodash": "^4.17.21" 3297 | } 3298 | }, 3299 | "node_modules/resolve-pkg-maps": { 3300 | "version": "1.0.0", 3301 | "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", 3302 | "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", 3303 | "license": "MIT", 3304 | "funding": { 3305 | "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" 3306 | } 3307 | }, 3308 | "node_modules/retry": { 3309 | "version": "0.13.1", 3310 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", 3311 | "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", 3312 | "license": "MIT", 3313 | "engines": { 3314 | "node": ">= 4" 3315 | } 3316 | }, 3317 | "node_modules/retry-request": { 3318 | "version": "7.0.2", 3319 | "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz", 3320 | "integrity": "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==", 3321 | "license": "MIT", 3322 | "dependencies": { 3323 | "@types/request": "^2.48.8", 3324 | "extend": "^3.0.2", 3325 | "teeny-request": "^9.0.0" 3326 | }, 3327 | "engines": { 3328 | "node": ">=14" 3329 | } 3330 | }, 3331 | "node_modules/router": { 3332 | "version": "2.1.0", 3333 | "resolved": "https://registry.npmjs.org/router/-/router-2.1.0.tgz", 3334 | "integrity": "sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA==", 3335 | "license": "MIT", 3336 | "dependencies": { 3337 | "is-promise": "^4.0.0", 3338 | "parseurl": "^1.3.3", 3339 | "path-to-regexp": "^8.0.0" 3340 | }, 3341 | "engines": { 3342 | "node": ">= 18" 3343 | } 3344 | }, 3345 | "node_modules/safe-buffer": { 3346 | "version": "5.2.1", 3347 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 3348 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 3349 | "funding": [ 3350 | { 3351 | "type": "github", 3352 | "url": "https://github.com/sponsors/feross" 3353 | }, 3354 | { 3355 | "type": "patreon", 3356 | "url": "https://www.patreon.com/feross" 3357 | }, 3358 | { 3359 | "type": "consulting", 3360 | "url": "https://feross.org/support" 3361 | } 3362 | ], 3363 | "license": "MIT" 3364 | }, 3365 | "node_modules/safer-buffer": { 3366 | "version": "2.1.2", 3367 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 3368 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 3369 | "license": "MIT" 3370 | }, 3371 | "node_modules/semver": { 3372 | "version": "7.7.1", 3373 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", 3374 | "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", 3375 | "license": "ISC", 3376 | "bin": { 3377 | "semver": "bin/semver.js" 3378 | }, 3379 | "engines": { 3380 | "node": ">=10" 3381 | } 3382 | }, 3383 | "node_modules/send": { 3384 | "version": "1.1.0", 3385 | "resolved": "https://registry.npmjs.org/send/-/send-1.1.0.tgz", 3386 | "integrity": "sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==", 3387 | "license": "MIT", 3388 | "dependencies": { 3389 | "debug": "^4.3.5", 3390 | "destroy": "^1.2.0", 3391 | "encodeurl": "^2.0.0", 3392 | "escape-html": "^1.0.3", 3393 | "etag": "^1.8.1", 3394 | "fresh": "^0.5.2", 3395 | "http-errors": "^2.0.0", 3396 | "mime-types": "^2.1.35", 3397 | "ms": "^2.1.3", 3398 | "on-finished": "^2.4.1", 3399 | "range-parser": "^1.2.1", 3400 | "statuses": "^2.0.1" 3401 | }, 3402 | "engines": { 3403 | "node": ">= 18" 3404 | } 3405 | }, 3406 | "node_modules/send/node_modules/fresh": { 3407 | "version": "0.5.2", 3408 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 3409 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 3410 | "license": "MIT", 3411 | "engines": { 3412 | "node": ">= 0.6" 3413 | } 3414 | }, 3415 | "node_modules/serve-static": { 3416 | "version": "2.1.0", 3417 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.1.0.tgz", 3418 | "integrity": "sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==", 3419 | "license": "MIT", 3420 | "dependencies": { 3421 | "encodeurl": "^2.0.0", 3422 | "escape-html": "^1.0.3", 3423 | "parseurl": "^1.3.3", 3424 | "send": "^1.0.0" 3425 | }, 3426 | "engines": { 3427 | "node": ">= 18" 3428 | } 3429 | }, 3430 | "node_modules/setprototypeof": { 3431 | "version": "1.2.0", 3432 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 3433 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", 3434 | "license": "ISC" 3435 | }, 3436 | "node_modules/side-channel": { 3437 | "version": "1.1.0", 3438 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", 3439 | "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", 3440 | "license": "MIT", 3441 | "dependencies": { 3442 | "es-errors": "^1.3.0", 3443 | "object-inspect": "^1.13.3", 3444 | "side-channel-list": "^1.0.0", 3445 | "side-channel-map": "^1.0.1", 3446 | "side-channel-weakmap": "^1.0.2" 3447 | }, 3448 | "engines": { 3449 | "node": ">= 0.4" 3450 | }, 3451 | "funding": { 3452 | "url": "https://github.com/sponsors/ljharb" 3453 | } 3454 | }, 3455 | "node_modules/side-channel-list": { 3456 | "version": "1.0.0", 3457 | "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", 3458 | "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", 3459 | "license": "MIT", 3460 | "dependencies": { 3461 | "es-errors": "^1.3.0", 3462 | "object-inspect": "^1.13.3" 3463 | }, 3464 | "engines": { 3465 | "node": ">= 0.4" 3466 | }, 3467 | "funding": { 3468 | "url": "https://github.com/sponsors/ljharb" 3469 | } 3470 | }, 3471 | "node_modules/side-channel-map": { 3472 | "version": "1.0.1", 3473 | "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", 3474 | "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", 3475 | "license": "MIT", 3476 | "dependencies": { 3477 | "call-bound": "^1.0.2", 3478 | "es-errors": "^1.3.0", 3479 | "get-intrinsic": "^1.2.5", 3480 | "object-inspect": "^1.13.3" 3481 | }, 3482 | "engines": { 3483 | "node": ">= 0.4" 3484 | }, 3485 | "funding": { 3486 | "url": "https://github.com/sponsors/ljharb" 3487 | } 3488 | }, 3489 | "node_modules/side-channel-weakmap": { 3490 | "version": "1.0.2", 3491 | "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", 3492 | "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", 3493 | "license": "MIT", 3494 | "dependencies": { 3495 | "call-bound": "^1.0.2", 3496 | "es-errors": "^1.3.0", 3497 | "get-intrinsic": "^1.2.5", 3498 | "object-inspect": "^1.13.3", 3499 | "side-channel-map": "^1.0.1" 3500 | }, 3501 | "engines": { 3502 | "node": ">= 0.4" 3503 | }, 3504 | "funding": { 3505 | "url": "https://github.com/sponsors/ljharb" 3506 | } 3507 | }, 3508 | "node_modules/source-map": { 3509 | "version": "0.6.1", 3510 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3511 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3512 | "license": "BSD-3-Clause", 3513 | "optional": true, 3514 | "engines": { 3515 | "node": ">=0.10.0" 3516 | } 3517 | }, 3518 | "node_modules/statuses": { 3519 | "version": "2.0.1", 3520 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 3521 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 3522 | "license": "MIT", 3523 | "engines": { 3524 | "node": ">= 0.8" 3525 | } 3526 | }, 3527 | "node_modules/stream-events": { 3528 | "version": "1.0.5", 3529 | "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", 3530 | "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", 3531 | "license": "MIT", 3532 | "dependencies": { 3533 | "stubs": "^3.0.0" 3534 | } 3535 | }, 3536 | "node_modules/stream-shift": { 3537 | "version": "1.0.3", 3538 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", 3539 | "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", 3540 | "license": "MIT" 3541 | }, 3542 | "node_modules/string_decoder": { 3543 | "version": "1.3.0", 3544 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 3545 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 3546 | "license": "MIT", 3547 | "dependencies": { 3548 | "safe-buffer": "~5.2.0" 3549 | } 3550 | }, 3551 | "node_modules/string-width": { 3552 | "version": "4.2.3", 3553 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3554 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3555 | "license": "MIT", 3556 | "dependencies": { 3557 | "emoji-regex": "^8.0.0", 3558 | "is-fullwidth-code-point": "^3.0.0", 3559 | "strip-ansi": "^6.0.1" 3560 | }, 3561 | "engines": { 3562 | "node": ">=8" 3563 | } 3564 | }, 3565 | "node_modules/strip-ansi": { 3566 | "version": "6.0.1", 3567 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3568 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3569 | "license": "MIT", 3570 | "dependencies": { 3571 | "ansi-regex": "^5.0.1" 3572 | }, 3573 | "engines": { 3574 | "node": ">=8" 3575 | } 3576 | }, 3577 | "node_modules/strip-json-comments": { 3578 | "version": "3.1.1", 3579 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3580 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3581 | "license": "MIT", 3582 | "engines": { 3583 | "node": ">=8" 3584 | }, 3585 | "funding": { 3586 | "url": "https://github.com/sponsors/sindresorhus" 3587 | } 3588 | }, 3589 | "node_modules/strnum": { 3590 | "version": "1.1.2", 3591 | "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", 3592 | "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", 3593 | "funding": [ 3594 | { 3595 | "type": "github", 3596 | "url": "https://github.com/sponsors/NaturalIntelligence" 3597 | } 3598 | ], 3599 | "license": "MIT" 3600 | }, 3601 | "node_modules/stubs": { 3602 | "version": "3.0.0", 3603 | "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", 3604 | "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==", 3605 | "license": "MIT" 3606 | }, 3607 | "node_modules/supports-color": { 3608 | "version": "7.2.0", 3609 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3610 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3611 | "license": "MIT", 3612 | "dependencies": { 3613 | "has-flag": "^4.0.0" 3614 | }, 3615 | "engines": { 3616 | "node": ">=8" 3617 | } 3618 | }, 3619 | "node_modules/teeny-request": { 3620 | "version": "9.0.0", 3621 | "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz", 3622 | "integrity": "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==", 3623 | "license": "Apache-2.0", 3624 | "dependencies": { 3625 | "http-proxy-agent": "^5.0.0", 3626 | "https-proxy-agent": "^5.0.0", 3627 | "node-fetch": "^2.6.9", 3628 | "stream-events": "^1.0.5", 3629 | "uuid": "^9.0.0" 3630 | }, 3631 | "engines": { 3632 | "node": ">=14" 3633 | } 3634 | }, 3635 | "node_modules/teeny-request/node_modules/agent-base": { 3636 | "version": "6.0.2", 3637 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 3638 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 3639 | "license": "MIT", 3640 | "dependencies": { 3641 | "debug": "4" 3642 | }, 3643 | "engines": { 3644 | "node": ">= 6.0.0" 3645 | } 3646 | }, 3647 | "node_modules/teeny-request/node_modules/https-proxy-agent": { 3648 | "version": "5.0.1", 3649 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 3650 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 3651 | "license": "MIT", 3652 | "dependencies": { 3653 | "agent-base": "6", 3654 | "debug": "4" 3655 | }, 3656 | "engines": { 3657 | "node": ">= 6" 3658 | } 3659 | }, 3660 | "node_modules/tinyglobby": { 3661 | "version": "0.2.12", 3662 | "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", 3663 | "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", 3664 | "license": "MIT", 3665 | "dependencies": { 3666 | "fdir": "^6.4.3", 3667 | "picomatch": "^4.0.2" 3668 | }, 3669 | "engines": { 3670 | "node": ">=12.0.0" 3671 | }, 3672 | "funding": { 3673 | "url": "https://github.com/sponsors/SuperchupuDev" 3674 | } 3675 | }, 3676 | "node_modules/tinyglobby/node_modules/fdir": { 3677 | "version": "6.4.3", 3678 | "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", 3679 | "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", 3680 | "license": "MIT", 3681 | "peerDependencies": { 3682 | "picomatch": "^3 || ^4" 3683 | }, 3684 | "peerDependenciesMeta": { 3685 | "picomatch": { 3686 | "optional": true 3687 | } 3688 | } 3689 | }, 3690 | "node_modules/tinyglobby/node_modules/picomatch": { 3691 | "version": "4.0.2", 3692 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", 3693 | "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", 3694 | "license": "MIT", 3695 | "engines": { 3696 | "node": ">=12" 3697 | }, 3698 | "funding": { 3699 | "url": "https://github.com/sponsors/jonschlinkert" 3700 | } 3701 | }, 3702 | "node_modules/tmp": { 3703 | "version": "0.2.3", 3704 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", 3705 | "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", 3706 | "license": "MIT", 3707 | "engines": { 3708 | "node": ">=14.14" 3709 | } 3710 | }, 3711 | "node_modules/toidentifier": { 3712 | "version": "1.0.1", 3713 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 3714 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 3715 | "license": "MIT", 3716 | "engines": { 3717 | "node": ">=0.6" 3718 | } 3719 | }, 3720 | "node_modules/tr46": { 3721 | "version": "0.0.3", 3722 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 3723 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", 3724 | "license": "MIT" 3725 | }, 3726 | "node_modules/ts-morph": { 3727 | "version": "24.0.0", 3728 | "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-24.0.0.tgz", 3729 | "integrity": "sha512-2OAOg/Ob5yx9Et7ZX4CvTCc0UFoZHwLEJ+dpDPSUi5TgwwlTlX47w+iFRrEwzUZwYACjq83cgjS/Da50Ga37uw==", 3730 | "license": "MIT", 3731 | "dependencies": { 3732 | "@ts-morph/common": "~0.25.0", 3733 | "code-block-writer": "^13.0.3" 3734 | } 3735 | }, 3736 | "node_modules/tslib": { 3737 | "version": "2.8.1", 3738 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 3739 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 3740 | "dev": true, 3741 | "license": "0BSD" 3742 | }, 3743 | "node_modules/tsx": { 3744 | "version": "4.19.3", 3745 | "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.3.tgz", 3746 | "integrity": "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==", 3747 | "license": "MIT", 3748 | "dependencies": { 3749 | "esbuild": "~0.25.0", 3750 | "get-tsconfig": "^4.7.5" 3751 | }, 3752 | "bin": { 3753 | "tsx": "dist/cli.mjs" 3754 | }, 3755 | "engines": { 3756 | "node": ">=18.0.0" 3757 | }, 3758 | "optionalDependencies": { 3759 | "fsevents": "~2.3.3" 3760 | } 3761 | }, 3762 | "node_modules/type-check": { 3763 | "version": "0.3.2", 3764 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 3765 | "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", 3766 | "license": "MIT", 3767 | "dependencies": { 3768 | "prelude-ls": "~1.1.2" 3769 | }, 3770 | "engines": { 3771 | "node": ">= 0.8.0" 3772 | } 3773 | }, 3774 | "node_modules/type-is": { 3775 | "version": "2.0.0", 3776 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.0.tgz", 3777 | "integrity": "sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==", 3778 | "license": "MIT", 3779 | "dependencies": { 3780 | "content-type": "^1.0.5", 3781 | "media-typer": "^1.1.0", 3782 | "mime-types": "^3.0.0" 3783 | }, 3784 | "engines": { 3785 | "node": ">= 0.6" 3786 | } 3787 | }, 3788 | "node_modules/type-is/node_modules/mime-db": { 3789 | "version": "1.53.0", 3790 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", 3791 | "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", 3792 | "license": "MIT", 3793 | "engines": { 3794 | "node": ">= 0.6" 3795 | } 3796 | }, 3797 | "node_modules/type-is/node_modules/mime-types": { 3798 | "version": "3.0.0", 3799 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", 3800 | "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", 3801 | "license": "MIT", 3802 | "dependencies": { 3803 | "mime-db": "^1.53.0" 3804 | }, 3805 | "engines": { 3806 | "node": ">= 0.6" 3807 | } 3808 | }, 3809 | "node_modules/typescript": { 3810 | "version": "5.8.2", 3811 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", 3812 | "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", 3813 | "dev": true, 3814 | "license": "Apache-2.0", 3815 | "bin": { 3816 | "tsc": "bin/tsc", 3817 | "tsserver": "bin/tsserver" 3818 | }, 3819 | "engines": { 3820 | "node": ">=14.17" 3821 | } 3822 | }, 3823 | "node_modules/uc.micro": { 3824 | "version": "2.1.0", 3825 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", 3826 | "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", 3827 | "license": "MIT" 3828 | }, 3829 | "node_modules/uglify-js": { 3830 | "version": "3.19.3", 3831 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", 3832 | "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", 3833 | "license": "BSD-2-Clause", 3834 | "bin": { 3835 | "uglifyjs": "bin/uglifyjs" 3836 | }, 3837 | "engines": { 3838 | "node": ">=0.8.0" 3839 | } 3840 | }, 3841 | "node_modules/underscore": { 3842 | "version": "1.13.7", 3843 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", 3844 | "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", 3845 | "license": "MIT" 3846 | }, 3847 | "node_modules/undici-types": { 3848 | "version": "6.20.0", 3849 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", 3850 | "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", 3851 | "license": "MIT" 3852 | }, 3853 | "node_modules/unpipe": { 3854 | "version": "1.0.0", 3855 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 3856 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 3857 | "license": "MIT", 3858 | "engines": { 3859 | "node": ">= 0.8" 3860 | } 3861 | }, 3862 | "node_modules/url-template": { 3863 | "version": "2.0.8", 3864 | "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", 3865 | "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", 3866 | "license": "BSD" 3867 | }, 3868 | "node_modules/util-deprecate": { 3869 | "version": "1.0.2", 3870 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3871 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 3872 | "license": "MIT" 3873 | }, 3874 | "node_modules/utils-merge": { 3875 | "version": "1.0.1", 3876 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 3877 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 3878 | "license": "MIT", 3879 | "engines": { 3880 | "node": ">= 0.4.0" 3881 | } 3882 | }, 3883 | "node_modules/uuid": { 3884 | "version": "9.0.1", 3885 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", 3886 | "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", 3887 | "funding": [ 3888 | "https://github.com/sponsors/broofa", 3889 | "https://github.com/sponsors/ctavan" 3890 | ], 3891 | "license": "MIT", 3892 | "bin": { 3893 | "uuid": "dist/bin/uuid" 3894 | } 3895 | }, 3896 | "node_modules/vary": { 3897 | "version": "1.1.2", 3898 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 3899 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 3900 | "license": "MIT", 3901 | "engines": { 3902 | "node": ">= 0.8" 3903 | } 3904 | }, 3905 | "node_modules/webidl-conversions": { 3906 | "version": "3.0.1", 3907 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 3908 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", 3909 | "license": "BSD-2-Clause" 3910 | }, 3911 | "node_modules/whatwg-url": { 3912 | "version": "5.0.0", 3913 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 3914 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 3915 | "license": "MIT", 3916 | "dependencies": { 3917 | "tr46": "~0.0.3", 3918 | "webidl-conversions": "^3.0.0" 3919 | } 3920 | }, 3921 | "node_modules/word-wrap": { 3922 | "version": "1.2.5", 3923 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 3924 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 3925 | "license": "MIT", 3926 | "engines": { 3927 | "node": ">=0.10.0" 3928 | } 3929 | }, 3930 | "node_modules/wrap-ansi": { 3931 | "version": "7.0.0", 3932 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3933 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3934 | "license": "MIT", 3935 | "dependencies": { 3936 | "ansi-styles": "^4.0.0", 3937 | "string-width": "^4.1.0", 3938 | "strip-ansi": "^6.0.0" 3939 | }, 3940 | "engines": { 3941 | "node": ">=10" 3942 | }, 3943 | "funding": { 3944 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3945 | } 3946 | }, 3947 | "node_modules/wrappy": { 3948 | "version": "1.0.2", 3949 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3950 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3951 | "license": "ISC" 3952 | }, 3953 | "node_modules/xmlcreate": { 3954 | "version": "2.0.4", 3955 | "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", 3956 | "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", 3957 | "license": "Apache-2.0" 3958 | }, 3959 | "node_modules/y18n": { 3960 | "version": "5.0.8", 3961 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 3962 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 3963 | "license": "ISC", 3964 | "engines": { 3965 | "node": ">=10" 3966 | } 3967 | }, 3968 | "node_modules/yallist": { 3969 | "version": "4.0.0", 3970 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3971 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3972 | "license": "ISC" 3973 | }, 3974 | "node_modules/yargs": { 3975 | "version": "17.7.2", 3976 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 3977 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 3978 | "license": "MIT", 3979 | "dependencies": { 3980 | "cliui": "^8.0.1", 3981 | "escalade": "^3.1.1", 3982 | "get-caller-file": "^2.0.5", 3983 | "require-directory": "^2.1.1", 3984 | "string-width": "^4.2.3", 3985 | "y18n": "^5.0.5", 3986 | "yargs-parser": "^21.1.1" 3987 | }, 3988 | "engines": { 3989 | "node": ">=12" 3990 | } 3991 | }, 3992 | "node_modules/yargs-parser": { 3993 | "version": "21.1.1", 3994 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 3995 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 3996 | "license": "ISC", 3997 | "engines": { 3998 | "node": ">=12" 3999 | } 4000 | }, 4001 | "node_modules/yocto-queue": { 4002 | "version": "0.1.0", 4003 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 4004 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 4005 | "license": "MIT", 4006 | "engines": { 4007 | "node": ">=10" 4008 | }, 4009 | "funding": { 4010 | "url": "https://github.com/sponsors/sindresorhus" 4011 | } 4012 | }, 4013 | "node_modules/zod": { 4014 | "version": "3.24.2", 4015 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", 4016 | "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", 4017 | "license": "MIT", 4018 | "funding": { 4019 | "url": "https://github.com/sponsors/colinhacks" 4020 | } 4021 | }, 4022 | "node_modules/zod-to-json-schema": { 4023 | "version": "3.24.3", 4024 | "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.3.tgz", 4025 | "integrity": "sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A==", 4026 | "license": "ISC", 4027 | "peerDependencies": { 4028 | "zod": "^3.24.1" 4029 | } 4030 | } 4031 | } 4032 | } 4033 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gcp-mcp", 3 | "version": "1.0.2", 4 | "description": "Model Context Protocol (MCP) server for Google Cloud Platform - Talk to your GCP resources", 5 | "main": "index.ts", 6 | "bin": { 7 | "gcp-mcp": "./bin.js" 8 | }, 9 | "scripts": { 10 | "start": "tsx index.ts", 11 | "prepare": "npm run build", 12 | "build": "tsc", 13 | "dev": "tsx watch index.ts", 14 | "test": "tsx bin.js" 15 | }, 16 | "keywords": [ 17 | "gcp", 18 | "mcp", 19 | "claude", 20 | "ai", 21 | "llm" 22 | ], 23 | "author": "Oluwapelumi Oluwaseyi", 24 | "license": "MIT", 25 | "dependencies": { 26 | "@google-cloud/bigquery": "^7.9.2", 27 | "@google-cloud/billing": "^4.6.0", 28 | "@google-cloud/billing-budgets": "^4.3.0", 29 | "@google-cloud/compute": "^4.12.0", 30 | "@google-cloud/container": "^5.19.0", 31 | "@google-cloud/functions": "^3.6.1", 32 | "@google-cloud/logging": "^11.2.0", 33 | "@google-cloud/resource-manager": "^5.3.1", 34 | "@google-cloud/run": "^1.5.1", 35 | "@google-cloud/sql": "^0.19.1", 36 | "@google-cloud/storage": "^7.15.0", 37 | "@modelcontextprotocol/sdk": "^1.6.1", 38 | "google-auth-library": "^9.0.0", 39 | "googleapis": "^146.0.0", 40 | "ts-morph": "^24.0.0", 41 | "tsx": "^4.19.2", 42 | "zod": "^3.24.1" 43 | }, 44 | "devDependencies": { 45 | "@types/node": "^22.10.2", 46 | "tslib": "^2.8.1", 47 | "typescript": "^5.7.2" 48 | }, 49 | "repository": { 50 | "type": "git", 51 | "url": "git+https://github.com/eniayomi/gcp-mcp.git" 52 | }, 53 | "bugs": { 54 | "url": "https://github.com/eniayomi/gcp-mcp/issues" 55 | }, 56 | "homepage": "https://github.com/eniayomi/gcp-mcp#readme" 57 | } 58 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "module": "CommonJS", 5 | "moduleResolution": "node", 6 | "esModuleInterop": true, 7 | "strict": true, 8 | "skipLibCheck": true, 9 | "forceConsistentCasingInFileNames": true, 10 | "resolveJsonModule": true, 11 | "allowJs": true, 12 | "outDir": "dist", 13 | "rootDir": ".", 14 | "baseUrl": "." 15 | }, 16 | "include": ["*.ts"], 17 | "exclude": ["node_modules", "dist"] 18 | } --------------------------------------------------------------------------------