├── .buildkite ├── default-pipeline.yml ├── diff ├── pipeline.yml └── pull-requests.json ├── .github └── CODEOWNERS ├── .gitignore ├── .nvmrc ├── LICENSE ├── NOTICE.txt ├── README.md ├── catalog-info.yaml ├── docs └── CONTRIBUTING.md ├── index.ts ├── package.json ├── renovate.json ├── scripts ├── check-spdx └── generate-notice.js ├── tsconfig.json └── yarn.lock /.buildkite/default-pipeline.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # $yaml-language-server: $schema=https://raw.githubusercontent.com/buildkite/pipeline-schema/main/schema.json 3 | steps: 4 | - label: "Check License" 5 | command: "npm install && npm run license-checker && npm run license-header" 6 | 7 | - label: "Build" 8 | command: "npm install && npm run build" 9 | -------------------------------------------------------------------------------- /.buildkite/diff: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Produces a list of changed files between two commits (works for merges and 3 | # regular commits). 4 | # Used in conjunction with the monorepo-diff-buildkite-plugin to determine 5 | # which pipelines to upload/trigger based on the files changed. 6 | 7 | [ $# -lt 1 ] && { echo "argument is missing."; exit 1; } 8 | 9 | COMMIT=$1 10 | 11 | HEAD_BRANCH=$(git remote show origin | awk '/HEAD branch/ {print $NF}') 12 | BRANCH_POINT_COMMIT=$(git merge-base "$HEAD_BRANCH" "$COMMIT") 13 | 14 | if [ "$BUILDKITE_BRANCH" == "$HEAD_BRANCH" ]; then 15 | echo "diff between $COMMIT and HEAD~1" 16 | git diff --raw HEAD~1 | awk '{print $6; if($7) {print $7}}' 17 | else 18 | echo "diff between $COMMIT and $BRANCH_POINT_COMMIT" 19 | git diff --raw "$COMMIT".."$BRANCH_POINT_COMMIT" | awk '{print $6; if($7) {print $7}}' 20 | fi 21 | -------------------------------------------------------------------------------- /.buildkite/pipeline.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # $yaml-language-server: $schema=https://raw.githubusercontent.com/buildkite/pipeline-schema/main/schema.json 3 | steps: 4 | - label: "Triggering pipelines" 5 | plugins: 6 | monorepo-diff#v1.4.0: 7 | diff: ".buildkite/diff ${BUILDKITE_COMMIT}" 8 | wait: true 9 | watch: 10 | # if our Renovate configuration is amended, then make sure we have well-formed config 11 | # for more info, see https://docs.elastic.dev/plat-prod-team/service-catalogue/renovate/testing-renovate-changes 12 | - path: "renovate.json" 13 | config: 14 | label: "Verify Renovate configuration" 15 | command: "renovate-config-validator" 16 | agents: 17 | image: "docker.elastic.co/ci-agent-images/pipelib:0.13.0@sha256:190464950de81cb3390bd5e07bb1cc171dd4a765c1ce5de58ebca476f9a6839f" 18 | # if our catalog-info.yaml is changed, make sure it's well-formed according to our internal standards as well as Backstage's validation 19 | - path: "catalog-info.yaml" 20 | config: 21 | command: "/agent/check-catalog-info.sh" 22 | agents: 23 | image: "docker.elastic.co/ci-agent-images/pipelib:0.13.0@sha256:190464950de81cb3390bd5e07bb1cc171dd4a765c1ce5de58ebca476f9a6839f" 24 | - default: 25 | config: 26 | label: ":pipeline: Upload default Pipeline" 27 | command: "buildkite-agent pipeline upload .buildkite/default-pipeline.yml" 28 | -------------------------------------------------------------------------------- /.buildkite/pull-requests.json: -------------------------------------------------------------------------------- 1 | { 2 | "jobs": [ 3 | { 4 | "enabled": true, 5 | "pipelineSlug": "mcp-server-elasticsearch", 6 | "allow_org_users": true, 7 | "allowed_repo_permissions": [ 8 | "admin", 9 | "write" 10 | ], 11 | "allowed_list": [], 12 | "set_commit_status": true, 13 | "commit_status_context": "buildkite/mcp-server-elasticsearch", 14 | "build_on_commit": false, 15 | "build_on_comment": true, 16 | "trigger_comment_regex": "^(?:(?:buildkite\\W+)?(?:build|test)\\W+(?:this|it))", 17 | "always_trigger_comment_regex": "^(?:(?:buildkite\\W+)?(?:build|test)\\W+(?:this|it))", 18 | "skip_ci_labels": [ 19 | "skip-ci" 20 | ], 21 | "skip_target_branches": [], 22 | "always_require_ci_on_changed": [] 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # These owners will be the default owners for everything in 2 | # the repo. 3 | * @elastic/devtools-team 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 22.16.0 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Elasticsearch MCP Server 2 | 3 | This repository contains experimental features intended for research and evaluation and are not production-ready. 4 | 5 | Connect to your Elasticsearch data directly from any MCP Client (like Claude Desktop) using the Model Context Protocol (MCP). 6 | 7 | This server connects agents to your Elasticsearch data using the Model Context Protocol. It allows you to interact with your Elasticsearch indices through natural language conversations. 8 | 9 | 10 | Elasticsearch Server MCP server 11 | 12 | 13 | ## Available Tools 14 | 15 | * `list_indices`: List all available Elasticsearch indices 16 | * `get_mappings`: Get field mappings for a specific Elasticsearch index 17 | * `search`: Perform an Elasticsearch search with the provided query DSL 18 | * `get_shards`: Get shard information for all or specific indices 19 | 20 | ## Prerequisites 21 | 22 | * An Elasticsearch instance 23 | * Elasticsearch authentication credentials (API key or username/password) 24 | * MCP Client (e.g. Claude Desktop) 25 | 26 | ## Demo 27 | 28 | https://github.com/user-attachments/assets/5dd292e1-a728-4ca7-8f01-1380d1bebe0c 29 | 30 | ## Installation & Setup 31 | 32 | ### Using the Published NPM Package 33 | 34 | > [!TIP] 35 | > The easiest way to use Elasticsearch MCP Server is through the published npm package. 36 | 37 | 1. **Configure MCP Client** 38 | - Open your MCP Client. See the [list of MCP Clients](https://modelcontextprotocol.io/clients), here we are configuring Claude Desktop. 39 | - Go to **Settings > Developer > MCP Servers** 40 | - Click `Edit Config` and add a new MCP Server with the following configuration: 41 | 42 | ```json 43 | { 44 | "mcpServers": { 45 | "elasticsearch-mcp-server": { 46 | "command": "npx", 47 | "args": [ 48 | "-y", 49 | "@elastic/mcp-server-elasticsearch" 50 | ], 51 | "env": { 52 | "ES_URL": "your-elasticsearch-url", 53 | "ES_API_KEY": "your-api-key" 54 | } 55 | } 56 | } 57 | } 58 | ``` 59 | 60 | 2. **Start a Conversation** 61 | - Open a new conversation in your MCP Client 62 | - The MCP server should connect automatically 63 | - You can now ask questions about your Elasticsearch data 64 | 65 | ### Configuration Options 66 | 67 | The Elasticsearch MCP Server supports configuration options to connect to your Elasticsearch: 68 | 69 | > [!NOTE] 70 | > You must provide either an API key or both username and password for authentication. 71 | 72 | 73 | | Environment Variable | Description | Required | 74 | |---------------------|-------------|----------| 75 | | `ES_URL` | Your Elasticsearch instance URL | Yes | 76 | | `ES_API_KEY` | Elasticsearch API key for authentication | No | 77 | | `ES_USERNAME` | Elasticsearch username for basic authentication | No | 78 | | `ES_PASSWORD` | Elasticsearch password for basic authentication | No | 79 | | `ES_CA_CERT` | Path to custom CA certificate for Elasticsearch SSL/TLS | No | 80 | | `ES_PATH_PREFIX` | Path prefix for Elasticsearch instance exposed at a non-root path | No | 81 | 82 | 83 | ### Developing Locally 84 | 85 | > [!NOTE] 86 | > If you want to modify or extend the MCP Server, follow these local development steps. 87 | 88 | 1. **Use the correct Node.js version** 89 | ```bash 90 | nvm use 91 | ``` 92 | 93 | 2. **Install Dependencies** 94 | ```bash 95 | npm install 96 | ``` 97 | 98 | 3. **Build the Project** 99 | ```bash 100 | npm run build 101 | ``` 102 | 103 | 4. **Run locally in Claude Desktop App** 104 | - Open **Claude Desktop App** 105 | - Go to **Settings > Developer > MCP Servers** 106 | - Click `Edit Config` and add a new MCP Server with the following configuration: 107 | 108 | ```json 109 | { 110 | "mcpServers": { 111 | "elasticsearch-mcp-server-local": { 112 | "command": "node", 113 | "args": [ 114 | "/path/to/your/project/dist/index.js" 115 | ], 116 | "env": { 117 | "ES_URL": "your-elasticsearch-url", 118 | "ES_API_KEY": "your-api-key" 119 | } 120 | } 121 | } 122 | } 123 | ``` 124 | 125 | 5. **Debugging with MCP Inspector** 126 | ```bash 127 | ES_URL=your-elasticsearch-url ES_API_KEY=your-api-key npm run inspector 128 | ``` 129 | 130 | This will start the MCP Inspector, allowing you to debug and analyze requests. You should see: 131 | 132 | ```bash 133 | Starting MCP inspector... 134 | Proxy server listening on port 3000 135 | 136 | 🔍 MCP Inspector is up and running at http://localhost:5173 🚀 137 | ``` 138 | 139 | ## Contributing 140 | 141 | We welcome contributions from the community! For details on how to contribute, please see [Contributing Guidelines](/docs/CONTRIBUTING.md). 142 | 143 | ## Example Questions 144 | 145 | > [!TIP] 146 | > Here are some natural language queries you can try with your MCP Client. 147 | 148 | * "What indices do I have in my Elasticsearch cluster?" 149 | * "Show me the field mappings for the 'products' index." 150 | * "Find all orders over $500 from last month." 151 | * "Which products received the most 5-star reviews?" 152 | 153 | ## How It Works 154 | 155 | 1. The MCP Client analyzes your request and determines which Elasticsearch operations are needed. 156 | 2. The MCP server carries out these operations (listing indices, fetching mappings, performing searches). 157 | 3. The MCP Client processes the results and presents them in a user-friendly format. 158 | 159 | ## Security Best Practices 160 | 161 | > [!WARNING] 162 | > Avoid using cluster-admin privileges. Create dedicated API keys with limited scope and apply fine-grained access control at the index level to prevent unauthorized data access. 163 | 164 | You can create a dedicated Elasticsearch API key with minimal permissions to control access to your data: 165 | 166 | ``` 167 | POST /_security/api_key 168 | { 169 | "name": "es-mcp-server-access", 170 | "role_descriptors": { 171 | "mcp_server_role": { 172 | "cluster": [ 173 | "monitor" 174 | ], 175 | "indices": [ 176 | { 177 | "names": [ 178 | "index-1", 179 | "index-2", 180 | "index-pattern-*" 181 | ], 182 | "privileges": [ 183 | "read", 184 | "view_index_metadata" 185 | ] 186 | } 187 | ] 188 | } 189 | } 190 | } 191 | ``` 192 | 193 | ## License 194 | 195 | This project is licensed under the Apache License 2.0. 196 | 197 | ## Troubleshooting 198 | 199 | * Ensure your MCP configuration is correct. 200 | * Verify that your Elasticsearch URL is accessible from your machine. 201 | * Check that your authentication credentials (API key or username/password) have the necessary permissions. 202 | * If using SSL/TLS with a custom CA, verify that the certificate path is correct and the file is readable. 203 | * Look at the terminal output for error messages. 204 | 205 | If you encounter issues, feel free to open an issue on the GitHub repository. 206 | -------------------------------------------------------------------------------- /catalog-info.yaml: -------------------------------------------------------------------------------- 1 | # Declare your Buildkite pipelines below 2 | --- 3 | # yaml-language-server: $schema=https://gist.githubusercontent.com/elasticmachine/988b80dae436cafea07d9a4a460a011d/raw/rre.schema.json 4 | apiVersion: backstage.io/v1alpha1 5 | kind: Resource 6 | metadata: 7 | name: buildkite-pipeline-mcp-server-elasticsearch 8 | description: Buildkite Pipeline for mcp-server-elasticsearch 9 | links: 10 | - title: Pipeline 11 | url: https://buildkite.com/elastic/mcp-server-elasticsearch 12 | 13 | spec: 14 | type: buildkite-pipeline 15 | owner: group:devtools-team 16 | system: buildkite 17 | implementation: 18 | apiVersion: buildkite.elastic.dev/v1 19 | kind: Pipeline 20 | metadata: 21 | name: mcp-server-elasticsearch 22 | description: Run checks for the mcp-server-elasticsearch package 23 | spec: 24 | repository: elastic/mcp-server-elasticsearch 25 | pipeline_file: ".buildkite/pipeline.yml" 26 | teams: 27 | search-extract-and-transform: 28 | access_level: MANAGE_BUILD_AND_READ 29 | devtools-team: 30 | access_level: MANAGE_BUILD_AND_READ 31 | everyone: 32 | access_level: READ_ONLY 33 | -------------------------------------------------------------------------------- /docs/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | [fork]: https://github.com/elastic/mcp-server-elasticsearch/fork 4 | [pr]: https://github.com/elastic/mcp-server-elasticsearch/compare 5 | [code-of-conduct]: https://www.elastic.co/community/codeofconduct 6 | 7 | Elasticsearch MCP Server client is open source and we love to receive contributions from our community — you! 8 | 9 | There are many ways to contribute, from writing tutorials or blog posts, improving the documentation, submitting bug reports and feature requests or writing code. 10 | 11 | 12 | Contributions are [released](https://help.github.com/articles/github-terms-of-service/#6-contributions-under-repository-license) under the [project's license](../LICENSE). 13 | 14 | Please note that this project follows the [Elastic's Open Source Community Code of Conduct][code-of-conduct]. 15 | 16 | ## Setup 17 | 18 | 1. Install Node.js 18+ (using [nvm](https://github.com/nvm-sh/nvm) is recommended) 19 | ```bash 20 | nvm use 21 | ``` 22 | 2. Install dependencies 23 | ```bash 24 | npm install 25 | ``` 26 | 3. Build the project 27 | ```bash 28 | npm run build 29 | ``` 30 | 31 | ## Start Elasticsearch 32 | 33 | You can use either: 34 | 35 | 1. **Elastic Cloud** - Use an existing Elasticsearch deployment and your API key 36 | 2. **Local Elasticsearch** - Run Elasticsearch locally using the [start-local](https://www.elastic.co/guide/en/elasticsearch/reference/current/run-elasticsearch-locally.html) script: 37 | ```bash 38 | curl -fsSL https://elastic.co/start-local | sh 39 | ``` 40 | 41 | This starts Elasticsearch and Kibana with Docker: 42 | - Elasticsearch: http://localhost:9200 43 | - Kibana: http://localhost:5601 44 | 45 | > [!NOTE] 46 | > The `start-local` setup is for development only. It uses basic authentication and disables HTTPS. 47 | 48 | ## Development Workflow 49 | 50 | 1. [Fork][fork] and clone the repository 51 | 2. Create a new branch: `git checkout -b my-branch-name` 52 | 3. Make your changes 53 | 4. Test locally with the MCP Inspector: 54 | ```bash 55 | ES_URL=your-elasticsearch-url ES_API_KEY=your-api-key npm run inspector 56 | ``` 57 | 5. [Test with MCP Client](../README.md#developing-locally) 58 | 6. Push to your fork and [submit a pull request][pr] 59 | 60 | ## Best Practices 61 | 62 | - Follow existing code style and patterns 63 | - Write [conventional commits](https://www.conventionalcommits.org/) 64 | - Include tests for your changes 65 | - Keep PRs focused on a single concern 66 | - Update documentation as needed 67 | - Use TypeScript with proper typing 68 | - Add JSDoc comments to new functions 69 | 70 | ## Getting Help 71 | 72 | - Open an issue in the repository 73 | - Ask questions on [discuss.elastic.co](https://discuss.elastic.co/) 74 | 75 | ## Resources 76 | 77 | - [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) 78 | - [Using Pull Requests](https://help.github.com/articles/about-pull-requests/) 79 | - [Elastic Code of Conduct][code-of-conduct] 80 | -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /* 4 | * Copyright Elasticsearch B.V. and contributors 5 | * SPDX-License-Identifier: Apache-2.0 6 | */ 7 | 8 | import { z } from "zod"; 9 | import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; 10 | import { 11 | Client, 12 | estypes, 13 | ClientOptions, 14 | Transport, 15 | TransportRequestOptions, 16 | TransportRequestParams 17 | } from "@elastic/elasticsearch"; 18 | import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; 19 | import fs from "fs"; 20 | 21 | // Product metadata, used to generate the request User-Agent header and 22 | // passed to the McpServer constructor. 23 | const product = { 24 | name: "elasticsearch-mcp", 25 | version: "0.1.1", 26 | }; 27 | 28 | // Prepend a path prefix to every request path 29 | class CustomTransport extends Transport { 30 | private readonly pathPrefix: string; 31 | 32 | constructor(opts: ConstructorParameters[0], pathPrefix: string) { 33 | super(opts); 34 | this.pathPrefix = pathPrefix; 35 | } 36 | 37 | async request( 38 | params: TransportRequestParams, 39 | options?: TransportRequestOptions 40 | ): Promise { 41 | const newParams = { ...params, path: this.pathPrefix + params.path }; 42 | return super.request(newParams, options); 43 | } 44 | } 45 | 46 | // Configuration schema with auth options 47 | const ConfigSchema = z 48 | .object({ 49 | url: z 50 | .string() 51 | .trim() 52 | .min(1, "Elasticsearch URL cannot be empty") 53 | .url("Invalid Elasticsearch URL format") 54 | .describe("Elasticsearch server URL"), 55 | 56 | apiKey: z 57 | .string() 58 | .optional() 59 | .describe("API key for Elasticsearch authentication"), 60 | 61 | username: z 62 | .string() 63 | .optional() 64 | .describe("Username for Elasticsearch authentication"), 65 | 66 | password: z 67 | .string() 68 | .optional() 69 | .describe("Password for Elasticsearch authentication"), 70 | 71 | caCert: z 72 | .string() 73 | .optional() 74 | .describe("Path to custom CA certificate for Elasticsearch"), 75 | 76 | pathPrefix: z 77 | .string() 78 | .optional() 79 | .describe("Path prefix for Elasticsearch"), 80 | }) 81 | .refine( 82 | (data) => { 83 | // If username is provided, password must be provided 84 | if (data.username) { 85 | return !!data.password; 86 | } 87 | 88 | // If password is provided, username must be provided 89 | if (data.password) { 90 | return !!data.username; 91 | } 92 | 93 | // If apiKey is provided, it's valid 94 | if (data.apiKey) { 95 | return true; 96 | } 97 | 98 | // No auth is also valid (for local development) 99 | return true; 100 | }, 101 | { 102 | message: 103 | "Either ES_API_KEY or both ES_USERNAME and ES_PASSWORD must be provided, or no auth for local development", 104 | path: ["username", "password"], 105 | } 106 | ); 107 | 108 | type ElasticsearchConfig = z.infer; 109 | 110 | export async function createElasticsearchMcpServer( 111 | config: ElasticsearchConfig 112 | ) { 113 | const validatedConfig = ConfigSchema.parse(config); 114 | const { url, apiKey, username, password, caCert, pathPrefix } = validatedConfig; 115 | 116 | const clientOptions: ClientOptions = { 117 | node: url, 118 | headers: { 119 | "user-agent": `${product.name}/${product.version}`, 120 | }, 121 | }; 122 | 123 | if (pathPrefix) { 124 | const verifiedPathPrefix = pathPrefix; 125 | clientOptions.Transport = class extends CustomTransport { 126 | constructor(opts: ConstructorParameters[0]) { 127 | super(opts, verifiedPathPrefix); 128 | } 129 | }; 130 | } 131 | 132 | // Set up authentication 133 | if (apiKey) { 134 | clientOptions.auth = { apiKey }; 135 | } else if (username && password) { 136 | clientOptions.auth = { username, password }; 137 | } 138 | 139 | // Set up SSL/TLS certificate if provided 140 | if (caCert) { 141 | try { 142 | const ca = fs.readFileSync(caCert); 143 | clientOptions.tls = { ca }; 144 | } catch (error) { 145 | console.error( 146 | `Failed to read certificate file: ${ 147 | error instanceof Error ? error.message : String(error) 148 | }` 149 | ); 150 | } 151 | } 152 | 153 | const esClient = new Client(clientOptions); 154 | 155 | const server = new McpServer(product); 156 | 157 | // Tool 1: List indices 158 | server.tool( 159 | "list_indices", 160 | "List all available Elasticsearch indices", 161 | { 162 | indexPattern: z 163 | .string() 164 | .trim() 165 | .min(1, "Index pattern is required") 166 | .describe("Index pattern of Elasticsearch indices to list"), 167 | }, 168 | async ( {indexPattern} ) => { 169 | try { 170 | const response = await esClient.cat.indices({ 171 | index: indexPattern, 172 | format: "json" 173 | }); 174 | 175 | const indicesInfo = response.map((index) => ({ 176 | index: index.index, 177 | health: index.health, 178 | status: index.status, 179 | docsCount: index.docsCount, 180 | })); 181 | 182 | return { 183 | content: [ 184 | { 185 | type: "text" as const, 186 | text: `Found ${indicesInfo.length} indices`, 187 | }, 188 | { 189 | type: "text" as const, 190 | text: JSON.stringify(indicesInfo, null, 2), 191 | }, 192 | ], 193 | }; 194 | } catch (error) { 195 | console.error( 196 | `Failed to list indices: ${ 197 | error instanceof Error ? error.message : String(error) 198 | }` 199 | ); 200 | return { 201 | content: [ 202 | { 203 | type: "text" as const, 204 | text: `Error: ${ 205 | error instanceof Error ? error.message : String(error) 206 | }`, 207 | }, 208 | ], 209 | }; 210 | } 211 | } 212 | ); 213 | 214 | // Tool 2: Get mappings for an index 215 | server.tool( 216 | "get_mappings", 217 | "Get field mappings for a specific Elasticsearch index", 218 | { 219 | index: z 220 | .string() 221 | .trim() 222 | .min(1, "Index name is required") 223 | .describe("Name of the Elasticsearch index to get mappings for"), 224 | }, 225 | async ({ index }) => { 226 | try { 227 | const mappingResponse = await esClient.indices.getMapping({ 228 | index, 229 | }); 230 | 231 | return { 232 | content: [ 233 | { 234 | type: "text" as const, 235 | text: `Mappings for index: ${index}`, 236 | }, 237 | { 238 | type: "text" as const, 239 | text: `Mappings for index ${index}: ${JSON.stringify( 240 | mappingResponse[index]?.mappings || {}, 241 | null, 242 | 2 243 | )}`, 244 | }, 245 | ], 246 | }; 247 | } catch (error) { 248 | console.error( 249 | `Failed to get mappings: ${ 250 | error instanceof Error ? error.message : String(error) 251 | }` 252 | ); 253 | return { 254 | content: [ 255 | { 256 | type: "text" as const, 257 | text: `Error: ${ 258 | error instanceof Error ? error.message : String(error) 259 | }`, 260 | }, 261 | ], 262 | }; 263 | } 264 | } 265 | ); 266 | 267 | // Tool 3: Search an index with simplified parameters 268 | server.tool( 269 | "search", 270 | "Perform an Elasticsearch search with the provided query DSL. Highlights are always enabled.", 271 | { 272 | index: z 273 | .string() 274 | .trim() 275 | .min(1, "Index name is required") 276 | .describe("Name of the Elasticsearch index to search"), 277 | 278 | queryBody: z 279 | .record(z.any()) 280 | .refine( 281 | (val) => { 282 | try { 283 | JSON.parse(JSON.stringify(val)); 284 | return true; 285 | } catch (e) { 286 | return false; 287 | } 288 | }, 289 | { 290 | message: "queryBody must be a valid Elasticsearch query DSL object", 291 | } 292 | ) 293 | .describe( 294 | "Complete Elasticsearch query DSL object that can include query, size, from, sort, etc." 295 | ), 296 | }, 297 | async ({ index, queryBody }) => { 298 | try { 299 | // Get mappings to identify text fields for highlighting 300 | const mappingResponse = await esClient.indices.getMapping({ 301 | index, 302 | }); 303 | 304 | const indexMappings = mappingResponse[index]?.mappings || {}; 305 | 306 | const searchRequest: estypes.SearchRequest = { 307 | index, 308 | ...queryBody, 309 | }; 310 | 311 | // Always do highlighting 312 | if (indexMappings.properties) { 313 | const textFields: Record = {}; 314 | 315 | for (const [fieldName, fieldData] of Object.entries( 316 | indexMappings.properties 317 | )) { 318 | if (fieldData.type === "text" || "dense_vector" in fieldData) { 319 | textFields[fieldName] = {}; 320 | } 321 | } 322 | 323 | searchRequest.highlight = { 324 | fields: textFields, 325 | pre_tags: [""], 326 | post_tags: [""], 327 | }; 328 | } 329 | 330 | const result = await esClient.search(searchRequest); 331 | 332 | // Extract the 'from' parameter from queryBody, defaulting to 0 if not provided 333 | const from = queryBody.from || 0; 334 | 335 | const contentFragments = result.hits.hits.map((hit) => { 336 | const highlightedFields = hit.highlight || {}; 337 | const sourceData = hit._source || {}; 338 | 339 | let content = ""; 340 | 341 | for (const [field, highlights] of Object.entries(highlightedFields)) { 342 | if (highlights && highlights.length > 0) { 343 | content += `${field} (highlighted): ${highlights.join( 344 | " ... " 345 | )}\n`; 346 | } 347 | } 348 | 349 | for (const [field, value] of Object.entries(sourceData)) { 350 | if (!(field in highlightedFields)) { 351 | content += `${field}: ${JSON.stringify(value)}\n`; 352 | } 353 | } 354 | 355 | return { 356 | type: "text" as const, 357 | text: content.trim(), 358 | }; 359 | }); 360 | 361 | const metadataFragment = { 362 | type: "text" as const, 363 | text: `Total results: ${ 364 | typeof result.hits.total === "number" 365 | ? result.hits.total 366 | : result.hits.total?.value || 0 367 | }, showing ${result.hits.hits.length} from position ${from}`, 368 | }; 369 | 370 | return { 371 | content: [metadataFragment, ...contentFragments], 372 | }; 373 | } catch (error) { 374 | console.error( 375 | `Search failed: ${ 376 | error instanceof Error ? error.message : String(error) 377 | }` 378 | ); 379 | return { 380 | content: [ 381 | { 382 | type: "text" as const, 383 | text: `Error: ${ 384 | error instanceof Error ? error.message : String(error) 385 | }`, 386 | }, 387 | ], 388 | }; 389 | } 390 | } 391 | ); 392 | 393 | // Tool 4: Get shard information 394 | server.tool( 395 | "get_shards", 396 | "Get shard information for all or specific indices", 397 | { 398 | index: z 399 | .string() 400 | .optional() 401 | .describe("Optional index name to get shard information for"), 402 | }, 403 | async ({ index }) => { 404 | try { 405 | const response = await esClient.cat.shards({ 406 | index, 407 | format: "json", 408 | }); 409 | 410 | const shardsInfo = response.map((shard) => ({ 411 | index: shard.index, 412 | shard: shard.shard, 413 | prirep: shard.prirep, 414 | state: shard.state, 415 | docs: shard.docs, 416 | store: shard.store, 417 | ip: shard.ip, 418 | node: shard.node, 419 | })); 420 | 421 | const metadataFragment = { 422 | type: "text" as const, 423 | text: `Found ${shardsInfo.length} shards${ 424 | index ? ` for index ${index}` : "" 425 | }`, 426 | }; 427 | 428 | return { 429 | content: [ 430 | metadataFragment, 431 | { 432 | type: "text" as const, 433 | text: JSON.stringify(shardsInfo, null, 2), 434 | }, 435 | ], 436 | }; 437 | } catch (error) { 438 | console.error( 439 | `Failed to get shard information: ${ 440 | error instanceof Error ? error.message : String(error) 441 | }` 442 | ); 443 | return { 444 | content: [ 445 | { 446 | type: "text" as const, 447 | text: `Error: ${ 448 | error instanceof Error ? error.message : String(error) 449 | }`, 450 | }, 451 | ], 452 | }; 453 | } 454 | } 455 | ); 456 | 457 | return server; 458 | } 459 | 460 | const config: ElasticsearchConfig = { 461 | url: process.env.ES_URL || "", 462 | apiKey: process.env.ES_API_KEY || "", 463 | username: process.env.ES_USERNAME || "", 464 | password: process.env.ES_PASSWORD || "", 465 | caCert: process.env.ES_CA_CERT || "", 466 | pathPrefix: process.env.ES_PATH_PREFIX || "", 467 | }; 468 | 469 | async function main() { 470 | const transport = new StdioServerTransport(); 471 | const server = await createElasticsearchMcpServer(config); 472 | 473 | await server.connect(transport); 474 | 475 | process.on("SIGINT", async () => { 476 | await server.close(); 477 | process.exit(0); 478 | }); 479 | } 480 | 481 | main().catch((error) => { 482 | console.error( 483 | "Server error:", 484 | error instanceof Error ? error.message : String(error) 485 | ); 486 | process.exit(1); 487 | }); 488 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@elastic/mcp-server-elasticsearch", 3 | "description": "Elasticsearch MCP Server", 4 | "version": "0.1.1", 5 | "license": "Apache-2.0", 6 | "author": "Elastic", 7 | "type": "module", 8 | "main": "dist/index.js", 9 | "module": "dist/index.js", 10 | "bin": { 11 | "mcp-server-elasticsearch": "./dist/index.js" 12 | }, 13 | "repository": "https://github.com/elastic/mcp-server-elasticsearch", 14 | "bugs": "https://github.com/elastic/mcp-server-elasticsearch/issues", 15 | "homepage": "https://github.com/elastic/mcp-server-elasticsearch", 16 | "keywords": [ 17 | "elasticsearch", 18 | "search", 19 | "mcp", 20 | "mcp-server" 21 | ], 22 | "files": [ 23 | "dist", 24 | "NOTICE.txt", 25 | "LICENSE", 26 | "README.md" 27 | ], 28 | "scripts": { 29 | "build": "tsc && shx chmod +x dist/*.js", 30 | "prepare": "npm run build", 31 | "watch": "tsc --watch", 32 | "start": "node dist/index.js", 33 | "inspector": "npx @modelcontextprotocol/inspector node dist/index.js", 34 | "test": "npm run build", 35 | "license-checker": "license-checker --production --onlyAllow='MIT;Apache-2.0;Apache1.1;ISC;BSD-3-Clause;BSD-2-Clause;0BSD'", 36 | "license-header": "./scripts/check-spdx", 37 | "generate-notice": "node ./scripts/generate-notice.js" 38 | }, 39 | "dependencies": { 40 | "@elastic/elasticsearch": "^9.0.0", 41 | "@modelcontextprotocol/sdk": "1.12.1" 42 | }, 43 | "engines": { 44 | "node": ">=18" 45 | }, 46 | "devDependencies": { 47 | "@types/node": "22.15.29", 48 | "license-checker": "25.0.1", 49 | "shx": "0.4.0", 50 | "typescript": "5.8.3" 51 | }, 52 | "publishConfig": { 53 | "access": "public" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "local>elastic/renovate-config" 5 | ], 6 | "schedule": [ 7 | "after 1am on monday" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /scripts/check-spdx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Copyright Elasticsearch B.V. and contributors 4 | # SPDX-License-Identifier: Apache-2.0 5 | 6 | the_exit=0 7 | 8 | check_file() { 9 | if grep -q "Copyright Elasticsearch B.V. and contributors" "$1" && \ 10 | grep -q "SPDX-License-Identifier: Apache-2.0" "$1"; then 11 | echo "Correct: $1" 12 | else 13 | echo "Incorrect: $1" 14 | the_exit=1 15 | fi 16 | } 17 | 18 | echo "SPDX license header check" 19 | for file in $(git ls-files | grep -E '\.(ts|js|mjs)$'); do 20 | check_file "$file" 21 | done 22 | 23 | exit "$the_exit" 24 | -------------------------------------------------------------------------------- /scripts/generate-notice.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /* 4 | * Copyright Elasticsearch B.V. and contributors 5 | * SPDX-License-Identifier: Apache-2.0 6 | */ 7 | 8 | import { exec } from "child_process"; 9 | import fs from "fs/promises"; 10 | import path from "path"; 11 | import { fileURLToPath } from "url"; 12 | 13 | const __dirname = path.dirname(fileURLToPath(import.meta.url)); 14 | 15 | // Execute license-checker command 16 | const generateNotice = () => { 17 | return new Promise((resolve, reject) => { 18 | exec("npx license-checker --json --production", (error, stdout) => { 19 | if (error) { 20 | return reject(error); 21 | } 22 | resolve(JSON.parse(stdout)); 23 | }); 24 | }); 25 | }; 26 | 27 | async function createNoticeFile() { 28 | // Custom header for notice file 29 | let noticeContent = `Elasticsearch MCP Server 30 | Copyright 2025 Elasticsearch B.V. 31 | 32 | The Elasticsearch MCP Server contains the following third-party dependencies: 33 | 34 | `; 35 | 36 | try { 37 | const licenses = await generateNotice(); 38 | 39 | for (const [pkgNameVer, info] of Object.entries(licenses)) { 40 | const pkgName = 41 | pkgNameVer.split("@")[0] === "" 42 | ? "@" + pkgNameVer.split("@")[1] 43 | : pkgNameVer.split("@")[0]; 44 | 45 | // Extract version from the pkgNameVer string 46 | let version; 47 | if (pkgNameVer.split("@")[0] === "") { 48 | // Handle scoped packages (@organization/package-name@1.0.0) 49 | const parts = pkgNameVer.split("@"); 50 | if (parts.length >= 3) { 51 | version = parts[2]; 52 | } 53 | } else { 54 | // Handle regular packages (package-name@1.0.0) 55 | const parts = pkgNameVer.split("@"); 56 | if (parts.length >= 2) { 57 | version = parts[1]; 58 | } 59 | } 60 | 61 | // Use extracted version if available, otherwise fall back to info.version 62 | const displayVersion = version || info.version || ""; 63 | 64 | noticeContent += `\n-------------------------------------------------------------------\n`; 65 | noticeContent += `Package: ${pkgName}\n`; 66 | noticeContent += `Version: ${displayVersion}\n`; 67 | noticeContent += `License: ${info.licenses || "Unknown"}\n`; 68 | 69 | if (info.publisher) { 70 | noticeContent += `Author: ${info.publisher}\n`; 71 | } 72 | 73 | noticeContent += `\n`; 74 | 75 | // Include license text if available 76 | if (info.licenseFile && typeof info.licenseFile === "string") { 77 | try { 78 | const licenseText = await fs.readFile(info.licenseFile, "utf-8"); 79 | noticeContent += `${licenseText.trim()}\n`; 80 | } catch (err) { 81 | noticeContent += `License text not available.\n`; 82 | } 83 | } else { 84 | noticeContent += `License text not available.\n`; 85 | } 86 | } 87 | 88 | // Write the NOTICE.txt file in the repo root 89 | await fs.writeFile( 90 | path.join(__dirname, "..", "NOTICE.txt"), 91 | noticeContent, 92 | "utf-8" 93 | ); 94 | console.log("NOTICE.txt file has been generated successfully."); 95 | } catch (error) { 96 | console.error("Error generating NOTICE.txt:", error); 97 | } 98 | } 99 | 100 | createNoticeFile(); 101 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2022", 4 | "module": "Node16", 5 | "moduleResolution": "Node16", 6 | "esModuleInterop": true, 7 | "outDir": "./dist", 8 | "rootDir": "./", 9 | "strict": true, 10 | "declaration": true, 11 | "skipLibCheck": true, 12 | "forceConsistentCasingInFileNames": true 13 | }, 14 | "include": [ 15 | "*.ts" 16 | ], 17 | "exclude": [ 18 | "node_modules", 19 | "dist" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@elastic/elasticsearch@^9.0.0": 6 | version "9.0.2" 7 | resolved "https://registry.yarnpkg.com/@elastic/elasticsearch/-/elasticsearch-9.0.2.tgz#66fb8465fdeabb0c1174d3c48c0a2d5ad5d177c4" 8 | integrity sha512-uKA0PuPSND3OhHH9UFqnKZfxifAg/8mQW4VnrQ+sUtusTbPhGuErs5NeWCPyd/RLgruBWBmLSv1zzEv5GS+UnA== 9 | dependencies: 10 | "@elastic/transport" "^9.0.1" 11 | apache-arrow "18.x - 19.x" 12 | tslib "^2.4.0" 13 | 14 | "@elastic/transport@^9.0.1": 15 | version "9.0.1" 16 | resolved "https://registry.npmjs.org/@elastic/transport/-/transport-9.0.1.tgz" 17 | integrity sha512-6jVZQzAe2iTRsZA6I/wkO2BjzJFD9BHTASo2YgGfbcoV95ey/8D/ABRhpgfg35LIDrmialIGJBizunSwxsRDLg== 18 | dependencies: 19 | "@opentelemetry/api" "1.x" 20 | debug "^4.4.0" 21 | hpagent "^1.2.0" 22 | ms "^2.1.3" 23 | secure-json-parse "^3.0.2" 24 | tslib "^2.8.1" 25 | undici "^7.2.3" 26 | 27 | "@modelcontextprotocol/sdk@1.12.1": 28 | version "1.12.1" 29 | resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.12.1.tgz#f77503f0263b33cb1e5b81a6ff0c322393cabd37" 30 | integrity sha512-KG1CZhZfWg+u8pxeM/mByJDScJSrjjxLc8fwQqbsS8xCjBmQfMNEBTotYdNanKekepnfRI85GtgQlctLFpcYPw== 31 | dependencies: 32 | ajv "^6.12.6" 33 | content-type "^1.0.5" 34 | cors "^2.8.5" 35 | cross-spawn "^7.0.5" 36 | eventsource "^3.0.2" 37 | express "^5.0.1" 38 | express-rate-limit "^7.5.0" 39 | pkce-challenge "^5.0.0" 40 | raw-body "^3.0.0" 41 | zod "^3.23.8" 42 | zod-to-json-schema "^3.24.1" 43 | 44 | "@nodelib/fs.scandir@2.1.5": 45 | version "2.1.5" 46 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 47 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 48 | dependencies: 49 | "@nodelib/fs.stat" "2.0.5" 50 | run-parallel "^1.1.9" 51 | 52 | "@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": 53 | version "2.0.5" 54 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 55 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 56 | 57 | "@nodelib/fs.walk@^1.2.3": 58 | version "1.2.8" 59 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 60 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 61 | dependencies: 62 | "@nodelib/fs.scandir" "2.1.5" 63 | fastq "^1.6.0" 64 | 65 | "@opentelemetry/api@1.x": 66 | version "1.9.0" 67 | resolved "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz" 68 | integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== 69 | 70 | "@swc/helpers@^0.5.11": 71 | version "0.5.17" 72 | resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.17.tgz#5a7be95ac0f0bf186e7e6e890e7a6f6cda6ce971" 73 | integrity sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A== 74 | dependencies: 75 | tslib "^2.8.0" 76 | 77 | "@types/command-line-args@^5.2.3": 78 | version "5.2.3" 79 | resolved "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.3.tgz" 80 | integrity sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw== 81 | 82 | "@types/command-line-usage@^5.0.4": 83 | version "5.0.4" 84 | resolved "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz" 85 | integrity sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg== 86 | 87 | "@types/node@22.15.29": 88 | version "22.15.29" 89 | resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.29.tgz#c75999124a8224a3f79dd8b6ccfb37d74098f678" 90 | integrity sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ== 91 | dependencies: 92 | undici-types "~6.21.0" 93 | 94 | "@types/node@^20.13.0": 95 | version "20.17.57" 96 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.57.tgz#f807455e3303ba8ba08fcb1db90619356abfaa99" 97 | integrity sha512-f3T4y6VU4fVQDKVqJV4Uppy8c1p/sVvS3peyqxyWnzkqXFJLRU7Y1Bl7rMS1Qe9z0v4M6McY0Fp9yBsgHJUsWQ== 98 | dependencies: 99 | undici-types "~6.19.2" 100 | 101 | "@types/node@22.14.1": 102 | version "22.14.1" 103 | resolved "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz" 104 | integrity sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw== 105 | dependencies: 106 | undici-types "~6.21.0" 107 | 108 | abbrev@1: 109 | version "1.1.1" 110 | resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" 111 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 112 | 113 | accepts@^2.0.0: 114 | version "2.0.0" 115 | resolved "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz" 116 | integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng== 117 | dependencies: 118 | mime-types "^3.0.0" 119 | negotiator "^1.0.0" 120 | 121 | ajv@^6.12.6: 122 | version "6.12.6" 123 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 124 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 125 | dependencies: 126 | fast-deep-equal "^3.1.1" 127 | fast-json-stable-stringify "^2.0.0" 128 | json-schema-traverse "^0.4.1" 129 | uri-js "^4.2.2" 130 | 131 | ansi-styles@^3.2.1: 132 | version "3.2.1" 133 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" 134 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 135 | dependencies: 136 | color-convert "^1.9.0" 137 | 138 | ansi-styles@^4.1.0: 139 | version "4.3.0" 140 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 141 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 142 | dependencies: 143 | color-convert "^2.0.1" 144 | 145 | "apache-arrow@18.x - 19.x": 146 | version "19.0.1" 147 | resolved "https://registry.npmjs.org/apache-arrow/-/apache-arrow-19.0.1.tgz" 148 | integrity sha512-APmMLzS4qbTivLrPdQXexGM4JRr+0g62QDaobzEvip/FdQIrv2qLy0mD5Qdmw4buydtVJgbFeKR8f59I6PPGDg== 149 | dependencies: 150 | "@swc/helpers" "^0.5.11" 151 | "@types/command-line-args" "^5.2.3" 152 | "@types/command-line-usage" "^5.0.4" 153 | "@types/node" "^20.13.0" 154 | command-line-args "^6.0.1" 155 | command-line-usage "^7.0.1" 156 | flatbuffers "^24.3.25" 157 | json-bignum "^0.0.3" 158 | tslib "^2.6.2" 159 | 160 | array-back@^6.2.2: 161 | version "6.2.2" 162 | resolved "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz" 163 | integrity sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw== 164 | 165 | array-find-index@^1.0.2: 166 | version "1.0.2" 167 | resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" 168 | integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== 169 | 170 | asap@^2.0.0: 171 | version "2.0.6" 172 | resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" 173 | integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== 174 | 175 | balanced-match@^1.0.0: 176 | version "1.0.2" 177 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 178 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 179 | 180 | body-parser@^2.0.1: 181 | version "2.1.0" 182 | resolved "https://registry.npmjs.org/body-parser/-/body-parser-2.1.0.tgz" 183 | integrity sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ== 184 | dependencies: 185 | bytes "^3.1.2" 186 | content-type "^1.0.5" 187 | debug "^4.4.0" 188 | http-errors "^2.0.0" 189 | iconv-lite "^0.5.2" 190 | on-finished "^2.4.1" 191 | qs "^6.14.0" 192 | raw-body "^3.0.0" 193 | type-is "^2.0.0" 194 | 195 | brace-expansion@^1.1.7: 196 | version "1.1.11" 197 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 198 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 199 | dependencies: 200 | balanced-match "^1.0.0" 201 | concat-map "0.0.1" 202 | 203 | braces@^3.0.3: 204 | version "3.0.3" 205 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" 206 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 207 | dependencies: 208 | fill-range "^7.1.1" 209 | 210 | bytes@^3.1.2, bytes@3.1.2: 211 | version "3.1.2" 212 | resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" 213 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 214 | 215 | call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: 216 | version "1.0.2" 217 | resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" 218 | integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== 219 | dependencies: 220 | es-errors "^1.3.0" 221 | function-bind "^1.1.2" 222 | 223 | call-bound@^1.0.2: 224 | version "1.0.4" 225 | resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" 226 | integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== 227 | dependencies: 228 | call-bind-apply-helpers "^1.0.2" 229 | get-intrinsic "^1.3.0" 230 | 231 | chalk-template@^0.4.0: 232 | version "0.4.0" 233 | resolved "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz" 234 | integrity sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg== 235 | dependencies: 236 | chalk "^4.1.2" 237 | 238 | chalk@^2.4.1: 239 | version "2.4.2" 240 | resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" 241 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 242 | dependencies: 243 | ansi-styles "^3.2.1" 244 | escape-string-regexp "^1.0.5" 245 | supports-color "^5.3.0" 246 | 247 | chalk@^4.1.2: 248 | version "4.1.2" 249 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 250 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 251 | dependencies: 252 | ansi-styles "^4.1.0" 253 | supports-color "^7.1.0" 254 | 255 | color-convert@^1.9.0: 256 | version "1.9.3" 257 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" 258 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 259 | dependencies: 260 | color-name "1.1.3" 261 | 262 | color-convert@^2.0.1: 263 | version "2.0.1" 264 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 265 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 266 | dependencies: 267 | color-name "~1.1.4" 268 | 269 | color-name@~1.1.4: 270 | version "1.1.4" 271 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 272 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 273 | 274 | color-name@1.1.3: 275 | version "1.1.3" 276 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" 277 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 278 | 279 | command-line-args@^6.0.1: 280 | version "6.0.1" 281 | resolved "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.1.tgz" 282 | integrity sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg== 283 | dependencies: 284 | array-back "^6.2.2" 285 | find-replace "^5.0.2" 286 | lodash.camelcase "^4.3.0" 287 | typical "^7.2.0" 288 | 289 | command-line-usage@^7.0.1: 290 | version "7.0.3" 291 | resolved "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz" 292 | integrity sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q== 293 | dependencies: 294 | array-back "^6.2.2" 295 | chalk-template "^0.4.0" 296 | table-layout "^4.1.0" 297 | typical "^7.1.1" 298 | 299 | concat-map@0.0.1: 300 | version "0.0.1" 301 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 302 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 303 | 304 | content-disposition@^1.0.0: 305 | version "1.0.0" 306 | resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz" 307 | integrity sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg== 308 | dependencies: 309 | safe-buffer "5.2.1" 310 | 311 | content-type@^1.0.5, content-type@~1.0.4: 312 | version "1.0.5" 313 | resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" 314 | integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== 315 | 316 | cookie-signature@^1.2.1: 317 | version "1.2.2" 318 | resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz" 319 | integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== 320 | 321 | cookie@0.7.1: 322 | version "0.7.1" 323 | resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz" 324 | integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== 325 | 326 | cors@^2.8.5: 327 | version "2.8.5" 328 | resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" 329 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 330 | dependencies: 331 | object-assign "^4" 332 | vary "^1" 333 | 334 | cross-spawn@^6.0.0: 335 | version "6.0.6" 336 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz" 337 | integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== 338 | dependencies: 339 | nice-try "^1.0.4" 340 | path-key "^2.0.1" 341 | semver "^5.5.0" 342 | shebang-command "^1.2.0" 343 | which "^1.2.9" 344 | 345 | cross-spawn@^7.0.5: 346 | version "7.0.6" 347 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" 348 | integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== 349 | dependencies: 350 | path-key "^3.1.0" 351 | shebang-command "^2.0.0" 352 | which "^2.0.1" 353 | 354 | debug@^3.1.0: 355 | version "3.2.7" 356 | resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" 357 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 358 | dependencies: 359 | ms "^2.1.1" 360 | 361 | debug@^4.3.5: 362 | version "4.4.0" 363 | resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" 364 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== 365 | dependencies: 366 | ms "^2.1.3" 367 | 368 | debug@^4.4.0: 369 | version "4.4.1" 370 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" 371 | integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== 372 | dependencies: 373 | ms "^2.1.3" 374 | 375 | debuglog@^1.0.1: 376 | version "1.0.1" 377 | resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" 378 | integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== 379 | 380 | depd@2.0.0: 381 | version "2.0.0" 382 | resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" 383 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 384 | 385 | destroy@^1.2.0: 386 | version "1.2.0" 387 | resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" 388 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== 389 | 390 | dezalgo@^1.0.0: 391 | version "1.0.4" 392 | resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" 393 | integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== 394 | dependencies: 395 | asap "^2.0.0" 396 | wrappy "1" 397 | 398 | dunder-proto@^1.0.1: 399 | version "1.0.1" 400 | resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" 401 | integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== 402 | dependencies: 403 | call-bind-apply-helpers "^1.0.1" 404 | es-errors "^1.3.0" 405 | gopd "^1.2.0" 406 | 407 | ee-first@1.1.1: 408 | version "1.1.1" 409 | resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" 410 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== 411 | 412 | encodeurl@^2.0.0, encodeurl@~2.0.0: 413 | version "2.0.0" 414 | resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" 415 | integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== 416 | 417 | end-of-stream@^1.1.0: 418 | version "1.4.4" 419 | resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" 420 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 421 | dependencies: 422 | once "^1.4.0" 423 | 424 | es-define-property@^1.0.1: 425 | version "1.0.1" 426 | resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" 427 | integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== 428 | 429 | es-errors@^1.3.0: 430 | version "1.3.0" 431 | resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" 432 | integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== 433 | 434 | es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: 435 | version "1.1.1" 436 | resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" 437 | integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== 438 | dependencies: 439 | es-errors "^1.3.0" 440 | 441 | escape-html@^1.0.3, escape-html@~1.0.3: 442 | version "1.0.3" 443 | resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" 444 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== 445 | 446 | escape-string-regexp@^1.0.5: 447 | version "1.0.5" 448 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" 449 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 450 | 451 | etag@^1.8.1, etag@~1.8.1: 452 | version "1.8.1" 453 | resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" 454 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== 455 | 456 | eventsource-parser@^3.0.0: 457 | version "3.0.0" 458 | resolved "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.0.tgz" 459 | integrity sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA== 460 | 461 | eventsource@^3.0.2: 462 | version "3.0.5" 463 | resolved "https://registry.npmjs.org/eventsource/-/eventsource-3.0.5.tgz" 464 | integrity sha512-LT/5J605bx5SNyE+ITBDiM3FxffBiq9un7Vx0EwMDM3vg8sWKx/tO2zC+LMqZ+smAM0F2hblaDZUVZF0te2pSw== 465 | dependencies: 466 | eventsource-parser "^3.0.0" 467 | 468 | execa@^1.0.0: 469 | version "1.0.0" 470 | resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" 471 | integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== 472 | dependencies: 473 | cross-spawn "^6.0.0" 474 | get-stream "^4.0.0" 475 | is-stream "^1.1.0" 476 | npm-run-path "^2.0.0" 477 | p-finally "^1.0.0" 478 | signal-exit "^3.0.0" 479 | strip-eof "^1.0.0" 480 | 481 | express-rate-limit@^7.5.0: 482 | version "7.5.0" 483 | resolved "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz" 484 | integrity sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg== 485 | 486 | "express@^4.11 || 5 || ^5.0.0-beta.1", express@^5.0.1: 487 | version "5.0.1" 488 | resolved "https://registry.npmjs.org/express/-/express-5.0.1.tgz" 489 | integrity sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ== 490 | dependencies: 491 | accepts "^2.0.0" 492 | body-parser "^2.0.1" 493 | content-disposition "^1.0.0" 494 | content-type "~1.0.4" 495 | cookie "0.7.1" 496 | cookie-signature "^1.2.1" 497 | debug "4.3.6" 498 | depd "2.0.0" 499 | encodeurl "~2.0.0" 500 | escape-html "~1.0.3" 501 | etag "~1.8.1" 502 | finalhandler "^2.0.0" 503 | fresh "2.0.0" 504 | http-errors "2.0.0" 505 | merge-descriptors "^2.0.0" 506 | methods "~1.1.2" 507 | mime-types "^3.0.0" 508 | on-finished "2.4.1" 509 | once "1.4.0" 510 | parseurl "~1.3.3" 511 | proxy-addr "~2.0.7" 512 | qs "6.13.0" 513 | range-parser "~1.2.1" 514 | router "^2.0.0" 515 | safe-buffer "5.2.1" 516 | send "^1.1.0" 517 | serve-static "^2.1.0" 518 | setprototypeof "1.2.0" 519 | statuses "2.0.1" 520 | type-is "^2.0.0" 521 | utils-merge "1.0.1" 522 | vary "~1.1.2" 523 | 524 | fast-deep-equal@^3.1.1: 525 | version "3.1.3" 526 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 527 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 528 | 529 | fast-glob@^3.3.2: 530 | version "3.3.3" 531 | resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" 532 | integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== 533 | dependencies: 534 | "@nodelib/fs.stat" "^2.0.2" 535 | "@nodelib/fs.walk" "^1.2.3" 536 | glob-parent "^5.1.2" 537 | merge2 "^1.3.0" 538 | micromatch "^4.0.8" 539 | 540 | fast-json-stable-stringify@^2.0.0: 541 | version "2.1.0" 542 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 543 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 544 | 545 | fastq@^1.6.0: 546 | version "1.19.1" 547 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz" 548 | integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== 549 | dependencies: 550 | reusify "^1.0.4" 551 | 552 | fill-range@^7.1.1: 553 | version "7.1.1" 554 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" 555 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 556 | dependencies: 557 | to-regex-range "^5.0.1" 558 | 559 | finalhandler@^2.0.0: 560 | version "2.1.0" 561 | resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz" 562 | integrity sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q== 563 | dependencies: 564 | debug "^4.4.0" 565 | encodeurl "^2.0.0" 566 | escape-html "^1.0.3" 567 | on-finished "^2.4.1" 568 | parseurl "^1.3.3" 569 | statuses "^2.0.1" 570 | 571 | find-replace@^5.0.2: 572 | version "5.0.2" 573 | resolved "https://registry.npmjs.org/find-replace/-/find-replace-5.0.2.tgz" 574 | integrity sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q== 575 | 576 | flatbuffers@^24.3.25: 577 | version "24.12.23" 578 | resolved "https://registry.npmjs.org/flatbuffers/-/flatbuffers-24.12.23.tgz" 579 | integrity sha512-dLVCAISd5mhls514keQzmEG6QHmUUsNuWsb4tFafIUwvvgDjXhtfAYSKOzt5SWOy+qByV5pbsDZ+Vb7HUOBEdA== 580 | 581 | forwarded@0.2.0: 582 | version "0.2.0" 583 | resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" 584 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 585 | 586 | fresh@^0.5.2: 587 | version "0.5.2" 588 | resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" 589 | integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== 590 | 591 | fresh@2.0.0: 592 | version "2.0.0" 593 | resolved "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz" 594 | integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== 595 | 596 | fs.realpath@^1.0.0: 597 | version "1.0.0" 598 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 599 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 600 | 601 | function-bind@^1.1.2: 602 | version "1.1.2" 603 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" 604 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 605 | 606 | get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: 607 | version "1.3.0" 608 | resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" 609 | integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== 610 | dependencies: 611 | call-bind-apply-helpers "^1.0.2" 612 | es-define-property "^1.0.1" 613 | es-errors "^1.3.0" 614 | es-object-atoms "^1.1.1" 615 | function-bind "^1.1.2" 616 | get-proto "^1.0.1" 617 | gopd "^1.2.0" 618 | has-symbols "^1.1.0" 619 | hasown "^2.0.2" 620 | math-intrinsics "^1.1.0" 621 | 622 | get-proto@^1.0.1: 623 | version "1.0.1" 624 | resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" 625 | integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== 626 | dependencies: 627 | dunder-proto "^1.0.1" 628 | es-object-atoms "^1.0.0" 629 | 630 | get-stream@^4.0.0: 631 | version "4.1.0" 632 | resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" 633 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 634 | dependencies: 635 | pump "^3.0.0" 636 | 637 | glob-parent@^5.1.2: 638 | version "5.1.2" 639 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 640 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 641 | dependencies: 642 | is-glob "^4.0.1" 643 | 644 | glob@^7.1.1: 645 | version "7.2.3" 646 | resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" 647 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 648 | dependencies: 649 | fs.realpath "^1.0.0" 650 | inflight "^1.0.4" 651 | inherits "2" 652 | minimatch "^3.1.1" 653 | once "^1.3.0" 654 | path-is-absolute "^1.0.0" 655 | 656 | gopd@^1.2.0: 657 | version "1.2.0" 658 | resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" 659 | integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== 660 | 661 | graceful-fs@^4.1.2: 662 | version "4.2.11" 663 | resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" 664 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 665 | 666 | has-flag@^3.0.0: 667 | version "3.0.0" 668 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" 669 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 670 | 671 | has-flag@^4.0.0: 672 | version "4.0.0" 673 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 674 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 675 | 676 | has-symbols@^1.1.0: 677 | version "1.1.0" 678 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" 679 | integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== 680 | 681 | hasown@^2.0.2: 682 | version "2.0.2" 683 | resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" 684 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== 685 | dependencies: 686 | function-bind "^1.1.2" 687 | 688 | hosted-git-info@^2.1.4: 689 | version "2.8.9" 690 | resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" 691 | integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== 692 | 693 | hpagent@^1.2.0: 694 | version "1.2.0" 695 | resolved "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz" 696 | integrity sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA== 697 | 698 | http-errors@^2.0.0, http-errors@2.0.0: 699 | version "2.0.0" 700 | resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" 701 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== 702 | dependencies: 703 | depd "2.0.0" 704 | inherits "2.0.4" 705 | setprototypeof "1.2.0" 706 | statuses "2.0.1" 707 | toidentifier "1.0.1" 708 | 709 | iconv-lite@^0.5.2: 710 | version "0.5.2" 711 | resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz" 712 | integrity sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag== 713 | dependencies: 714 | safer-buffer ">= 2.1.2 < 3" 715 | 716 | iconv-lite@0.6.3: 717 | version "0.6.3" 718 | resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" 719 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== 720 | dependencies: 721 | safer-buffer ">= 2.1.2 < 3.0.0" 722 | 723 | inflight@^1.0.4: 724 | version "1.0.6" 725 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 726 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 727 | dependencies: 728 | once "^1.3.0" 729 | wrappy "1" 730 | 731 | inherits@2, inherits@2.0.4: 732 | version "2.0.4" 733 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 734 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 735 | 736 | interpret@^1.0.0: 737 | version "1.4.0" 738 | resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" 739 | integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== 740 | 741 | ipaddr.js@1.9.1: 742 | version "1.9.1" 743 | resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" 744 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 745 | 746 | is-core-module@^2.16.0: 747 | version "2.16.1" 748 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz" 749 | integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== 750 | dependencies: 751 | hasown "^2.0.2" 752 | 753 | is-extglob@^2.1.1: 754 | version "2.1.1" 755 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 756 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 757 | 758 | is-glob@^4.0.1: 759 | version "4.0.3" 760 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 761 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 762 | dependencies: 763 | is-extglob "^2.1.1" 764 | 765 | is-number@^7.0.0: 766 | version "7.0.0" 767 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 768 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 769 | 770 | is-promise@^4.0.0: 771 | version "4.0.0" 772 | resolved "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz" 773 | integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== 774 | 775 | is-stream@^1.1.0: 776 | version "1.1.0" 777 | resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" 778 | integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== 779 | 780 | isexe@^2.0.0: 781 | version "2.0.0" 782 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 783 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 784 | 785 | json-bignum@^0.0.3: 786 | version "0.0.3" 787 | resolved "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz" 788 | integrity sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg== 789 | 790 | json-parse-even-better-errors@^2.3.0: 791 | version "2.3.1" 792 | resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" 793 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 794 | 795 | json-schema-traverse@^0.4.1: 796 | version "0.4.1" 797 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 798 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 799 | 800 | license-checker@25.0.1: 801 | version "25.0.1" 802 | resolved "https://registry.npmjs.org/license-checker/-/license-checker-25.0.1.tgz" 803 | integrity sha512-mET5AIwl7MR2IAKYYoVBBpV0OnkKQ1xGj2IMMeEFIs42QAkEVjRtFZGWmQ28WeU7MP779iAgOaOy93Mn44mn6g== 804 | dependencies: 805 | chalk "^2.4.1" 806 | debug "^3.1.0" 807 | mkdirp "^0.5.1" 808 | nopt "^4.0.1" 809 | read-installed "~4.0.3" 810 | semver "^5.5.0" 811 | spdx-correct "^3.0.0" 812 | spdx-expression-parse "^3.0.0" 813 | spdx-satisfies "^4.0.0" 814 | treeify "^1.1.0" 815 | 816 | lodash.camelcase@^4.3.0: 817 | version "4.3.0" 818 | resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" 819 | integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== 820 | 821 | math-intrinsics@^1.1.0: 822 | version "1.1.0" 823 | resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" 824 | integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== 825 | 826 | media-typer@^1.1.0: 827 | version "1.1.0" 828 | resolved "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz" 829 | integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw== 830 | 831 | merge-descriptors@^2.0.0: 832 | version "2.0.0" 833 | resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz" 834 | integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g== 835 | 836 | merge2@^1.3.0: 837 | version "1.4.1" 838 | resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" 839 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 840 | 841 | methods@~1.1.2: 842 | version "1.1.2" 843 | resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" 844 | integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== 845 | 846 | micromatch@^4.0.8: 847 | version "4.0.8" 848 | resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" 849 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== 850 | dependencies: 851 | braces "^3.0.3" 852 | picomatch "^2.3.1" 853 | 854 | mime-db@^1.53.0: 855 | version "1.54.0" 856 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz" 857 | integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== 858 | 859 | mime-db@1.52.0: 860 | version "1.52.0" 861 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" 862 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 863 | 864 | mime-types@^2.1.35: 865 | version "2.1.35" 866 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" 867 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 868 | dependencies: 869 | mime-db "1.52.0" 870 | 871 | mime-types@^3.0.0: 872 | version "3.0.0" 873 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz" 874 | integrity sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w== 875 | dependencies: 876 | mime-db "^1.53.0" 877 | 878 | minimatch@^3.1.1: 879 | version "3.1.2" 880 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 881 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 882 | dependencies: 883 | brace-expansion "^1.1.7" 884 | 885 | minimist@^1.2.6, minimist@^1.2.8: 886 | version "1.2.8" 887 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" 888 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 889 | 890 | mkdirp@^0.5.1: 891 | version "0.5.6" 892 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" 893 | integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== 894 | dependencies: 895 | minimist "^1.2.6" 896 | 897 | ms@^2.1.1, ms@^2.1.3: 898 | version "2.1.3" 899 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" 900 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 901 | 902 | ms@2.1.2: 903 | version "2.1.2" 904 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 905 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 906 | 907 | negotiator@^1.0.0: 908 | version "1.0.0" 909 | resolved "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz" 910 | integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== 911 | 912 | nice-try@^1.0.4: 913 | version "1.0.5" 914 | resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" 915 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 916 | 917 | nopt@^4.0.1: 918 | version "4.0.3" 919 | resolved "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz" 920 | integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== 921 | dependencies: 922 | abbrev "1" 923 | osenv "^0.1.4" 924 | 925 | normalize-package-data@^2.0.0: 926 | version "2.5.0" 927 | resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" 928 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 929 | dependencies: 930 | hosted-git-info "^2.1.4" 931 | resolve "^1.10.0" 932 | semver "2 || 3 || 4 || 5" 933 | validate-npm-package-license "^3.0.1" 934 | 935 | npm-normalize-package-bin@^1.0.0: 936 | version "1.0.1" 937 | resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" 938 | integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== 939 | 940 | npm-run-path@^2.0.0: 941 | version "2.0.2" 942 | resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" 943 | integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== 944 | dependencies: 945 | path-key "^2.0.0" 946 | 947 | object-assign@^4: 948 | version "4.1.1" 949 | resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" 950 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 951 | 952 | object-inspect@^1.13.3: 953 | version "1.13.4" 954 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" 955 | integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== 956 | 957 | on-finished@^2.4.1, on-finished@2.4.1: 958 | version "2.4.1" 959 | resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" 960 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== 961 | dependencies: 962 | ee-first "1.1.1" 963 | 964 | once@^1.3.0, once@^1.3.1, once@^1.4.0, once@1.4.0: 965 | version "1.4.0" 966 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 967 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 968 | dependencies: 969 | wrappy "1" 970 | 971 | os-homedir@^1.0.0: 972 | version "1.0.2" 973 | resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" 974 | integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== 975 | 976 | os-tmpdir@^1.0.0: 977 | version "1.0.2" 978 | resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" 979 | integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== 980 | 981 | osenv@^0.1.4: 982 | version "0.1.5" 983 | resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz" 984 | integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== 985 | dependencies: 986 | os-homedir "^1.0.0" 987 | os-tmpdir "^1.0.0" 988 | 989 | p-finally@^1.0.0: 990 | version "1.0.0" 991 | resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" 992 | integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== 993 | 994 | parseurl@^1.3.3, parseurl@~1.3.3: 995 | version "1.3.3" 996 | resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" 997 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 998 | 999 | path-is-absolute@^1.0.0: 1000 | version "1.0.1" 1001 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 1002 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1003 | 1004 | path-key@^2.0.0: 1005 | version "2.0.1" 1006 | resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" 1007 | integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== 1008 | 1009 | path-key@^2.0.1: 1010 | version "2.0.1" 1011 | resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" 1012 | integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== 1013 | 1014 | path-key@^3.1.0: 1015 | version "3.1.1" 1016 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 1017 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1018 | 1019 | path-parse@^1.0.7: 1020 | version "1.0.7" 1021 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" 1022 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1023 | 1024 | path-to-regexp@^8.0.0: 1025 | version "8.2.0" 1026 | resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz" 1027 | integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ== 1028 | 1029 | picomatch@^2.3.1: 1030 | version "2.3.1" 1031 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 1032 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1033 | 1034 | pkce-challenge@^5.0.0: 1035 | version "5.0.0" 1036 | resolved "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz" 1037 | integrity sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ== 1038 | 1039 | proxy-addr@~2.0.7: 1040 | version "2.0.7" 1041 | resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" 1042 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 1043 | dependencies: 1044 | forwarded "0.2.0" 1045 | ipaddr.js "1.9.1" 1046 | 1047 | pump@^3.0.0: 1048 | version "3.0.2" 1049 | resolved "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz" 1050 | integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== 1051 | dependencies: 1052 | end-of-stream "^1.1.0" 1053 | once "^1.3.1" 1054 | 1055 | punycode@^2.1.0: 1056 | version "2.3.1" 1057 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" 1058 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== 1059 | 1060 | qs@6.13.0: 1061 | version "6.13.0" 1062 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" 1063 | integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== 1064 | dependencies: 1065 | side-channel "^1.0.6" 1066 | 1067 | qs@^6.14.0: 1068 | version "6.14.0" 1069 | resolved "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz" 1070 | integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== 1071 | dependencies: 1072 | side-channel "^1.1.0" 1073 | 1074 | qs@6.13.0: 1075 | version "6.13.0" 1076 | resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz" 1077 | integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== 1078 | dependencies: 1079 | side-channel "^1.0.6" 1080 | 1081 | queue-microtask@^1.2.2: 1082 | version "1.2.3" 1083 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 1084 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1085 | 1086 | range-parser@^1.2.1, range-parser@~1.2.1: 1087 | version "1.2.1" 1088 | resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" 1089 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 1090 | 1091 | raw-body@^3.0.0: 1092 | version "3.0.0" 1093 | resolved "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz" 1094 | integrity sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g== 1095 | dependencies: 1096 | bytes "3.1.2" 1097 | http-errors "2.0.0" 1098 | iconv-lite "0.6.3" 1099 | unpipe "1.0.0" 1100 | 1101 | read-installed@~4.0.3: 1102 | version "4.0.3" 1103 | resolved "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz" 1104 | integrity sha512-O03wg/IYuV/VtnK2h/KXEt9VIbMUFbk3ERG0Iu4FhLZw0EP0T9znqrYDGn6ncbEsXUFaUjiVAWXHzxwt3lhRPQ== 1105 | dependencies: 1106 | debuglog "^1.0.1" 1107 | read-package-json "^2.0.0" 1108 | readdir-scoped-modules "^1.0.0" 1109 | semver "2 || 3 || 4 || 5" 1110 | slide "~1.1.3" 1111 | util-extend "^1.0.1" 1112 | optionalDependencies: 1113 | graceful-fs "^4.1.2" 1114 | 1115 | read-package-json@^2.0.0: 1116 | version "2.1.2" 1117 | resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz" 1118 | integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== 1119 | dependencies: 1120 | glob "^7.1.1" 1121 | json-parse-even-better-errors "^2.3.0" 1122 | normalize-package-data "^2.0.0" 1123 | npm-normalize-package-bin "^1.0.0" 1124 | 1125 | readdir-scoped-modules@^1.0.0: 1126 | version "1.1.0" 1127 | resolved "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz" 1128 | integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== 1129 | dependencies: 1130 | debuglog "^1.0.1" 1131 | dezalgo "^1.0.0" 1132 | graceful-fs "^4.1.2" 1133 | once "^1.3.0" 1134 | 1135 | rechoir@^0.6.2: 1136 | version "0.6.2" 1137 | resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" 1138 | integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== 1139 | dependencies: 1140 | resolve "^1.1.6" 1141 | 1142 | resolve@^1.1.6, resolve@^1.10.0: 1143 | version "1.22.10" 1144 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz" 1145 | integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== 1146 | dependencies: 1147 | is-core-module "^2.16.0" 1148 | path-parse "^1.0.7" 1149 | supports-preserve-symlinks-flag "^1.0.0" 1150 | 1151 | reusify@^1.0.4: 1152 | version "1.1.0" 1153 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" 1154 | integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== 1155 | 1156 | router@^2.0.0: 1157 | version "2.1.0" 1158 | resolved "https://registry.npmjs.org/router/-/router-2.1.0.tgz" 1159 | integrity sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA== 1160 | dependencies: 1161 | is-promise "^4.0.0" 1162 | parseurl "^1.3.3" 1163 | path-to-regexp "^8.0.0" 1164 | 1165 | run-parallel@^1.1.9: 1166 | version "1.2.0" 1167 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 1168 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1169 | dependencies: 1170 | queue-microtask "^1.2.2" 1171 | 1172 | safe-buffer@5.2.1: 1173 | version "5.2.1" 1174 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" 1175 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1176 | 1177 | "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": 1178 | version "2.1.2" 1179 | resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" 1180 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1181 | 1182 | secure-json-parse@^3.0.2: 1183 | version "3.0.2" 1184 | resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-3.0.2.tgz" 1185 | integrity sha512-H6nS2o8bWfpFEV6U38sOSjS7bTbdgbCGU9wEM6W14P5H0QOsz94KCusifV44GpHDTu2nqZbuDNhTzu+mjDSw1w== 1186 | 1187 | semver@^5.5.0, "semver@2 || 3 || 4 || 5": 1188 | version "5.7.2" 1189 | resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" 1190 | integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== 1191 | 1192 | send@^1.0.0, send@^1.1.0: 1193 | version "1.1.0" 1194 | resolved "https://registry.npmjs.org/send/-/send-1.1.0.tgz" 1195 | integrity sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA== 1196 | dependencies: 1197 | debug "^4.3.5" 1198 | destroy "^1.2.0" 1199 | encodeurl "^2.0.0" 1200 | escape-html "^1.0.3" 1201 | etag "^1.8.1" 1202 | fresh "^0.5.2" 1203 | http-errors "^2.0.0" 1204 | mime-types "^2.1.35" 1205 | ms "^2.1.3" 1206 | on-finished "^2.4.1" 1207 | range-parser "^1.2.1" 1208 | statuses "^2.0.1" 1209 | 1210 | serve-static@^2.1.0: 1211 | version "2.1.0" 1212 | resolved "https://registry.npmjs.org/serve-static/-/serve-static-2.1.0.tgz" 1213 | integrity sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA== 1214 | dependencies: 1215 | encodeurl "^2.0.0" 1216 | escape-html "^1.0.3" 1217 | parseurl "^1.3.3" 1218 | send "^1.0.0" 1219 | 1220 | setprototypeof@1.2.0: 1221 | version "1.2.0" 1222 | resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" 1223 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 1224 | 1225 | shebang-command@^1.2.0: 1226 | version "1.2.0" 1227 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" 1228 | integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== 1229 | dependencies: 1230 | shebang-regex "^1.0.0" 1231 | 1232 | shebang-command@^2.0.0: 1233 | version "2.0.0" 1234 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 1235 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1236 | dependencies: 1237 | shebang-regex "^3.0.0" 1238 | 1239 | shebang-regex@^1.0.0: 1240 | version "1.0.0" 1241 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" 1242 | integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== 1243 | 1244 | shebang-regex@^3.0.0: 1245 | version "3.0.0" 1246 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 1247 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1248 | 1249 | shelljs@^0.9.2: 1250 | version "0.9.2" 1251 | resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.9.2.tgz" 1252 | integrity sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw== 1253 | dependencies: 1254 | execa "^1.0.0" 1255 | fast-glob "^3.3.2" 1256 | interpret "^1.0.0" 1257 | rechoir "^0.6.2" 1258 | 1259 | shx@0.4.0: 1260 | version "0.4.0" 1261 | resolved "https://registry.npmjs.org/shx/-/shx-0.4.0.tgz" 1262 | integrity sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA== 1263 | dependencies: 1264 | minimist "^1.2.8" 1265 | shelljs "^0.9.2" 1266 | 1267 | side-channel-list@^1.0.0: 1268 | version "1.0.0" 1269 | resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" 1270 | integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== 1271 | dependencies: 1272 | es-errors "^1.3.0" 1273 | object-inspect "^1.13.3" 1274 | 1275 | side-channel-map@^1.0.1: 1276 | version "1.0.1" 1277 | resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" 1278 | integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== 1279 | dependencies: 1280 | call-bound "^1.0.2" 1281 | es-errors "^1.3.0" 1282 | get-intrinsic "^1.2.5" 1283 | object-inspect "^1.13.3" 1284 | 1285 | side-channel-weakmap@^1.0.2: 1286 | version "1.0.2" 1287 | resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" 1288 | integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== 1289 | dependencies: 1290 | call-bound "^1.0.2" 1291 | es-errors "^1.3.0" 1292 | get-intrinsic "^1.2.5" 1293 | object-inspect "^1.13.3" 1294 | side-channel-map "^1.0.1" 1295 | 1296 | side-channel@^1.0.6, side-channel@^1.1.0: 1297 | version "1.1.0" 1298 | resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" 1299 | integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== 1300 | dependencies: 1301 | es-errors "^1.3.0" 1302 | object-inspect "^1.13.3" 1303 | side-channel-list "^1.0.0" 1304 | side-channel-map "^1.0.1" 1305 | side-channel-weakmap "^1.0.2" 1306 | 1307 | signal-exit@^3.0.0: 1308 | version "3.0.7" 1309 | resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" 1310 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 1311 | 1312 | slide@~1.1.3: 1313 | version "1.1.6" 1314 | resolved "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz" 1315 | integrity sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw== 1316 | 1317 | spdx-compare@^1.0.0: 1318 | version "1.0.0" 1319 | resolved "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz" 1320 | integrity sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A== 1321 | dependencies: 1322 | array-find-index "^1.0.2" 1323 | spdx-expression-parse "^3.0.0" 1324 | spdx-ranges "^2.0.0" 1325 | 1326 | spdx-correct@^3.0.0: 1327 | version "3.2.0" 1328 | resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" 1329 | integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== 1330 | dependencies: 1331 | spdx-expression-parse "^3.0.0" 1332 | spdx-license-ids "^3.0.0" 1333 | 1334 | spdx-exceptions@^2.1.0: 1335 | version "2.5.0" 1336 | resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz" 1337 | integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== 1338 | 1339 | spdx-expression-parse@^3.0.0: 1340 | version "3.0.1" 1341 | resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" 1342 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 1343 | dependencies: 1344 | spdx-exceptions "^2.1.0" 1345 | spdx-license-ids "^3.0.0" 1346 | 1347 | spdx-license-ids@^3.0.0: 1348 | version "3.0.21" 1349 | resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz" 1350 | integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg== 1351 | 1352 | spdx-ranges@^2.0.0: 1353 | version "2.1.1" 1354 | resolved "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz" 1355 | integrity sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA== 1356 | 1357 | spdx-satisfies@^4.0.0: 1358 | version "4.0.1" 1359 | resolved "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-4.0.1.tgz" 1360 | integrity sha512-WVzZ/cXAzoNmjCWiEluEA3BjHp5tiUmmhn9MK+X0tBbR9sOqtC6UQwmgCNrAIZvNlMuBUYAaHYfb2oqlF9SwKA== 1361 | dependencies: 1362 | spdx-compare "^1.0.0" 1363 | spdx-expression-parse "^3.0.0" 1364 | spdx-ranges "^2.0.0" 1365 | 1366 | statuses@^2.0.1, statuses@2.0.1: 1367 | version "2.0.1" 1368 | resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" 1369 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== 1370 | 1371 | strip-eof@^1.0.0: 1372 | version "1.0.0" 1373 | resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" 1374 | integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== 1375 | 1376 | supports-color@^5.3.0: 1377 | version "5.5.0" 1378 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" 1379 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1380 | dependencies: 1381 | has-flag "^3.0.0" 1382 | 1383 | supports-color@^7.1.0: 1384 | version "7.2.0" 1385 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1386 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1387 | dependencies: 1388 | has-flag "^4.0.0" 1389 | 1390 | supports-preserve-symlinks-flag@^1.0.0: 1391 | version "1.0.0" 1392 | resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" 1393 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1394 | 1395 | table-layout@^4.1.0: 1396 | version "4.1.1" 1397 | resolved "https://registry.npmjs.org/table-layout/-/table-layout-4.1.1.tgz" 1398 | integrity sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA== 1399 | dependencies: 1400 | array-back "^6.2.2" 1401 | wordwrapjs "^5.1.0" 1402 | 1403 | to-regex-range@^5.0.1: 1404 | version "5.0.1" 1405 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 1406 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1407 | dependencies: 1408 | is-number "^7.0.0" 1409 | 1410 | toidentifier@1.0.1: 1411 | version "1.0.1" 1412 | resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" 1413 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 1414 | 1415 | treeify@^1.1.0: 1416 | version "1.1.0" 1417 | resolved "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz" 1418 | integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== 1419 | 1420 | tslib@^2.4.0, tslib@^2.6.2, tslib@^2.8.0, tslib@^2.8.1: 1421 | version "2.8.1" 1422 | resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" 1423 | integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== 1424 | 1425 | type-is@^2.0.0: 1426 | version "2.0.0" 1427 | resolved "https://registry.npmjs.org/type-is/-/type-is-2.0.0.tgz" 1428 | integrity sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw== 1429 | dependencies: 1430 | content-type "^1.0.5" 1431 | media-typer "^1.1.0" 1432 | mime-types "^3.0.0" 1433 | 1434 | typescript@5.8.3: 1435 | version "5.8.3" 1436 | resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" 1437 | integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== 1438 | 1439 | typical@^7.1.1, typical@^7.2.0: 1440 | version "7.3.0" 1441 | resolved "https://registry.npmjs.org/typical/-/typical-7.3.0.tgz" 1442 | integrity sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw== 1443 | 1444 | undici-types@~6.19.2: 1445 | version "6.19.8" 1446 | resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz" 1447 | integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== 1448 | 1449 | undici-types@~6.21.0: 1450 | version "6.21.0" 1451 | resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz" 1452 | integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== 1453 | 1454 | undici@^7.2.3: 1455 | version "7.10.0" 1456 | resolved "https://registry.yarnpkg.com/undici/-/undici-7.10.0.tgz#8ae17a976acc6593b13c9ff3342840bea9b24670" 1457 | integrity sha512-u5otvFBOBZvmdjWLVW+5DAc9Nkq8f24g0O9oY7qw2JVIF1VocIFoyz9JFkuVOS2j41AufeO0xnlweJ2RLT8nGw== 1458 | 1459 | unpipe@1.0.0: 1460 | version "1.0.0" 1461 | resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" 1462 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== 1463 | 1464 | uri-js@^4.2.2: 1465 | version "4.4.1" 1466 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1467 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1468 | dependencies: 1469 | punycode "^2.1.0" 1470 | 1471 | util-extend@^1.0.1: 1472 | version "1.0.3" 1473 | resolved "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz" 1474 | integrity sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA== 1475 | 1476 | utils-merge@1.0.1: 1477 | version "1.0.1" 1478 | resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" 1479 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== 1480 | 1481 | validate-npm-package-license@^3.0.1: 1482 | version "3.0.4" 1483 | resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" 1484 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 1485 | dependencies: 1486 | spdx-correct "^3.0.0" 1487 | spdx-expression-parse "^3.0.0" 1488 | 1489 | vary@^1, vary@~1.1.2: 1490 | version "1.1.2" 1491 | resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" 1492 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== 1493 | 1494 | which@^1.2.9: 1495 | version "1.3.1" 1496 | resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" 1497 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1498 | dependencies: 1499 | isexe "^2.0.0" 1500 | 1501 | which@^2.0.1: 1502 | version "2.0.2" 1503 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 1504 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1505 | dependencies: 1506 | isexe "^2.0.0" 1507 | 1508 | wordwrapjs@^5.1.0: 1509 | version "5.1.0" 1510 | resolved "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz" 1511 | integrity sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg== 1512 | 1513 | wrappy@1: 1514 | version "1.0.2" 1515 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1516 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1517 | 1518 | zod-to-json-schema@^3.24.1: 1519 | version "3.24.5" 1520 | resolved "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz" 1521 | integrity sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g== 1522 | 1523 | zod@^3.23.8, zod@^3.24.1: 1524 | version "3.24.2" 1525 | resolved "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz" 1526 | integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== 1527 | --------------------------------------------------------------------------------