├── .env.example ├── .gitignore ├── Dockerfile ├── README.md ├── dist ├── index.d.ts ├── index.js ├── services │ ├── salesforce.d.ts │ └── salesforce.js ├── types.d.ts └── types.js ├── package-lock.json ├── package.json ├── smithery.yaml ├── src ├── evals │ └── evals.ts ├── index.ts ├── tools.ts └── types.ts └── tsconfig.json /.env.example: -------------------------------------------------------------------------------- 1 | SF_LOGIN_URL=https://login.salesforce.com 2 | SF_USERNAME=your-username@example.com 3 | SF_PASSWORD=your-password 4 | SF_SECURITY_TOKEN=your-security-token -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | build/ 3 | .env 4 | *.log 5 | .DS_Store 6 | .env.backup 7 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Generated by https://smithery.ai. See: https://smithery.ai/docs/config#dockerfile 2 | # Use an official Node.js runtime as a parent image 3 | FROM node:18-alpine AS builder 4 | 5 | # Set the working directory in the container 6 | WORKDIR /app 7 | 8 | # Copy the package.json and package-lock.json files 9 | COPY package*.json ./ 10 | 11 | # Install the dependencies 12 | RUN npm install 13 | 14 | # Copy the rest of the application code 15 | COPY . . 16 | 17 | # Build the TypeScript code 18 | RUN npm run build 19 | 20 | # Use a new, clean Node.js runtime for the final image 21 | FROM node:18-alpine 22 | 23 | # Set the working directory 24 | WORKDIR /app 25 | 26 | # Copy the compiled application and node_modules from the builder stage 27 | COPY --from=builder /app/build ./build 28 | COPY --from=builder /app/node_modules ./node_modules 29 | COPY --from=builder /app/package.json ./ 30 | 31 | # Specify the default command to run when starting the container 32 | CMD ["npm", "start"] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![MseeP.ai Security Assessment Badge](https://mseep.net/pr/kablewy-salesforce-mcp-server-badge.png)](https://mseep.ai/app/kablewy-salesforce-mcp-server) 2 | 3 | # Salesforce MCP Server 4 | 5 | [![smithery badge](https://smithery.ai/badge/salesforce-mcp-server)](https://smithery.ai/server/salesforce-mcp-server) 6 | 7 | A Model Context Protocol server implementation for interacting with Salesforce through its REST API using jsforce. 8 | 9 | ### Installing via Smithery 10 | 11 | To install Salesforce Server for Claude Desktop automatically via [Smithery](https://smithery.ai/server/salesforce-mcp-server): 12 | 13 | ```bash 14 | npx -y @smithery/cli install salesforce-mcp-server --client claude 15 | ``` 16 | 17 | ## Features 18 | 19 | - Execute SOQL queries 20 | - Retrieve object metadata 21 | - Create, update, and delete records 22 | - Secure authentication handling 23 | - Real-time data access 24 | 25 | ## Setup 26 | 27 | 1. Clone the repository 28 | 2. Copy `.env.example` to `.env` and fill in your Salesforce credentials 29 | 3. Install dependencies: `npm install` 30 | 4. Build: `npm run build` 31 | 5. Start: `npm start` 32 | 33 | ## Usage 34 | 35 | The server exposes several functions: 36 | 37 | ### query 38 | Execute SOQL queries against your Salesforce instance: 39 | ```json 40 | { 41 | "name": "query", 42 | "parameters": { 43 | "query": "SELECT Id, Name FROM Account LIMIT 5" 44 | } 45 | } 46 | ``` 47 | 48 | ### describe-object 49 | Get metadata about a Salesforce object: 50 | ```json 51 | { 52 | "name": "describe-object", 53 | "parameters": { 54 | "objectName": "Account" 55 | } 56 | } 57 | ``` 58 | 59 | ### create 60 | Create a new record: 61 | ```json 62 | { 63 | "name": "create", 64 | "parameters": { 65 | "objectName": "Contact", 66 | "data": { 67 | "FirstName": "John", 68 | "LastName": "Doe", 69 | "Email": "john.doe@example.com" 70 | } 71 | } 72 | } 73 | ``` 74 | 75 | ### update 76 | Update an existing record: 77 | ```json 78 | { 79 | "name": "update", 80 | "parameters": { 81 | "objectName": "Contact", 82 | "data": { 83 | "Id": "003XXXXXXXXXXXXXXX", 84 | "Email": "new.email@example.com" 85 | } 86 | } 87 | } 88 | ``` 89 | 90 | ### delete 91 | Delete a record: 92 | ```json 93 | { 94 | "name": "delete", 95 | "parameters": { 96 | "objectName": "Contact", 97 | "id": "003XXXXXXXXXXXXXXX" 98 | } 99 | } 100 | ``` 101 | 102 | 103 | 104 | ## Running evals 105 | 106 | The evals package loads an mcp client that then runs the index.ts file, so there is no need to rebuild between tests. You can load environment variables by prefixing the npx command. Full documentation can be found [here](https://www.mcpevals.io/docs). 107 | 108 | ```bash 109 | OPENAI_API_KEY=your-key npx mcp-eval src/evals/evals.ts src/tools.ts 110 | ``` 111 | ## Security 112 | 113 | Make sure to: 114 | - Keep your `.env` file secure and never commit it 115 | - Use IP restrictions in Salesforce when possible 116 | - Regularly rotate your security token 117 | - Consider implementing additional authentication for the MCP server 118 | 119 | ## Contributing 120 | 121 | Contributions are welcome! Please submit PRs with improvements. 122 | 123 | # Salesforce MCP Server 124 | 125 | A Model Context Protocol server implementation for interacting with Salesforce through its REST API using jsforce. 126 | 127 | ### Installing via Smithery 128 | 129 | To install Salesforce Server for Claude Desktop automatically via [Smithery](https://smithery.ai/server/salesforce-mcp-server): 130 | 131 | ```bash 132 | npx -y @smithery/cli install salesforce-mcp-server --client claude 133 | ``` 134 | 135 | ## Features 136 | 137 | - Execute SOQL queries 138 | - Retrieve object metadata 139 | - Create, update, and delete records 140 | - Secure authentication handling 141 | - Real-time data access 142 | 143 | ## Setup 144 | 145 | 1. Clone the repository 146 | 2. Copy `.env.example` to `.env` and fill in your Salesforce credentials 147 | 3. Install dependencies: `npm install` 148 | 4. Build: `npm run build` 149 | 5. Start: `npm start` 150 | 151 | ## Usage 152 | 153 | The server exposes several functions: 154 | 155 | ### query 156 | Execute SOQL queries against your Salesforce instance: 157 | ```json 158 | { 159 | "name": "query", 160 | "parameters": { 161 | "query": "SELECT Id, Name FROM Account LIMIT 5" 162 | } 163 | } 164 | ``` 165 | 166 | ### describe-object 167 | Get metadata about a Salesforce object: 168 | ```json 169 | { 170 | "name": "describe-object", 171 | "parameters": { 172 | "objectName": "Account" 173 | } 174 | } 175 | ``` 176 | 177 | ### create 178 | Create a new record: 179 | ```json 180 | { 181 | "name": "create", 182 | "parameters": { 183 | "objectName": "Contact", 184 | "data": { 185 | "FirstName": "John", 186 | "LastName": "Doe", 187 | "Email": "john.doe@example.com" 188 | } 189 | } 190 | } 191 | ``` 192 | 193 | ### update 194 | Update an existing record: 195 | ```json 196 | { 197 | "name": "update", 198 | "parameters": { 199 | "objectName": "Contact", 200 | "data": { 201 | "Id": "003XXXXXXXXXXXXXXX", 202 | "Email": "new.email@example.com" 203 | } 204 | } 205 | } 206 | ``` 207 | 208 | ### delete 209 | Delete a record: 210 | ```json 211 | { 212 | "name": "delete", 213 | "parameters": { 214 | "objectName": "Contact", 215 | "id": "003XXXXXXXXXXXXXXX" 216 | } 217 | } 218 | ``` 219 | 220 | ## Security 221 | 222 | Make sure to: 223 | - Keep your `.env` file secure and never commit it 224 | - Use IP restrictions in Salesforce when possible 225 | - Regularly rotate your security token 226 | - Consider implementing additional authentication for the MCP server 227 | 228 | ## Contributing 229 | 230 | Contributions are welcome! Please submit PRs with improvements. 231 | 232 | ## License 233 | 234 | MIT License 235 | 236 | ``` 237 | MIT License 238 | 239 | Copyright (c) 2024 Kablewy,LLC 240 | 241 | Permission is hereby granted, free of charge, to any person obtaining a copy 242 | of this software and associated documentation files (the "Software"), to deal 243 | in the Software without restriction, including without limitation the rights 244 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 245 | copies of the Software, and to permit persons to whom the Software is 246 | furnished to do so, subject to the following conditions: 247 | 248 | The above copyright notice and this permission notice shall be included in all 249 | copies or substantial portions of the Software. 250 | 251 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 252 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 253 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 254 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 255 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 256 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 257 | SOFTWARE. 258 | ``` 259 | -------------------------------------------------------------------------------- /dist/index.d.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | export {}; 3 | -------------------------------------------------------------------------------- /dist/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import { Server } from "@modelcontextprotocol/sdk/server/index.js"; 3 | import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; 4 | import { ListResourcesRequestSchema, ReadResourceRequestSchema, ListToolsRequestSchema, CallToolRequestSchema, ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js"; 5 | import jsforce from 'jsforce'; 6 | import dotenv from "dotenv"; 7 | import { isValidQueryArgs } from "./types.js"; 8 | dotenv.config(); 9 | const SF_CONFIG = { 10 | LOGIN_URL: process.env.SF_LOGIN_URL || 'https://login.salesforce.com', 11 | DEFAULT_OBJECT: 'Account', 12 | ENDPOINTS: { 13 | QUERY: 'query', 14 | DESCRIBE: 'describe' 15 | } 16 | }; 17 | const SF_CREDENTIALS = { 18 | username: process.env.SF_USERNAME, 19 | password: process.env.SF_PASSWORD, 20 | securityToken: process.env.SF_SECURITY_TOKEN 21 | }; 22 | if (!SF_CREDENTIALS.username || !SF_CREDENTIALS.password || !SF_CREDENTIALS.securityToken) { 23 | throw new Error("Salesforce credentials are required in environment variables"); 24 | } 25 | class SalesforceServer { 26 | constructor() { 27 | this.server = new Server({ 28 | name: "example-salesforce-server", 29 | version: "0.1.0" 30 | }, { 31 | capabilities: { 32 | resources: {}, 33 | tools: {} 34 | } 35 | }); 36 | this.conn = new jsforce.Connection({ 37 | loginUrl: SF_CONFIG.LOGIN_URL 38 | }); 39 | this.setupHandlers(); 40 | this.setupErrorHandling(); 41 | } 42 | setupErrorHandling() { 43 | this.server.onerror = (error) => { 44 | console.error("[MCP Error]", error); 45 | }; 46 | process.on('SIGINT', async () => { 47 | await this.server.close(); 48 | process.exit(0); 49 | }); 50 | } 51 | setupHandlers() { 52 | this.setupResourceHandlers(); 53 | this.setupToolHandlers(); 54 | } 55 | setupResourceHandlers() { 56 | this.server.setRequestHandler(ListResourcesRequestSchema, async () => ({ 57 | resources: [{ 58 | uri: `salesforce://${SF_CONFIG.DEFAULT_OBJECT}/objects`, 59 | name: `Available Salesforce Objects`, 60 | mimeType: "application/json", 61 | description: "List of queryable Salesforce objects in your organization" 62 | }] 63 | })); 64 | this.server.setRequestHandler(ReadResourceRequestSchema, async (request) => { 65 | if (request.params.uri !== `salesforce://${SF_CONFIG.DEFAULT_OBJECT}/objects`) { 66 | throw new McpError(ErrorCode.InvalidRequest, `Unknown resource: ${request.params.uri}`); 67 | } 68 | try { 69 | await this.conn.login(SF_CREDENTIALS.username, SF_CREDENTIALS.password + SF_CREDENTIALS.securityToken); 70 | const describeGlobal = await this.conn.describeGlobal(); 71 | const objects = describeGlobal.sobjects 72 | .filter(obj => obj.queryable) 73 | .map(obj => ({ 74 | name: obj.name, 75 | label: obj.label, 76 | custom: obj.custom, 77 | queryable: obj.queryable 78 | })); 79 | return { 80 | contents: [{ 81 | uri: request.params.uri, 82 | mimeType: "application/json", 83 | text: JSON.stringify(objects, null, 2) 84 | }] 85 | }; 86 | } 87 | catch (error) { 88 | throw new McpError(ErrorCode.InternalError, `Salesforce API error: ${error instanceof Error ? error.message : String(error)}`); 89 | } 90 | }); 91 | } 92 | setupToolHandlers() { 93 | this.server.setRequestHandler(ListToolsRequestSchema, async () => ({ 94 | tools: [{ 95 | name: "query", 96 | description: "Execute a SOQL query on Salesforce", 97 | inputSchema: { 98 | type: "object", 99 | properties: { 100 | query: { 101 | type: "string", 102 | description: "SOQL query to execute" 103 | } 104 | }, 105 | required: ["query"] 106 | } 107 | }] 108 | })); 109 | this.server.setRequestHandler(CallToolRequestSchema, async (request) => { 110 | if (request.params.name !== "query") { 111 | return { 112 | content: [{ 113 | type: "text", 114 | text: `Unknown tool: ${request.params.name}` 115 | }], 116 | isError: true 117 | }; 118 | } 119 | if (!isValidQueryArgs(request.params.arguments)) { 120 | return { 121 | content: [{ 122 | type: "text", 123 | text: "Invalid query arguments" 124 | }], 125 | isError: true 126 | }; 127 | } 128 | try { 129 | await this.conn.login(SF_CREDENTIALS.username, SF_CREDENTIALS.password + SF_CREDENTIALS.securityToken); 130 | const result = await this.conn.query(request.params.arguments.query); 131 | return { 132 | content: [{ 133 | type: "text", 134 | text: JSON.stringify(result, null, 2) 135 | }] 136 | }; 137 | } 138 | catch (error) { 139 | return { 140 | content: [{ 141 | type: "text", 142 | text: `Salesforce API error: ${error instanceof Error ? error.message : String(error)}` 143 | }], 144 | isError: true 145 | }; 146 | } 147 | }); 148 | } 149 | async run() { 150 | const transport = new StdioServerTransport(); 151 | await this.server.connect(transport); 152 | console.error("Salesforce MCP server running on stdio"); 153 | } 154 | } 155 | const server = new SalesforceServer(); 156 | server.run().catch(console.error); 157 | -------------------------------------------------------------------------------- /dist/services/salesforce.d.ts: -------------------------------------------------------------------------------- 1 | import * as jsforce from 'jsforce'; 2 | export declare class SalesforceService { 3 | private conn; 4 | private isInitialized; 5 | constructor(); 6 | private ensureInitialized; 7 | private initialize; 8 | query(soql: string): Promise>; 9 | describeObject(objectName: string): Promise; 10 | create(objectName: string, data: any): Promise; 11 | update(objectName: string, data: any): Promise; 12 | delete(objectName: string, id: string): Promise; 13 | } 14 | -------------------------------------------------------------------------------- /dist/services/salesforce.js: -------------------------------------------------------------------------------- 1 | import { Connection } from 'jsforce'; 2 | export class SalesforceService { 3 | constructor() { 4 | this.isInitialized = false; 5 | this.conn = new Connection({ 6 | loginUrl: process.env.SF_LOGIN_URL 7 | }); 8 | } 9 | async ensureInitialized() { 10 | if (!this.isInitialized) { 11 | await this.initialize(); 12 | } 13 | } 14 | async initialize() { 15 | try { 16 | await this.conn.login(process.env.SF_USERNAME, process.env.SF_PASSWORD + process.env.SF_SECURITY_TOKEN); 17 | this.isInitialized = true; 18 | console.log('Connected to Salesforce'); 19 | } 20 | catch (error) { 21 | console.error('Failed to connect to Salesforce:', error); 22 | throw error; 23 | } 24 | } 25 | async query(soql) { 26 | console.log('Querying Salesforce:', soql); 27 | await this.ensureInitialized(); 28 | try { 29 | const result = await this.conn.query(soql); 30 | return result; 31 | } 32 | catch (error) { 33 | console.error('Query failed:', error); 34 | throw error; 35 | } 36 | } 37 | async describeObject(objectName) { 38 | await this.ensureInitialized(); 39 | try { 40 | const metadata = await this.conn.describe(objectName); 41 | return metadata; 42 | } 43 | catch (error) { 44 | console.error(`Failed to describe object ${objectName}:`, error); 45 | throw error; 46 | } 47 | } 48 | async create(objectName, data) { 49 | await this.ensureInitialized(); 50 | try { 51 | const result = await this.conn.sobject(objectName).create(data); 52 | return result; 53 | } 54 | catch (error) { 55 | console.error(`Failed to create ${objectName}:`, error); 56 | throw error; 57 | } 58 | } 59 | async update(objectName, data) { 60 | await this.ensureInitialized(); 61 | try { 62 | const result = await this.conn.sobject(objectName).update(data); 63 | return result; 64 | } 65 | catch (error) { 66 | console.error(`Failed to update ${objectName}:`, error); 67 | throw error; 68 | } 69 | } 70 | async delete(objectName, id) { 71 | await this.ensureInitialized(); 72 | try { 73 | const result = await this.conn.sobject(objectName).destroy(id); 74 | return result; 75 | } 76 | catch (error) { 77 | console.error(`Failed to delete ${objectName}:`, error); 78 | throw error; 79 | } 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /dist/types.d.ts: -------------------------------------------------------------------------------- 1 | export interface SalesforceQueryResponse { 2 | totalSize: number; 3 | done: boolean; 4 | records: Record[]; 5 | } 6 | export interface SalesforceObject { 7 | name: string; 8 | label: string; 9 | custom: boolean; 10 | queryable: boolean; 11 | } 12 | export interface QueryArgs { 13 | query: string; 14 | } 15 | export declare function isValidQueryArgs(args: any): args is QueryArgs; 16 | -------------------------------------------------------------------------------- /dist/types.js: -------------------------------------------------------------------------------- 1 | // Type guard for query arguments 2 | export function isValidQueryArgs(args) { 3 | return (typeof args === "object" && 4 | args !== null && 5 | "query" in args && 6 | typeof args.query === "string"); 7 | } 8 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "salesforce-mcp-server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "salesforce-mcp-server", 9 | "version": "1.0.0", 10 | "dependencies": { 11 | "@modelcontextprotocol/sdk": "^1.0.1", 12 | "dotenv": "^16.3.1", 13 | "jsforce": "^3.6.3", 14 | "mcp-evals": "^1.0.18" 15 | }, 16 | "devDependencies": { 17 | "@types/jsforce": "^1.11.5", 18 | "@types/node": "^20.10.4", 19 | "tsx": "^4.6.2", 20 | "typescript": "^5.7.2" 21 | } 22 | }, 23 | "node_modules/@actions/core": { 24 | "version": "1.11.1", 25 | "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz", 26 | "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==", 27 | "license": "MIT", 28 | "dependencies": { 29 | "@actions/exec": "^1.1.1", 30 | "@actions/http-client": "^2.0.1" 31 | } 32 | }, 33 | "node_modules/@actions/exec": { 34 | "version": "1.1.1", 35 | "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz", 36 | "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==", 37 | "license": "MIT", 38 | "dependencies": { 39 | "@actions/io": "^1.0.1" 40 | } 41 | }, 42 | "node_modules/@actions/http-client": { 43 | "version": "2.2.3", 44 | "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz", 45 | "integrity": "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==", 46 | "license": "MIT", 47 | "dependencies": { 48 | "tunnel": "^0.0.6", 49 | "undici": "^5.25.4" 50 | } 51 | }, 52 | "node_modules/@actions/io": { 53 | "version": "1.1.3", 54 | "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz", 55 | "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==", 56 | "license": "MIT" 57 | }, 58 | "node_modules/@ai-sdk/openai": { 59 | "version": "1.3.21", 60 | "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-1.3.21.tgz", 61 | "integrity": "sha512-ipAhkRKUd2YaMmn7DAklX3N7Ywx/rCsJHVyb0V/lKRqPcc612qAFVbjg+Uve8QYJlbPxgfsM4s9JmCFp6PSdYw==", 62 | "license": "Apache-2.0", 63 | "dependencies": { 64 | "@ai-sdk/provider": "1.1.3", 65 | "@ai-sdk/provider-utils": "2.2.7" 66 | }, 67 | "engines": { 68 | "node": ">=18" 69 | }, 70 | "peerDependencies": { 71 | "zod": "^3.0.0" 72 | } 73 | }, 74 | "node_modules/@ai-sdk/provider": { 75 | "version": "1.1.3", 76 | "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-1.1.3.tgz", 77 | "integrity": "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==", 78 | "license": "Apache-2.0", 79 | "dependencies": { 80 | "json-schema": "^0.4.0" 81 | }, 82 | "engines": { 83 | "node": ">=18" 84 | } 85 | }, 86 | "node_modules/@ai-sdk/provider-utils": { 87 | "version": "2.2.7", 88 | "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-2.2.7.tgz", 89 | "integrity": "sha512-kM0xS3GWg3aMChh9zfeM+80vEZfXzR3JEUBdycZLtbRZ2TRT8xOj3WodGHPb06sUK5yD7pAXC/P7ctsi2fvUGQ==", 90 | "license": "Apache-2.0", 91 | "dependencies": { 92 | "@ai-sdk/provider": "1.1.3", 93 | "nanoid": "^3.3.8", 94 | "secure-json-parse": "^2.7.0" 95 | }, 96 | "engines": { 97 | "node": ">=18" 98 | }, 99 | "peerDependencies": { 100 | "zod": "^3.23.8" 101 | } 102 | }, 103 | "node_modules/@ai-sdk/react": { 104 | "version": "1.2.11", 105 | "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-1.2.11.tgz", 106 | "integrity": "sha512-+kPqLkJ3TWP6czaJPV+vzAKSUcKQ1598BUrcLHt56sH99+LhmIIW3ylZp0OfC3O6TR3eO1Lt0Yzw4R0mK6g9Gw==", 107 | "license": "Apache-2.0", 108 | "dependencies": { 109 | "@ai-sdk/provider-utils": "2.2.7", 110 | "@ai-sdk/ui-utils": "1.2.10", 111 | "swr": "^2.2.5", 112 | "throttleit": "2.1.0" 113 | }, 114 | "engines": { 115 | "node": ">=18" 116 | }, 117 | "peerDependencies": { 118 | "react": "^18 || ^19 || ^19.0.0-rc", 119 | "zod": "^3.23.8" 120 | }, 121 | "peerDependenciesMeta": { 122 | "zod": { 123 | "optional": true 124 | } 125 | } 126 | }, 127 | "node_modules/@ai-sdk/ui-utils": { 128 | "version": "1.2.10", 129 | "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-1.2.10.tgz", 130 | "integrity": "sha512-GUj+LBoAlRQF1dL/M49jtufGqtLOMApxTpCmVjoRpIPt/dFALVL9RfqfvxwztyIwbK+IxGzcYjSGRsrWrj+86g==", 131 | "license": "Apache-2.0", 132 | "dependencies": { 133 | "@ai-sdk/provider": "1.1.3", 134 | "@ai-sdk/provider-utils": "2.2.7", 135 | "zod-to-json-schema": "^3.24.1" 136 | }, 137 | "engines": { 138 | "node": ">=18" 139 | }, 140 | "peerDependencies": { 141 | "zod": "^3.23.8" 142 | } 143 | }, 144 | "node_modules/@anthropic-ai/sdk": { 145 | "version": "0.8.1", 146 | "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.8.1.tgz", 147 | "integrity": "sha512-59etePenCizVx1O8Qhi1T1ruE04ISfNzCnyhZNcsss1QljsLmYS83jttarMNEvGYcsUF7rwxw2lzcC3Zbxao7g==", 148 | "license": "MIT", 149 | "dependencies": { 150 | "@types/node": "^18.11.18", 151 | "@types/node-fetch": "^2.6.4", 152 | "abort-controller": "^3.0.0", 153 | "agentkeepalive": "^4.2.1", 154 | "digest-fetch": "^1.3.0", 155 | "form-data-encoder": "1.7.2", 156 | "formdata-node": "^4.3.2", 157 | "node-fetch": "^2.6.7", 158 | "web-streams-polyfill": "^3.2.1" 159 | } 160 | }, 161 | "node_modules/@anthropic-ai/sdk/node_modules/@types/node": { 162 | "version": "18.19.87", 163 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.87.tgz", 164 | "integrity": "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A==", 165 | "license": "MIT", 166 | "dependencies": { 167 | "undici-types": "~5.26.4" 168 | } 169 | }, 170 | "node_modules/@anthropic-ai/sdk/node_modules/undici-types": { 171 | "version": "5.26.5", 172 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 173 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", 174 | "license": "MIT" 175 | }, 176 | "node_modules/@babel/runtime": { 177 | "version": "7.26.0", 178 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", 179 | "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", 180 | "license": "MIT", 181 | "dependencies": { 182 | "regenerator-runtime": "^0.14.0" 183 | }, 184 | "engines": { 185 | "node": ">=6.9.0" 186 | } 187 | }, 188 | "node_modules/@babel/runtime-corejs3": { 189 | "version": "7.26.0", 190 | "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.0.tgz", 191 | "integrity": "sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w==", 192 | "license": "MIT", 193 | "dependencies": { 194 | "core-js-pure": "^3.30.2", 195 | "regenerator-runtime": "^0.14.0" 196 | }, 197 | "engines": { 198 | "node": ">=6.9.0" 199 | } 200 | }, 201 | "node_modules/@esbuild/aix-ppc64": { 202 | "version": "0.25.3", 203 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz", 204 | "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==", 205 | "cpu": [ 206 | "ppc64" 207 | ], 208 | "license": "MIT", 209 | "optional": true, 210 | "os": [ 211 | "aix" 212 | ], 213 | "engines": { 214 | "node": ">=18" 215 | } 216 | }, 217 | "node_modules/@esbuild/android-arm": { 218 | "version": "0.25.3", 219 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz", 220 | "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==", 221 | "cpu": [ 222 | "arm" 223 | ], 224 | "license": "MIT", 225 | "optional": true, 226 | "os": [ 227 | "android" 228 | ], 229 | "engines": { 230 | "node": ">=18" 231 | } 232 | }, 233 | "node_modules/@esbuild/android-arm64": { 234 | "version": "0.25.3", 235 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz", 236 | "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==", 237 | "cpu": [ 238 | "arm64" 239 | ], 240 | "license": "MIT", 241 | "optional": true, 242 | "os": [ 243 | "android" 244 | ], 245 | "engines": { 246 | "node": ">=18" 247 | } 248 | }, 249 | "node_modules/@esbuild/android-x64": { 250 | "version": "0.25.3", 251 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz", 252 | "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==", 253 | "cpu": [ 254 | "x64" 255 | ], 256 | "license": "MIT", 257 | "optional": true, 258 | "os": [ 259 | "android" 260 | ], 261 | "engines": { 262 | "node": ">=18" 263 | } 264 | }, 265 | "node_modules/@esbuild/darwin-arm64": { 266 | "version": "0.25.3", 267 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz", 268 | "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==", 269 | "cpu": [ 270 | "arm64" 271 | ], 272 | "license": "MIT", 273 | "optional": true, 274 | "os": [ 275 | "darwin" 276 | ], 277 | "engines": { 278 | "node": ">=18" 279 | } 280 | }, 281 | "node_modules/@esbuild/darwin-x64": { 282 | "version": "0.25.3", 283 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz", 284 | "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==", 285 | "cpu": [ 286 | "x64" 287 | ], 288 | "license": "MIT", 289 | "optional": true, 290 | "os": [ 291 | "darwin" 292 | ], 293 | "engines": { 294 | "node": ">=18" 295 | } 296 | }, 297 | "node_modules/@esbuild/freebsd-arm64": { 298 | "version": "0.25.3", 299 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz", 300 | "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==", 301 | "cpu": [ 302 | "arm64" 303 | ], 304 | "license": "MIT", 305 | "optional": true, 306 | "os": [ 307 | "freebsd" 308 | ], 309 | "engines": { 310 | "node": ">=18" 311 | } 312 | }, 313 | "node_modules/@esbuild/freebsd-x64": { 314 | "version": "0.25.3", 315 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz", 316 | "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==", 317 | "cpu": [ 318 | "x64" 319 | ], 320 | "license": "MIT", 321 | "optional": true, 322 | "os": [ 323 | "freebsd" 324 | ], 325 | "engines": { 326 | "node": ">=18" 327 | } 328 | }, 329 | "node_modules/@esbuild/linux-arm": { 330 | "version": "0.25.3", 331 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz", 332 | "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==", 333 | "cpu": [ 334 | "arm" 335 | ], 336 | "license": "MIT", 337 | "optional": true, 338 | "os": [ 339 | "linux" 340 | ], 341 | "engines": { 342 | "node": ">=18" 343 | } 344 | }, 345 | "node_modules/@esbuild/linux-arm64": { 346 | "version": "0.25.3", 347 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz", 348 | "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==", 349 | "cpu": [ 350 | "arm64" 351 | ], 352 | "license": "MIT", 353 | "optional": true, 354 | "os": [ 355 | "linux" 356 | ], 357 | "engines": { 358 | "node": ">=18" 359 | } 360 | }, 361 | "node_modules/@esbuild/linux-ia32": { 362 | "version": "0.25.3", 363 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz", 364 | "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==", 365 | "cpu": [ 366 | "ia32" 367 | ], 368 | "license": "MIT", 369 | "optional": true, 370 | "os": [ 371 | "linux" 372 | ], 373 | "engines": { 374 | "node": ">=18" 375 | } 376 | }, 377 | "node_modules/@esbuild/linux-loong64": { 378 | "version": "0.25.3", 379 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz", 380 | "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==", 381 | "cpu": [ 382 | "loong64" 383 | ], 384 | "license": "MIT", 385 | "optional": true, 386 | "os": [ 387 | "linux" 388 | ], 389 | "engines": { 390 | "node": ">=18" 391 | } 392 | }, 393 | "node_modules/@esbuild/linux-mips64el": { 394 | "version": "0.25.3", 395 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz", 396 | "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==", 397 | "cpu": [ 398 | "mips64el" 399 | ], 400 | "license": "MIT", 401 | "optional": true, 402 | "os": [ 403 | "linux" 404 | ], 405 | "engines": { 406 | "node": ">=18" 407 | } 408 | }, 409 | "node_modules/@esbuild/linux-ppc64": { 410 | "version": "0.25.3", 411 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz", 412 | "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==", 413 | "cpu": [ 414 | "ppc64" 415 | ], 416 | "license": "MIT", 417 | "optional": true, 418 | "os": [ 419 | "linux" 420 | ], 421 | "engines": { 422 | "node": ">=18" 423 | } 424 | }, 425 | "node_modules/@esbuild/linux-riscv64": { 426 | "version": "0.25.3", 427 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz", 428 | "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==", 429 | "cpu": [ 430 | "riscv64" 431 | ], 432 | "license": "MIT", 433 | "optional": true, 434 | "os": [ 435 | "linux" 436 | ], 437 | "engines": { 438 | "node": ">=18" 439 | } 440 | }, 441 | "node_modules/@esbuild/linux-s390x": { 442 | "version": "0.25.3", 443 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz", 444 | "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==", 445 | "cpu": [ 446 | "s390x" 447 | ], 448 | "license": "MIT", 449 | "optional": true, 450 | "os": [ 451 | "linux" 452 | ], 453 | "engines": { 454 | "node": ">=18" 455 | } 456 | }, 457 | "node_modules/@esbuild/linux-x64": { 458 | "version": "0.25.3", 459 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz", 460 | "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==", 461 | "cpu": [ 462 | "x64" 463 | ], 464 | "license": "MIT", 465 | "optional": true, 466 | "os": [ 467 | "linux" 468 | ], 469 | "engines": { 470 | "node": ">=18" 471 | } 472 | }, 473 | "node_modules/@esbuild/netbsd-arm64": { 474 | "version": "0.25.3", 475 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz", 476 | "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==", 477 | "cpu": [ 478 | "arm64" 479 | ], 480 | "license": "MIT", 481 | "optional": true, 482 | "os": [ 483 | "netbsd" 484 | ], 485 | "engines": { 486 | "node": ">=18" 487 | } 488 | }, 489 | "node_modules/@esbuild/netbsd-x64": { 490 | "version": "0.25.3", 491 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz", 492 | "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==", 493 | "cpu": [ 494 | "x64" 495 | ], 496 | "license": "MIT", 497 | "optional": true, 498 | "os": [ 499 | "netbsd" 500 | ], 501 | "engines": { 502 | "node": ">=18" 503 | } 504 | }, 505 | "node_modules/@esbuild/openbsd-arm64": { 506 | "version": "0.25.3", 507 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz", 508 | "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==", 509 | "cpu": [ 510 | "arm64" 511 | ], 512 | "license": "MIT", 513 | "optional": true, 514 | "os": [ 515 | "openbsd" 516 | ], 517 | "engines": { 518 | "node": ">=18" 519 | } 520 | }, 521 | "node_modules/@esbuild/openbsd-x64": { 522 | "version": "0.25.3", 523 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz", 524 | "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==", 525 | "cpu": [ 526 | "x64" 527 | ], 528 | "license": "MIT", 529 | "optional": true, 530 | "os": [ 531 | "openbsd" 532 | ], 533 | "engines": { 534 | "node": ">=18" 535 | } 536 | }, 537 | "node_modules/@esbuild/sunos-x64": { 538 | "version": "0.25.3", 539 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz", 540 | "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==", 541 | "cpu": [ 542 | "x64" 543 | ], 544 | "license": "MIT", 545 | "optional": true, 546 | "os": [ 547 | "sunos" 548 | ], 549 | "engines": { 550 | "node": ">=18" 551 | } 552 | }, 553 | "node_modules/@esbuild/win32-arm64": { 554 | "version": "0.25.3", 555 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz", 556 | "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==", 557 | "cpu": [ 558 | "arm64" 559 | ], 560 | "license": "MIT", 561 | "optional": true, 562 | "os": [ 563 | "win32" 564 | ], 565 | "engines": { 566 | "node": ">=18" 567 | } 568 | }, 569 | "node_modules/@esbuild/win32-ia32": { 570 | "version": "0.25.3", 571 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz", 572 | "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==", 573 | "cpu": [ 574 | "ia32" 575 | ], 576 | "license": "MIT", 577 | "optional": true, 578 | "os": [ 579 | "win32" 580 | ], 581 | "engines": { 582 | "node": ">=18" 583 | } 584 | }, 585 | "node_modules/@esbuild/win32-x64": { 586 | "version": "0.25.3", 587 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz", 588 | "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==", 589 | "cpu": [ 590 | "x64" 591 | ], 592 | "license": "MIT", 593 | "optional": true, 594 | "os": [ 595 | "win32" 596 | ], 597 | "engines": { 598 | "node": ">=18" 599 | } 600 | }, 601 | "node_modules/@fastify/busboy": { 602 | "version": "2.1.1", 603 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", 604 | "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", 605 | "license": "MIT", 606 | "engines": { 607 | "node": ">=14" 608 | } 609 | }, 610 | "node_modules/@modelcontextprotocol/sdk": { 611 | "version": "1.11.0", 612 | "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.0.tgz", 613 | "integrity": "sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==", 614 | "license": "MIT", 615 | "dependencies": { 616 | "content-type": "^1.0.5", 617 | "cors": "^2.8.5", 618 | "cross-spawn": "^7.0.3", 619 | "eventsource": "^3.0.2", 620 | "express": "^5.0.1", 621 | "express-rate-limit": "^7.5.0", 622 | "pkce-challenge": "^5.0.0", 623 | "raw-body": "^3.0.0", 624 | "zod": "^3.23.8", 625 | "zod-to-json-schema": "^3.24.1" 626 | }, 627 | "engines": { 628 | "node": ">=18" 629 | } 630 | }, 631 | "node_modules/@opentelemetry/api": { 632 | "version": "1.9.0", 633 | "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", 634 | "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", 635 | "license": "Apache-2.0", 636 | "engines": { 637 | "node": ">=8.0.0" 638 | } 639 | }, 640 | "node_modules/@sindresorhus/is": { 641 | "version": "4.6.0", 642 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", 643 | "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", 644 | "license": "MIT", 645 | "engines": { 646 | "node": ">=10" 647 | }, 648 | "funding": { 649 | "url": "https://github.com/sindresorhus/is?sponsor=1" 650 | } 651 | }, 652 | "node_modules/@types/diff-match-patch": { 653 | "version": "1.0.36", 654 | "resolved": "https://registry.npmjs.org/@types/diff-match-patch/-/diff-match-patch-1.0.36.tgz", 655 | "integrity": "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==", 656 | "license": "MIT" 657 | }, 658 | "node_modules/@types/jsforce": { 659 | "version": "1.11.5", 660 | "resolved": "https://registry.npmjs.org/@types/jsforce/-/jsforce-1.11.5.tgz", 661 | "integrity": "sha512-68uPAse+nDBDnh421L9ngd7jn11hST+Gz2CJMz5l+M4UVD2fYJsgdZQReZf7bTZQsIUdnr0sAp71ihLxAusZZA==", 662 | "dev": true, 663 | "license": "MIT", 664 | "dependencies": { 665 | "@types/node": ">=4.0" 666 | } 667 | }, 668 | "node_modules/@types/node": { 669 | "version": "20.17.9", 670 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.9.tgz", 671 | "integrity": "sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw==", 672 | "license": "MIT", 673 | "dependencies": { 674 | "undici-types": "~6.19.2" 675 | } 676 | }, 677 | "node_modules/@types/node-fetch": { 678 | "version": "2.6.12", 679 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", 680 | "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", 681 | "license": "MIT", 682 | "dependencies": { 683 | "@types/node": "*", 684 | "form-data": "^4.0.0" 685 | } 686 | }, 687 | "node_modules/abort-controller": { 688 | "version": "3.0.0", 689 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 690 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 691 | "license": "MIT", 692 | "dependencies": { 693 | "event-target-shim": "^5.0.0" 694 | }, 695 | "engines": { 696 | "node": ">=6.5" 697 | } 698 | }, 699 | "node_modules/accepts": { 700 | "version": "2.0.0", 701 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", 702 | "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", 703 | "license": "MIT", 704 | "dependencies": { 705 | "mime-types": "^3.0.0", 706 | "negotiator": "^1.0.0" 707 | }, 708 | "engines": { 709 | "node": ">= 0.6" 710 | } 711 | }, 712 | "node_modules/accepts/node_modules/mime-db": { 713 | "version": "1.54.0", 714 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", 715 | "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", 716 | "license": "MIT", 717 | "engines": { 718 | "node": ">= 0.6" 719 | } 720 | }, 721 | "node_modules/accepts/node_modules/mime-types": { 722 | "version": "3.0.1", 723 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", 724 | "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", 725 | "license": "MIT", 726 | "dependencies": { 727 | "mime-db": "^1.54.0" 728 | }, 729 | "engines": { 730 | "node": ">= 0.6" 731 | } 732 | }, 733 | "node_modules/agent-base": { 734 | "version": "6.0.2", 735 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 736 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 737 | "license": "MIT", 738 | "dependencies": { 739 | "debug": "4" 740 | }, 741 | "engines": { 742 | "node": ">= 6.0.0" 743 | } 744 | }, 745 | "node_modules/agentkeepalive": { 746 | "version": "4.6.0", 747 | "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", 748 | "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", 749 | "license": "MIT", 750 | "dependencies": { 751 | "humanize-ms": "^1.2.1" 752 | }, 753 | "engines": { 754 | "node": ">= 8.0.0" 755 | } 756 | }, 757 | "node_modules/ai": { 758 | "version": "4.3.13", 759 | "resolved": "https://registry.npmjs.org/ai/-/ai-4.3.13.tgz", 760 | "integrity": "sha512-cC5HXItuOwGykSMacCPzNp6+NMTxeuTjOenztVgSJhdC9Z4OrzBxwkyeDAf4h1QP938ZFi7IBdq3u4lxVoVmvw==", 761 | "license": "Apache-2.0", 762 | "dependencies": { 763 | "@ai-sdk/provider": "1.1.3", 764 | "@ai-sdk/provider-utils": "2.2.7", 765 | "@ai-sdk/react": "1.2.11", 766 | "@ai-sdk/ui-utils": "1.2.10", 767 | "@opentelemetry/api": "1.9.0", 768 | "jsondiffpatch": "0.6.0" 769 | }, 770 | "engines": { 771 | "node": ">=18" 772 | }, 773 | "peerDependencies": { 774 | "react": "^18 || ^19 || ^19.0.0-rc", 775 | "zod": "^3.23.8" 776 | }, 777 | "peerDependenciesMeta": { 778 | "react": { 779 | "optional": true 780 | } 781 | } 782 | }, 783 | "node_modules/ansi-escapes": { 784 | "version": "4.3.2", 785 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", 786 | "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", 787 | "license": "MIT", 788 | "dependencies": { 789 | "type-fest": "^0.21.3" 790 | }, 791 | "engines": { 792 | "node": ">=8" 793 | }, 794 | "funding": { 795 | "url": "https://github.com/sponsors/sindresorhus" 796 | } 797 | }, 798 | "node_modules/ansi-regex": { 799 | "version": "5.0.1", 800 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 801 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 802 | "license": "MIT", 803 | "engines": { 804 | "node": ">=8" 805 | } 806 | }, 807 | "node_modules/ansi-styles": { 808 | "version": "4.3.0", 809 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 810 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 811 | "license": "MIT", 812 | "dependencies": { 813 | "color-convert": "^2.0.1" 814 | }, 815 | "engines": { 816 | "node": ">=8" 817 | }, 818 | "funding": { 819 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 820 | } 821 | }, 822 | "node_modules/asap": { 823 | "version": "2.0.6", 824 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 825 | "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", 826 | "license": "MIT" 827 | }, 828 | "node_modules/asynckit": { 829 | "version": "0.4.0", 830 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 831 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 832 | "license": "MIT" 833 | }, 834 | "node_modules/base-64": { 835 | "version": "0.1.0", 836 | "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", 837 | "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" 838 | }, 839 | "node_modules/base64-js": { 840 | "version": "1.5.1", 841 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 842 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 843 | "funding": [ 844 | { 845 | "type": "github", 846 | "url": "https://github.com/sponsors/feross" 847 | }, 848 | { 849 | "type": "patreon", 850 | "url": "https://www.patreon.com/feross" 851 | }, 852 | { 853 | "type": "consulting", 854 | "url": "https://feross.org/support" 855 | } 856 | ], 857 | "license": "MIT" 858 | }, 859 | "node_modules/base64url": { 860 | "version": "3.0.1", 861 | "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", 862 | "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", 863 | "license": "MIT", 864 | "engines": { 865 | "node": ">=6.0.0" 866 | } 867 | }, 868 | "node_modules/bl": { 869 | "version": "4.1.0", 870 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 871 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 872 | "license": "MIT", 873 | "dependencies": { 874 | "buffer": "^5.5.0", 875 | "inherits": "^2.0.4", 876 | "readable-stream": "^3.4.0" 877 | } 878 | }, 879 | "node_modules/body-parser": { 880 | "version": "2.2.0", 881 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", 882 | "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", 883 | "license": "MIT", 884 | "dependencies": { 885 | "bytes": "^3.1.2", 886 | "content-type": "^1.0.5", 887 | "debug": "^4.4.0", 888 | "http-errors": "^2.0.0", 889 | "iconv-lite": "^0.6.3", 890 | "on-finished": "^2.4.1", 891 | "qs": "^6.14.0", 892 | "raw-body": "^3.0.0", 893 | "type-is": "^2.0.0" 894 | }, 895 | "engines": { 896 | "node": ">=18" 897 | } 898 | }, 899 | "node_modules/body-parser/node_modules/iconv-lite": { 900 | "version": "0.6.3", 901 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 902 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 903 | "license": "MIT", 904 | "dependencies": { 905 | "safer-buffer": ">= 2.1.2 < 3.0.0" 906 | }, 907 | "engines": { 908 | "node": ">=0.10.0" 909 | } 910 | }, 911 | "node_modules/buffer": { 912 | "version": "5.7.1", 913 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 914 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 915 | "funding": [ 916 | { 917 | "type": "github", 918 | "url": "https://github.com/sponsors/feross" 919 | }, 920 | { 921 | "type": "patreon", 922 | "url": "https://www.patreon.com/feross" 923 | }, 924 | { 925 | "type": "consulting", 926 | "url": "https://feross.org/support" 927 | } 928 | ], 929 | "license": "MIT", 930 | "dependencies": { 931 | "base64-js": "^1.3.1", 932 | "ieee754": "^1.1.13" 933 | } 934 | }, 935 | "node_modules/bytes": { 936 | "version": "3.1.2", 937 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 938 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 939 | "license": "MIT", 940 | "engines": { 941 | "node": ">= 0.8" 942 | } 943 | }, 944 | "node_modules/call-bind-apply-helpers": { 945 | "version": "1.0.2", 946 | "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", 947 | "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 948 | "license": "MIT", 949 | "dependencies": { 950 | "es-errors": "^1.3.0", 951 | "function-bind": "^1.1.2" 952 | }, 953 | "engines": { 954 | "node": ">= 0.4" 955 | } 956 | }, 957 | "node_modules/call-bound": { 958 | "version": "1.0.4", 959 | "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", 960 | "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", 961 | "license": "MIT", 962 | "dependencies": { 963 | "call-bind-apply-helpers": "^1.0.2", 964 | "get-intrinsic": "^1.3.0" 965 | }, 966 | "engines": { 967 | "node": ">= 0.4" 968 | }, 969 | "funding": { 970 | "url": "https://github.com/sponsors/ljharb" 971 | } 972 | }, 973 | "node_modules/chalk": { 974 | "version": "4.1.2", 975 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 976 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 977 | "license": "MIT", 978 | "dependencies": { 979 | "ansi-styles": "^4.1.0", 980 | "supports-color": "^7.1.0" 981 | }, 982 | "engines": { 983 | "node": ">=10" 984 | }, 985 | "funding": { 986 | "url": "https://github.com/chalk/chalk?sponsor=1" 987 | } 988 | }, 989 | "node_modules/chardet": { 990 | "version": "0.7.0", 991 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 992 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 993 | "license": "MIT" 994 | }, 995 | "node_modules/charenc": { 996 | "version": "0.0.2", 997 | "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", 998 | "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", 999 | "license": "BSD-3-Clause", 1000 | "engines": { 1001 | "node": "*" 1002 | } 1003 | }, 1004 | "node_modules/cli-cursor": { 1005 | "version": "3.1.0", 1006 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 1007 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 1008 | "license": "MIT", 1009 | "dependencies": { 1010 | "restore-cursor": "^3.1.0" 1011 | }, 1012 | "engines": { 1013 | "node": ">=8" 1014 | } 1015 | }, 1016 | "node_modules/cli-spinners": { 1017 | "version": "2.9.2", 1018 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", 1019 | "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", 1020 | "license": "MIT", 1021 | "engines": { 1022 | "node": ">=6" 1023 | }, 1024 | "funding": { 1025 | "url": "https://github.com/sponsors/sindresorhus" 1026 | } 1027 | }, 1028 | "node_modules/cli-width": { 1029 | "version": "3.0.0", 1030 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", 1031 | "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", 1032 | "license": "ISC", 1033 | "engines": { 1034 | "node": ">= 10" 1035 | } 1036 | }, 1037 | "node_modules/clone": { 1038 | "version": "1.0.4", 1039 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 1040 | "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", 1041 | "license": "MIT", 1042 | "engines": { 1043 | "node": ">=0.8" 1044 | } 1045 | }, 1046 | "node_modules/color-convert": { 1047 | "version": "2.0.1", 1048 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1049 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1050 | "license": "MIT", 1051 | "dependencies": { 1052 | "color-name": "~1.1.4" 1053 | }, 1054 | "engines": { 1055 | "node": ">=7.0.0" 1056 | } 1057 | }, 1058 | "node_modules/color-name": { 1059 | "version": "1.1.4", 1060 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1061 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1062 | "license": "MIT" 1063 | }, 1064 | "node_modules/combined-stream": { 1065 | "version": "1.0.8", 1066 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 1067 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 1068 | "license": "MIT", 1069 | "dependencies": { 1070 | "delayed-stream": "~1.0.0" 1071 | }, 1072 | "engines": { 1073 | "node": ">= 0.8" 1074 | } 1075 | }, 1076 | "node_modules/commander": { 1077 | "version": "4.1.1", 1078 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 1079 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 1080 | "license": "MIT", 1081 | "engines": { 1082 | "node": ">= 6" 1083 | } 1084 | }, 1085 | "node_modules/content-disposition": { 1086 | "version": "1.0.0", 1087 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", 1088 | "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", 1089 | "license": "MIT", 1090 | "dependencies": { 1091 | "safe-buffer": "5.2.1" 1092 | }, 1093 | "engines": { 1094 | "node": ">= 0.6" 1095 | } 1096 | }, 1097 | "node_modules/content-type": { 1098 | "version": "1.0.5", 1099 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 1100 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 1101 | "license": "MIT", 1102 | "engines": { 1103 | "node": ">= 0.6" 1104 | } 1105 | }, 1106 | "node_modules/cookie": { 1107 | "version": "0.7.2", 1108 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", 1109 | "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", 1110 | "license": "MIT", 1111 | "engines": { 1112 | "node": ">= 0.6" 1113 | } 1114 | }, 1115 | "node_modules/cookie-signature": { 1116 | "version": "1.2.2", 1117 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", 1118 | "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", 1119 | "license": "MIT", 1120 | "engines": { 1121 | "node": ">=6.6.0" 1122 | } 1123 | }, 1124 | "node_modules/core-js": { 1125 | "version": "3.39.0", 1126 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz", 1127 | "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", 1128 | "hasInstallScript": true, 1129 | "license": "MIT", 1130 | "funding": { 1131 | "type": "opencollective", 1132 | "url": "https://opencollective.com/core-js" 1133 | } 1134 | }, 1135 | "node_modules/core-js-pure": { 1136 | "version": "3.39.0", 1137 | "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.39.0.tgz", 1138 | "integrity": "sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==", 1139 | "hasInstallScript": true, 1140 | "license": "MIT", 1141 | "funding": { 1142 | "type": "opencollective", 1143 | "url": "https://opencollective.com/core-js" 1144 | } 1145 | }, 1146 | "node_modules/cors": { 1147 | "version": "2.8.5", 1148 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 1149 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 1150 | "license": "MIT", 1151 | "dependencies": { 1152 | "object-assign": "^4", 1153 | "vary": "^1" 1154 | }, 1155 | "engines": { 1156 | "node": ">= 0.10" 1157 | } 1158 | }, 1159 | "node_modules/cross-spawn": { 1160 | "version": "7.0.6", 1161 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 1162 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 1163 | "license": "MIT", 1164 | "dependencies": { 1165 | "path-key": "^3.1.0", 1166 | "shebang-command": "^2.0.0", 1167 | "which": "^2.0.1" 1168 | }, 1169 | "engines": { 1170 | "node": ">= 8" 1171 | } 1172 | }, 1173 | "node_modules/crypt": { 1174 | "version": "0.0.2", 1175 | "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", 1176 | "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", 1177 | "license": "BSD-3-Clause", 1178 | "engines": { 1179 | "node": "*" 1180 | } 1181 | }, 1182 | "node_modules/csprng": { 1183 | "version": "0.1.2", 1184 | "resolved": "https://registry.npmjs.org/csprng/-/csprng-0.1.2.tgz", 1185 | "integrity": "sha512-D3WAbvvgUVIqSxUfdvLeGjuotsB32bvfVPd+AaaTWMtyUeC9zgCnw5xs94no89yFLVsafvY9dMZEhTwsY/ZecA==", 1186 | "license": "MIT", 1187 | "dependencies": { 1188 | "sequin": "*" 1189 | }, 1190 | "engines": { 1191 | "node": ">=0.6.0" 1192 | } 1193 | }, 1194 | "node_modules/csv-parse": { 1195 | "version": "5.6.0", 1196 | "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.6.0.tgz", 1197 | "integrity": "sha512-l3nz3euub2QMg5ouu5U09Ew9Wf6/wQ8I++ch1loQ0ljmzhmfZYrH9fflS22i/PQEvsPvxCwxgz5q7UB8K1JO4Q==", 1198 | "license": "MIT" 1199 | }, 1200 | "node_modules/csv-stringify": { 1201 | "version": "6.5.2", 1202 | "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.5.2.tgz", 1203 | "integrity": "sha512-RFPahj0sXcmUyjrObAK+DOWtMvMIFV328n4qZJhgX3x2RqkQgOTU2mCUmiFR0CzM6AzChlRSUErjiJeEt8BaQA==", 1204 | "license": "MIT" 1205 | }, 1206 | "node_modules/debug": { 1207 | "version": "4.4.0", 1208 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 1209 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 1210 | "license": "MIT", 1211 | "dependencies": { 1212 | "ms": "^2.1.3" 1213 | }, 1214 | "engines": { 1215 | "node": ">=6.0" 1216 | }, 1217 | "peerDependenciesMeta": { 1218 | "supports-color": { 1219 | "optional": true 1220 | } 1221 | } 1222 | }, 1223 | "node_modules/defaults": { 1224 | "version": "1.0.4", 1225 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", 1226 | "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", 1227 | "license": "MIT", 1228 | "dependencies": { 1229 | "clone": "^1.0.2" 1230 | }, 1231 | "funding": { 1232 | "url": "https://github.com/sponsors/sindresorhus" 1233 | } 1234 | }, 1235 | "node_modules/delayed-stream": { 1236 | "version": "1.0.0", 1237 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1238 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 1239 | "license": "MIT", 1240 | "engines": { 1241 | "node": ">=0.4.0" 1242 | } 1243 | }, 1244 | "node_modules/depd": { 1245 | "version": "2.0.0", 1246 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 1247 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 1248 | "license": "MIT", 1249 | "engines": { 1250 | "node": ">= 0.8" 1251 | } 1252 | }, 1253 | "node_modules/dequal": { 1254 | "version": "2.0.3", 1255 | "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", 1256 | "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", 1257 | "license": "MIT", 1258 | "engines": { 1259 | "node": ">=6" 1260 | } 1261 | }, 1262 | "node_modules/diff-match-patch": { 1263 | "version": "1.0.5", 1264 | "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", 1265 | "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==", 1266 | "license": "Apache-2.0" 1267 | }, 1268 | "node_modules/digest-fetch": { 1269 | "version": "1.3.0", 1270 | "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz", 1271 | "integrity": "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==", 1272 | "license": "ISC", 1273 | "dependencies": { 1274 | "base-64": "^0.1.0", 1275 | "md5": "^2.3.0" 1276 | } 1277 | }, 1278 | "node_modules/dotenv": { 1279 | "version": "16.4.7", 1280 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", 1281 | "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", 1282 | "license": "BSD-2-Clause", 1283 | "engines": { 1284 | "node": ">=12" 1285 | }, 1286 | "funding": { 1287 | "url": "https://dotenvx.com" 1288 | } 1289 | }, 1290 | "node_modules/dunder-proto": { 1291 | "version": "1.0.1", 1292 | "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 1293 | "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 1294 | "license": "MIT", 1295 | "dependencies": { 1296 | "call-bind-apply-helpers": "^1.0.1", 1297 | "es-errors": "^1.3.0", 1298 | "gopd": "^1.2.0" 1299 | }, 1300 | "engines": { 1301 | "node": ">= 0.4" 1302 | } 1303 | }, 1304 | "node_modules/ee-first": { 1305 | "version": "1.1.1", 1306 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 1307 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", 1308 | "license": "MIT" 1309 | }, 1310 | "node_modules/emoji-regex": { 1311 | "version": "8.0.0", 1312 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1313 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1314 | "license": "MIT" 1315 | }, 1316 | "node_modules/encodeurl": { 1317 | "version": "2.0.0", 1318 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", 1319 | "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", 1320 | "license": "MIT", 1321 | "engines": { 1322 | "node": ">= 0.8" 1323 | } 1324 | }, 1325 | "node_modules/es-define-property": { 1326 | "version": "1.0.1", 1327 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 1328 | "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 1329 | "license": "MIT", 1330 | "engines": { 1331 | "node": ">= 0.4" 1332 | } 1333 | }, 1334 | "node_modules/es-errors": { 1335 | "version": "1.3.0", 1336 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 1337 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 1338 | "license": "MIT", 1339 | "engines": { 1340 | "node": ">= 0.4" 1341 | } 1342 | }, 1343 | "node_modules/es-object-atoms": { 1344 | "version": "1.1.1", 1345 | "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", 1346 | "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 1347 | "license": "MIT", 1348 | "dependencies": { 1349 | "es-errors": "^1.3.0" 1350 | }, 1351 | "engines": { 1352 | "node": ">= 0.4" 1353 | } 1354 | }, 1355 | "node_modules/esbuild": { 1356 | "version": "0.25.3", 1357 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz", 1358 | "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==", 1359 | "hasInstallScript": true, 1360 | "license": "MIT", 1361 | "bin": { 1362 | "esbuild": "bin/esbuild" 1363 | }, 1364 | "engines": { 1365 | "node": ">=18" 1366 | }, 1367 | "optionalDependencies": { 1368 | "@esbuild/aix-ppc64": "0.25.3", 1369 | "@esbuild/android-arm": "0.25.3", 1370 | "@esbuild/android-arm64": "0.25.3", 1371 | "@esbuild/android-x64": "0.25.3", 1372 | "@esbuild/darwin-arm64": "0.25.3", 1373 | "@esbuild/darwin-x64": "0.25.3", 1374 | "@esbuild/freebsd-arm64": "0.25.3", 1375 | "@esbuild/freebsd-x64": "0.25.3", 1376 | "@esbuild/linux-arm": "0.25.3", 1377 | "@esbuild/linux-arm64": "0.25.3", 1378 | "@esbuild/linux-ia32": "0.25.3", 1379 | "@esbuild/linux-loong64": "0.25.3", 1380 | "@esbuild/linux-mips64el": "0.25.3", 1381 | "@esbuild/linux-ppc64": "0.25.3", 1382 | "@esbuild/linux-riscv64": "0.25.3", 1383 | "@esbuild/linux-s390x": "0.25.3", 1384 | "@esbuild/linux-x64": "0.25.3", 1385 | "@esbuild/netbsd-arm64": "0.25.3", 1386 | "@esbuild/netbsd-x64": "0.25.3", 1387 | "@esbuild/openbsd-arm64": "0.25.3", 1388 | "@esbuild/openbsd-x64": "0.25.3", 1389 | "@esbuild/sunos-x64": "0.25.3", 1390 | "@esbuild/win32-arm64": "0.25.3", 1391 | "@esbuild/win32-ia32": "0.25.3", 1392 | "@esbuild/win32-x64": "0.25.3" 1393 | } 1394 | }, 1395 | "node_modules/escape-html": { 1396 | "version": "1.0.3", 1397 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 1398 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", 1399 | "license": "MIT" 1400 | }, 1401 | "node_modules/escape-string-regexp": { 1402 | "version": "1.0.5", 1403 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1404 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 1405 | "license": "MIT", 1406 | "engines": { 1407 | "node": ">=0.8.0" 1408 | } 1409 | }, 1410 | "node_modules/etag": { 1411 | "version": "1.8.1", 1412 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 1413 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 1414 | "license": "MIT", 1415 | "engines": { 1416 | "node": ">= 0.6" 1417 | } 1418 | }, 1419 | "node_modules/event-target-shim": { 1420 | "version": "5.0.1", 1421 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 1422 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 1423 | "license": "MIT", 1424 | "engines": { 1425 | "node": ">=6" 1426 | } 1427 | }, 1428 | "node_modules/eventsource": { 1429 | "version": "3.0.6", 1430 | "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.6.tgz", 1431 | "integrity": "sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==", 1432 | "license": "MIT", 1433 | "dependencies": { 1434 | "eventsource-parser": "^3.0.1" 1435 | }, 1436 | "engines": { 1437 | "node": ">=18.0.0" 1438 | } 1439 | }, 1440 | "node_modules/eventsource-parser": { 1441 | "version": "3.0.1", 1442 | "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", 1443 | "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", 1444 | "license": "MIT", 1445 | "engines": { 1446 | "node": ">=18.0.0" 1447 | } 1448 | }, 1449 | "node_modules/express": { 1450 | "version": "5.1.0", 1451 | "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", 1452 | "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", 1453 | "license": "MIT", 1454 | "dependencies": { 1455 | "accepts": "^2.0.0", 1456 | "body-parser": "^2.2.0", 1457 | "content-disposition": "^1.0.0", 1458 | "content-type": "^1.0.5", 1459 | "cookie": "^0.7.1", 1460 | "cookie-signature": "^1.2.1", 1461 | "debug": "^4.4.0", 1462 | "encodeurl": "^2.0.0", 1463 | "escape-html": "^1.0.3", 1464 | "etag": "^1.8.1", 1465 | "finalhandler": "^2.1.0", 1466 | "fresh": "^2.0.0", 1467 | "http-errors": "^2.0.0", 1468 | "merge-descriptors": "^2.0.0", 1469 | "mime-types": "^3.0.0", 1470 | "on-finished": "^2.4.1", 1471 | "once": "^1.4.0", 1472 | "parseurl": "^1.3.3", 1473 | "proxy-addr": "^2.0.7", 1474 | "qs": "^6.14.0", 1475 | "range-parser": "^1.2.1", 1476 | "router": "^2.2.0", 1477 | "send": "^1.1.0", 1478 | "serve-static": "^2.2.0", 1479 | "statuses": "^2.0.1", 1480 | "type-is": "^2.0.1", 1481 | "vary": "^1.1.2" 1482 | }, 1483 | "engines": { 1484 | "node": ">= 18" 1485 | }, 1486 | "funding": { 1487 | "type": "opencollective", 1488 | "url": "https://opencollective.com/express" 1489 | } 1490 | }, 1491 | "node_modules/express-rate-limit": { 1492 | "version": "7.5.0", 1493 | "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", 1494 | "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", 1495 | "license": "MIT", 1496 | "engines": { 1497 | "node": ">= 16" 1498 | }, 1499 | "funding": { 1500 | "url": "https://github.com/sponsors/express-rate-limit" 1501 | }, 1502 | "peerDependencies": { 1503 | "express": "^4.11 || 5 || ^5.0.0-beta.1" 1504 | } 1505 | }, 1506 | "node_modules/express/node_modules/mime-db": { 1507 | "version": "1.54.0", 1508 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", 1509 | "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", 1510 | "license": "MIT", 1511 | "engines": { 1512 | "node": ">= 0.6" 1513 | } 1514 | }, 1515 | "node_modules/express/node_modules/mime-types": { 1516 | "version": "3.0.1", 1517 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", 1518 | "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", 1519 | "license": "MIT", 1520 | "dependencies": { 1521 | "mime-db": "^1.54.0" 1522 | }, 1523 | "engines": { 1524 | "node": ">= 0.6" 1525 | } 1526 | }, 1527 | "node_modules/external-editor": { 1528 | "version": "3.1.0", 1529 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 1530 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 1531 | "license": "MIT", 1532 | "dependencies": { 1533 | "chardet": "^0.7.0", 1534 | "iconv-lite": "^0.4.24", 1535 | "tmp": "^0.0.33" 1536 | }, 1537 | "engines": { 1538 | "node": ">=4" 1539 | } 1540 | }, 1541 | "node_modules/faye": { 1542 | "version": "1.4.0", 1543 | "resolved": "https://registry.npmjs.org/faye/-/faye-1.4.0.tgz", 1544 | "integrity": "sha512-kRrIg4be8VNYhycS2PY//hpBJSzZPr/DBbcy9VWelhZMW3KhyLkQR0HL0k0MNpmVoNFF4EdfMFkNAWjTP65g6w==", 1545 | "license": "Apache-2.0", 1546 | "dependencies": { 1547 | "asap": "*", 1548 | "csprng": "*", 1549 | "faye-websocket": ">=0.9.1", 1550 | "safe-buffer": "*", 1551 | "tough-cookie": "*", 1552 | "tunnel-agent": "*" 1553 | }, 1554 | "engines": { 1555 | "node": ">=0.8.0" 1556 | } 1557 | }, 1558 | "node_modules/faye-websocket": { 1559 | "version": "0.11.4", 1560 | "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", 1561 | "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", 1562 | "license": "Apache-2.0", 1563 | "dependencies": { 1564 | "websocket-driver": ">=0.5.1" 1565 | }, 1566 | "engines": { 1567 | "node": ">=0.8.0" 1568 | } 1569 | }, 1570 | "node_modules/figures": { 1571 | "version": "3.2.0", 1572 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 1573 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 1574 | "license": "MIT", 1575 | "dependencies": { 1576 | "escape-string-regexp": "^1.0.5" 1577 | }, 1578 | "engines": { 1579 | "node": ">=8" 1580 | }, 1581 | "funding": { 1582 | "url": "https://github.com/sponsors/sindresorhus" 1583 | } 1584 | }, 1585 | "node_modules/finalhandler": { 1586 | "version": "2.1.0", 1587 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", 1588 | "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", 1589 | "license": "MIT", 1590 | "dependencies": { 1591 | "debug": "^4.4.0", 1592 | "encodeurl": "^2.0.0", 1593 | "escape-html": "^1.0.3", 1594 | "on-finished": "^2.4.1", 1595 | "parseurl": "^1.3.3", 1596 | "statuses": "^2.0.1" 1597 | }, 1598 | "engines": { 1599 | "node": ">= 0.8" 1600 | } 1601 | }, 1602 | "node_modules/form-data": { 1603 | "version": "4.0.1", 1604 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", 1605 | "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", 1606 | "license": "MIT", 1607 | "dependencies": { 1608 | "asynckit": "^0.4.0", 1609 | "combined-stream": "^1.0.8", 1610 | "mime-types": "^2.1.12" 1611 | }, 1612 | "engines": { 1613 | "node": ">= 6" 1614 | } 1615 | }, 1616 | "node_modules/form-data-encoder": { 1617 | "version": "1.7.2", 1618 | "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", 1619 | "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", 1620 | "license": "MIT" 1621 | }, 1622 | "node_modules/formdata-node": { 1623 | "version": "4.4.1", 1624 | "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", 1625 | "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", 1626 | "license": "MIT", 1627 | "dependencies": { 1628 | "node-domexception": "1.0.0", 1629 | "web-streams-polyfill": "4.0.0-beta.3" 1630 | }, 1631 | "engines": { 1632 | "node": ">= 12.20" 1633 | } 1634 | }, 1635 | "node_modules/formdata-node/node_modules/web-streams-polyfill": { 1636 | "version": "4.0.0-beta.3", 1637 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", 1638 | "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", 1639 | "license": "MIT", 1640 | "engines": { 1641 | "node": ">= 14" 1642 | } 1643 | }, 1644 | "node_modules/forwarded": { 1645 | "version": "0.2.0", 1646 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 1647 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 1648 | "license": "MIT", 1649 | "engines": { 1650 | "node": ">= 0.6" 1651 | } 1652 | }, 1653 | "node_modules/fresh": { 1654 | "version": "2.0.0", 1655 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", 1656 | "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", 1657 | "license": "MIT", 1658 | "engines": { 1659 | "node": ">= 0.8" 1660 | } 1661 | }, 1662 | "node_modules/fsevents": { 1663 | "version": "2.3.3", 1664 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1665 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1666 | "hasInstallScript": true, 1667 | "license": "MIT", 1668 | "optional": true, 1669 | "os": [ 1670 | "darwin" 1671 | ], 1672 | "engines": { 1673 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1674 | } 1675 | }, 1676 | "node_modules/function-bind": { 1677 | "version": "1.1.2", 1678 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 1679 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1680 | "license": "MIT", 1681 | "funding": { 1682 | "url": "https://github.com/sponsors/ljharb" 1683 | } 1684 | }, 1685 | "node_modules/get-intrinsic": { 1686 | "version": "1.3.0", 1687 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", 1688 | "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 1689 | "license": "MIT", 1690 | "dependencies": { 1691 | "call-bind-apply-helpers": "^1.0.2", 1692 | "es-define-property": "^1.0.1", 1693 | "es-errors": "^1.3.0", 1694 | "es-object-atoms": "^1.1.1", 1695 | "function-bind": "^1.1.2", 1696 | "get-proto": "^1.0.1", 1697 | "gopd": "^1.2.0", 1698 | "has-symbols": "^1.1.0", 1699 | "hasown": "^2.0.2", 1700 | "math-intrinsics": "^1.1.0" 1701 | }, 1702 | "engines": { 1703 | "node": ">= 0.4" 1704 | }, 1705 | "funding": { 1706 | "url": "https://github.com/sponsors/ljharb" 1707 | } 1708 | }, 1709 | "node_modules/get-proto": { 1710 | "version": "1.0.1", 1711 | "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 1712 | "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 1713 | "license": "MIT", 1714 | "dependencies": { 1715 | "dunder-proto": "^1.0.1", 1716 | "es-object-atoms": "^1.0.0" 1717 | }, 1718 | "engines": { 1719 | "node": ">= 0.4" 1720 | } 1721 | }, 1722 | "node_modules/get-tsconfig": { 1723 | "version": "4.8.1", 1724 | "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", 1725 | "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", 1726 | "license": "MIT", 1727 | "dependencies": { 1728 | "resolve-pkg-maps": "^1.0.0" 1729 | }, 1730 | "funding": { 1731 | "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" 1732 | } 1733 | }, 1734 | "node_modules/gopd": { 1735 | "version": "1.2.0", 1736 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 1737 | "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 1738 | "license": "MIT", 1739 | "engines": { 1740 | "node": ">= 0.4" 1741 | }, 1742 | "funding": { 1743 | "url": "https://github.com/sponsors/ljharb" 1744 | } 1745 | }, 1746 | "node_modules/has-flag": { 1747 | "version": "4.0.0", 1748 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1749 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1750 | "license": "MIT", 1751 | "engines": { 1752 | "node": ">=8" 1753 | } 1754 | }, 1755 | "node_modules/has-symbols": { 1756 | "version": "1.1.0", 1757 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 1758 | "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 1759 | "license": "MIT", 1760 | "engines": { 1761 | "node": ">= 0.4" 1762 | }, 1763 | "funding": { 1764 | "url": "https://github.com/sponsors/ljharb" 1765 | } 1766 | }, 1767 | "node_modules/hasown": { 1768 | "version": "2.0.2", 1769 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1770 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1771 | "license": "MIT", 1772 | "dependencies": { 1773 | "function-bind": "^1.1.2" 1774 | }, 1775 | "engines": { 1776 | "node": ">= 0.4" 1777 | } 1778 | }, 1779 | "node_modules/http-errors": { 1780 | "version": "2.0.0", 1781 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 1782 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 1783 | "license": "MIT", 1784 | "dependencies": { 1785 | "depd": "2.0.0", 1786 | "inherits": "2.0.4", 1787 | "setprototypeof": "1.2.0", 1788 | "statuses": "2.0.1", 1789 | "toidentifier": "1.0.1" 1790 | }, 1791 | "engines": { 1792 | "node": ">= 0.8" 1793 | } 1794 | }, 1795 | "node_modules/http-parser-js": { 1796 | "version": "0.5.8", 1797 | "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", 1798 | "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", 1799 | "license": "MIT" 1800 | }, 1801 | "node_modules/https-proxy-agent": { 1802 | "version": "5.0.1", 1803 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 1804 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 1805 | "license": "MIT", 1806 | "dependencies": { 1807 | "agent-base": "6", 1808 | "debug": "4" 1809 | }, 1810 | "engines": { 1811 | "node": ">= 6" 1812 | } 1813 | }, 1814 | "node_modules/humanize-ms": { 1815 | "version": "1.2.1", 1816 | "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", 1817 | "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", 1818 | "license": "MIT", 1819 | "dependencies": { 1820 | "ms": "^2.0.0" 1821 | } 1822 | }, 1823 | "node_modules/iconv-lite": { 1824 | "version": "0.4.24", 1825 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1826 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1827 | "license": "MIT", 1828 | "dependencies": { 1829 | "safer-buffer": ">= 2.1.2 < 3" 1830 | }, 1831 | "engines": { 1832 | "node": ">=0.10.0" 1833 | } 1834 | }, 1835 | "node_modules/ieee754": { 1836 | "version": "1.2.1", 1837 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1838 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1839 | "funding": [ 1840 | { 1841 | "type": "github", 1842 | "url": "https://github.com/sponsors/feross" 1843 | }, 1844 | { 1845 | "type": "patreon", 1846 | "url": "https://www.patreon.com/feross" 1847 | }, 1848 | { 1849 | "type": "consulting", 1850 | "url": "https://feross.org/support" 1851 | } 1852 | ], 1853 | "license": "BSD-3-Clause" 1854 | }, 1855 | "node_modules/inherits": { 1856 | "version": "2.0.4", 1857 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1858 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1859 | "license": "ISC" 1860 | }, 1861 | "node_modules/inquirer": { 1862 | "version": "8.2.6", 1863 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", 1864 | "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", 1865 | "license": "MIT", 1866 | "dependencies": { 1867 | "ansi-escapes": "^4.2.1", 1868 | "chalk": "^4.1.1", 1869 | "cli-cursor": "^3.1.0", 1870 | "cli-width": "^3.0.0", 1871 | "external-editor": "^3.0.3", 1872 | "figures": "^3.0.0", 1873 | "lodash": "^4.17.21", 1874 | "mute-stream": "0.0.8", 1875 | "ora": "^5.4.1", 1876 | "run-async": "^2.4.0", 1877 | "rxjs": "^7.5.5", 1878 | "string-width": "^4.1.0", 1879 | "strip-ansi": "^6.0.0", 1880 | "through": "^2.3.6", 1881 | "wrap-ansi": "^6.0.1" 1882 | }, 1883 | "engines": { 1884 | "node": ">=12.0.0" 1885 | } 1886 | }, 1887 | "node_modules/ipaddr.js": { 1888 | "version": "1.9.1", 1889 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 1890 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 1891 | "license": "MIT", 1892 | "engines": { 1893 | "node": ">= 0.10" 1894 | } 1895 | }, 1896 | "node_modules/is-buffer": { 1897 | "version": "1.1.6", 1898 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1899 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 1900 | "license": "MIT" 1901 | }, 1902 | "node_modules/is-docker": { 1903 | "version": "2.2.1", 1904 | "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", 1905 | "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", 1906 | "license": "MIT", 1907 | "bin": { 1908 | "is-docker": "cli.js" 1909 | }, 1910 | "engines": { 1911 | "node": ">=8" 1912 | }, 1913 | "funding": { 1914 | "url": "https://github.com/sponsors/sindresorhus" 1915 | } 1916 | }, 1917 | "node_modules/is-fullwidth-code-point": { 1918 | "version": "3.0.0", 1919 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1920 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1921 | "license": "MIT", 1922 | "engines": { 1923 | "node": ">=8" 1924 | } 1925 | }, 1926 | "node_modules/is-interactive": { 1927 | "version": "1.0.0", 1928 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", 1929 | "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", 1930 | "license": "MIT", 1931 | "engines": { 1932 | "node": ">=8" 1933 | } 1934 | }, 1935 | "node_modules/is-promise": { 1936 | "version": "4.0.0", 1937 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", 1938 | "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", 1939 | "license": "MIT" 1940 | }, 1941 | "node_modules/is-unicode-supported": { 1942 | "version": "0.1.0", 1943 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 1944 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 1945 | "license": "MIT", 1946 | "engines": { 1947 | "node": ">=10" 1948 | }, 1949 | "funding": { 1950 | "url": "https://github.com/sponsors/sindresorhus" 1951 | } 1952 | }, 1953 | "node_modules/is-wsl": { 1954 | "version": "2.2.0", 1955 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", 1956 | "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", 1957 | "license": "MIT", 1958 | "dependencies": { 1959 | "is-docker": "^2.0.0" 1960 | }, 1961 | "engines": { 1962 | "node": ">=8" 1963 | } 1964 | }, 1965 | "node_modules/isexe": { 1966 | "version": "2.0.0", 1967 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1968 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1969 | "license": "ISC" 1970 | }, 1971 | "node_modules/jsforce": { 1972 | "version": "3.6.3", 1973 | "resolved": "https://registry.npmjs.org/jsforce/-/jsforce-3.6.3.tgz", 1974 | "integrity": "sha512-OZ2kOo9J6xrkFx7l8mgVmWhQ+fjJTisEMle7wFihCd1SS8pdiIZQZnFgU0q/RyLSzihuU5AbwdVM634er45vpw==", 1975 | "license": "MIT", 1976 | "dependencies": { 1977 | "@babel/runtime": "^7.23.1", 1978 | "@babel/runtime-corejs3": "^7.23.1", 1979 | "@sindresorhus/is": "^4", 1980 | "base64url": "^3.0.1", 1981 | "commander": "^4.0.1", 1982 | "core-js": "^3.33.0", 1983 | "csv-parse": "^5.5.2", 1984 | "csv-stringify": "^6.4.4", 1985 | "faye": "^1.4.0", 1986 | "form-data": "^4.0.0", 1987 | "https-proxy-agent": "^5.0.0", 1988 | "inquirer": "^8.2.6", 1989 | "multistream": "^3.1.0", 1990 | "node-fetch": "^2.6.1", 1991 | "open": "^7.0.0", 1992 | "xml2js": "^0.6.2" 1993 | }, 1994 | "bin": { 1995 | "jsforce": "bin/jsforce", 1996 | "jsforce-gen-schema": "bin/jsforce-gen-schema" 1997 | }, 1998 | "engines": { 1999 | "node": ">=18" 2000 | } 2001 | }, 2002 | "node_modules/json-schema": { 2003 | "version": "0.4.0", 2004 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", 2005 | "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", 2006 | "license": "(AFL-2.1 OR BSD-3-Clause)" 2007 | }, 2008 | "node_modules/jsondiffpatch": { 2009 | "version": "0.6.0", 2010 | "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.6.0.tgz", 2011 | "integrity": "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==", 2012 | "license": "MIT", 2013 | "dependencies": { 2014 | "@types/diff-match-patch": "^1.0.36", 2015 | "chalk": "^5.3.0", 2016 | "diff-match-patch": "^1.0.5" 2017 | }, 2018 | "bin": { 2019 | "jsondiffpatch": "bin/jsondiffpatch.js" 2020 | }, 2021 | "engines": { 2022 | "node": "^18.0.0 || >=20.0.0" 2023 | } 2024 | }, 2025 | "node_modules/jsondiffpatch/node_modules/chalk": { 2026 | "version": "5.4.1", 2027 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", 2028 | "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", 2029 | "license": "MIT", 2030 | "engines": { 2031 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 2032 | }, 2033 | "funding": { 2034 | "url": "https://github.com/chalk/chalk?sponsor=1" 2035 | } 2036 | }, 2037 | "node_modules/lodash": { 2038 | "version": "4.17.21", 2039 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2040 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 2041 | "license": "MIT" 2042 | }, 2043 | "node_modules/log-symbols": { 2044 | "version": "4.1.0", 2045 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 2046 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 2047 | "license": "MIT", 2048 | "dependencies": { 2049 | "chalk": "^4.1.0", 2050 | "is-unicode-supported": "^0.1.0" 2051 | }, 2052 | "engines": { 2053 | "node": ">=10" 2054 | }, 2055 | "funding": { 2056 | "url": "https://github.com/sponsors/sindresorhus" 2057 | } 2058 | }, 2059 | "node_modules/math-intrinsics": { 2060 | "version": "1.1.0", 2061 | "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 2062 | "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 2063 | "license": "MIT", 2064 | "engines": { 2065 | "node": ">= 0.4" 2066 | } 2067 | }, 2068 | "node_modules/mcp-evals": { 2069 | "version": "1.0.18", 2070 | "resolved": "https://registry.npmjs.org/mcp-evals/-/mcp-evals-1.0.18.tgz", 2071 | "integrity": "sha512-khDcEG0XWshdCRirqLXogNoDLmzFA86QyuKoi5ioXsbeRZ3XQra8Zsg7vD+C0K5vwkFIoB1vTuPjHEHMhdLFtQ==", 2072 | "license": "MIT", 2073 | "dependencies": { 2074 | "@actions/core": "^1.10.0", 2075 | "@ai-sdk/openai": "^1.3.17", 2076 | "@anthropic-ai/sdk": "^0.8.0", 2077 | "@modelcontextprotocol/sdk": "^1.10.2", 2078 | "ai": "^4.3.9", 2079 | "chalk": "^4.1.2", 2080 | "dotenv": "^16.3.1", 2081 | "openai": "^4.24.1", 2082 | "tsx": "^4.19.3" 2083 | }, 2084 | "bin": { 2085 | "mcp-eval": "dist/cli.js" 2086 | }, 2087 | "peerDependencies": { 2088 | "react": "^19.1.0" 2089 | } 2090 | }, 2091 | "node_modules/md5": { 2092 | "version": "2.3.0", 2093 | "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", 2094 | "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", 2095 | "license": "BSD-3-Clause", 2096 | "dependencies": { 2097 | "charenc": "0.0.2", 2098 | "crypt": "0.0.2", 2099 | "is-buffer": "~1.1.6" 2100 | } 2101 | }, 2102 | "node_modules/media-typer": { 2103 | "version": "1.1.0", 2104 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", 2105 | "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", 2106 | "license": "MIT", 2107 | "engines": { 2108 | "node": ">= 0.8" 2109 | } 2110 | }, 2111 | "node_modules/merge-descriptors": { 2112 | "version": "2.0.0", 2113 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", 2114 | "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", 2115 | "license": "MIT", 2116 | "engines": { 2117 | "node": ">=18" 2118 | }, 2119 | "funding": { 2120 | "url": "https://github.com/sponsors/sindresorhus" 2121 | } 2122 | }, 2123 | "node_modules/mime-db": { 2124 | "version": "1.52.0", 2125 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2126 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 2127 | "license": "MIT", 2128 | "engines": { 2129 | "node": ">= 0.6" 2130 | } 2131 | }, 2132 | "node_modules/mime-types": { 2133 | "version": "2.1.35", 2134 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2135 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2136 | "license": "MIT", 2137 | "dependencies": { 2138 | "mime-db": "1.52.0" 2139 | }, 2140 | "engines": { 2141 | "node": ">= 0.6" 2142 | } 2143 | }, 2144 | "node_modules/mimic-fn": { 2145 | "version": "2.1.0", 2146 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 2147 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 2148 | "license": "MIT", 2149 | "engines": { 2150 | "node": ">=6" 2151 | } 2152 | }, 2153 | "node_modules/ms": { 2154 | "version": "2.1.3", 2155 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2156 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2157 | "license": "MIT" 2158 | }, 2159 | "node_modules/multistream": { 2160 | "version": "3.1.0", 2161 | "resolved": "https://registry.npmjs.org/multistream/-/multistream-3.1.0.tgz", 2162 | "integrity": "sha512-zBgD3kn8izQAN/TaL1PCMv15vYpf+Vcrsfub06njuYVYlzUldzpopTlrEZ53pZVEbfn3Shtv7vRFoOv6LOV87Q==", 2163 | "license": "MIT", 2164 | "dependencies": { 2165 | "inherits": "^2.0.1", 2166 | "readable-stream": "^3.4.0" 2167 | } 2168 | }, 2169 | "node_modules/mute-stream": { 2170 | "version": "0.0.8", 2171 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 2172 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", 2173 | "license": "ISC" 2174 | }, 2175 | "node_modules/nanoid": { 2176 | "version": "3.3.11", 2177 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 2178 | "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 2179 | "funding": [ 2180 | { 2181 | "type": "github", 2182 | "url": "https://github.com/sponsors/ai" 2183 | } 2184 | ], 2185 | "license": "MIT", 2186 | "bin": { 2187 | "nanoid": "bin/nanoid.cjs" 2188 | }, 2189 | "engines": { 2190 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2191 | } 2192 | }, 2193 | "node_modules/negotiator": { 2194 | "version": "1.0.0", 2195 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", 2196 | "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", 2197 | "license": "MIT", 2198 | "engines": { 2199 | "node": ">= 0.6" 2200 | } 2201 | }, 2202 | "node_modules/node-domexception": { 2203 | "version": "1.0.0", 2204 | "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", 2205 | "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", 2206 | "deprecated": "Use your platform's native DOMException instead", 2207 | "funding": [ 2208 | { 2209 | "type": "github", 2210 | "url": "https://github.com/sponsors/jimmywarting" 2211 | }, 2212 | { 2213 | "type": "github", 2214 | "url": "https://paypal.me/jimmywarting" 2215 | } 2216 | ], 2217 | "license": "MIT", 2218 | "engines": { 2219 | "node": ">=10.5.0" 2220 | } 2221 | }, 2222 | "node_modules/node-fetch": { 2223 | "version": "2.7.0", 2224 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 2225 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 2226 | "license": "MIT", 2227 | "dependencies": { 2228 | "whatwg-url": "^5.0.0" 2229 | }, 2230 | "engines": { 2231 | "node": "4.x || >=6.0.0" 2232 | }, 2233 | "peerDependencies": { 2234 | "encoding": "^0.1.0" 2235 | }, 2236 | "peerDependenciesMeta": { 2237 | "encoding": { 2238 | "optional": true 2239 | } 2240 | } 2241 | }, 2242 | "node_modules/object-assign": { 2243 | "version": "4.1.1", 2244 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2245 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 2246 | "license": "MIT", 2247 | "engines": { 2248 | "node": ">=0.10.0" 2249 | } 2250 | }, 2251 | "node_modules/object-inspect": { 2252 | "version": "1.13.4", 2253 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", 2254 | "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", 2255 | "license": "MIT", 2256 | "engines": { 2257 | "node": ">= 0.4" 2258 | }, 2259 | "funding": { 2260 | "url": "https://github.com/sponsors/ljharb" 2261 | } 2262 | }, 2263 | "node_modules/on-finished": { 2264 | "version": "2.4.1", 2265 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 2266 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 2267 | "license": "MIT", 2268 | "dependencies": { 2269 | "ee-first": "1.1.1" 2270 | }, 2271 | "engines": { 2272 | "node": ">= 0.8" 2273 | } 2274 | }, 2275 | "node_modules/once": { 2276 | "version": "1.4.0", 2277 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2278 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2279 | "license": "ISC", 2280 | "dependencies": { 2281 | "wrappy": "1" 2282 | } 2283 | }, 2284 | "node_modules/onetime": { 2285 | "version": "5.1.2", 2286 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 2287 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 2288 | "license": "MIT", 2289 | "dependencies": { 2290 | "mimic-fn": "^2.1.0" 2291 | }, 2292 | "engines": { 2293 | "node": ">=6" 2294 | }, 2295 | "funding": { 2296 | "url": "https://github.com/sponsors/sindresorhus" 2297 | } 2298 | }, 2299 | "node_modules/open": { 2300 | "version": "7.4.2", 2301 | "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", 2302 | "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", 2303 | "license": "MIT", 2304 | "dependencies": { 2305 | "is-docker": "^2.0.0", 2306 | "is-wsl": "^2.1.1" 2307 | }, 2308 | "engines": { 2309 | "node": ">=8" 2310 | }, 2311 | "funding": { 2312 | "url": "https://github.com/sponsors/sindresorhus" 2313 | } 2314 | }, 2315 | "node_modules/openai": { 2316 | "version": "4.96.2", 2317 | "resolved": "https://registry.npmjs.org/openai/-/openai-4.96.2.tgz", 2318 | "integrity": "sha512-R2XnxvMsizkROr7BV3uNp1q/3skwPZ7fmPjO1bXLnfB4Tu5xKxrT1EVwzjhxn0MZKBKAvOaGWS63jTMN6KrIXA==", 2319 | "license": "Apache-2.0", 2320 | "dependencies": { 2321 | "@types/node": "^18.11.18", 2322 | "@types/node-fetch": "^2.6.4", 2323 | "abort-controller": "^3.0.0", 2324 | "agentkeepalive": "^4.2.1", 2325 | "form-data-encoder": "1.7.2", 2326 | "formdata-node": "^4.3.2", 2327 | "node-fetch": "^2.6.7" 2328 | }, 2329 | "bin": { 2330 | "openai": "bin/cli" 2331 | }, 2332 | "peerDependencies": { 2333 | "ws": "^8.18.0", 2334 | "zod": "^3.23.8" 2335 | }, 2336 | "peerDependenciesMeta": { 2337 | "ws": { 2338 | "optional": true 2339 | }, 2340 | "zod": { 2341 | "optional": true 2342 | } 2343 | } 2344 | }, 2345 | "node_modules/openai/node_modules/@types/node": { 2346 | "version": "18.19.87", 2347 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.87.tgz", 2348 | "integrity": "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A==", 2349 | "license": "MIT", 2350 | "dependencies": { 2351 | "undici-types": "~5.26.4" 2352 | } 2353 | }, 2354 | "node_modules/openai/node_modules/undici-types": { 2355 | "version": "5.26.5", 2356 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 2357 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", 2358 | "license": "MIT" 2359 | }, 2360 | "node_modules/ora": { 2361 | "version": "5.4.1", 2362 | "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", 2363 | "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", 2364 | "license": "MIT", 2365 | "dependencies": { 2366 | "bl": "^4.1.0", 2367 | "chalk": "^4.1.0", 2368 | "cli-cursor": "^3.1.0", 2369 | "cli-spinners": "^2.5.0", 2370 | "is-interactive": "^1.0.0", 2371 | "is-unicode-supported": "^0.1.0", 2372 | "log-symbols": "^4.1.0", 2373 | "strip-ansi": "^6.0.0", 2374 | "wcwidth": "^1.0.1" 2375 | }, 2376 | "engines": { 2377 | "node": ">=10" 2378 | }, 2379 | "funding": { 2380 | "url": "https://github.com/sponsors/sindresorhus" 2381 | } 2382 | }, 2383 | "node_modules/os-tmpdir": { 2384 | "version": "1.0.2", 2385 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 2386 | "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", 2387 | "license": "MIT", 2388 | "engines": { 2389 | "node": ">=0.10.0" 2390 | } 2391 | }, 2392 | "node_modules/parseurl": { 2393 | "version": "1.3.3", 2394 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 2395 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 2396 | "license": "MIT", 2397 | "engines": { 2398 | "node": ">= 0.8" 2399 | } 2400 | }, 2401 | "node_modules/path-key": { 2402 | "version": "3.1.1", 2403 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2404 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2405 | "license": "MIT", 2406 | "engines": { 2407 | "node": ">=8" 2408 | } 2409 | }, 2410 | "node_modules/path-to-regexp": { 2411 | "version": "8.2.0", 2412 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", 2413 | "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", 2414 | "license": "MIT", 2415 | "engines": { 2416 | "node": ">=16" 2417 | } 2418 | }, 2419 | "node_modules/pkce-challenge": { 2420 | "version": "5.0.0", 2421 | "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", 2422 | "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", 2423 | "license": "MIT", 2424 | "engines": { 2425 | "node": ">=16.20.0" 2426 | } 2427 | }, 2428 | "node_modules/proxy-addr": { 2429 | "version": "2.0.7", 2430 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 2431 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 2432 | "license": "MIT", 2433 | "dependencies": { 2434 | "forwarded": "0.2.0", 2435 | "ipaddr.js": "1.9.1" 2436 | }, 2437 | "engines": { 2438 | "node": ">= 0.10" 2439 | } 2440 | }, 2441 | "node_modules/qs": { 2442 | "version": "6.14.0", 2443 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", 2444 | "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", 2445 | "license": "BSD-3-Clause", 2446 | "dependencies": { 2447 | "side-channel": "^1.1.0" 2448 | }, 2449 | "engines": { 2450 | "node": ">=0.6" 2451 | }, 2452 | "funding": { 2453 | "url": "https://github.com/sponsors/ljharb" 2454 | } 2455 | }, 2456 | "node_modules/range-parser": { 2457 | "version": "1.2.1", 2458 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 2459 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 2460 | "license": "MIT", 2461 | "engines": { 2462 | "node": ">= 0.6" 2463 | } 2464 | }, 2465 | "node_modules/raw-body": { 2466 | "version": "3.0.0", 2467 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", 2468 | "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", 2469 | "license": "MIT", 2470 | "dependencies": { 2471 | "bytes": "3.1.2", 2472 | "http-errors": "2.0.0", 2473 | "iconv-lite": "0.6.3", 2474 | "unpipe": "1.0.0" 2475 | }, 2476 | "engines": { 2477 | "node": ">= 0.8" 2478 | } 2479 | }, 2480 | "node_modules/raw-body/node_modules/iconv-lite": { 2481 | "version": "0.6.3", 2482 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 2483 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 2484 | "license": "MIT", 2485 | "dependencies": { 2486 | "safer-buffer": ">= 2.1.2 < 3.0.0" 2487 | }, 2488 | "engines": { 2489 | "node": ">=0.10.0" 2490 | } 2491 | }, 2492 | "node_modules/readable-stream": { 2493 | "version": "3.6.2", 2494 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 2495 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 2496 | "license": "MIT", 2497 | "dependencies": { 2498 | "inherits": "^2.0.3", 2499 | "string_decoder": "^1.1.1", 2500 | "util-deprecate": "^1.0.1" 2501 | }, 2502 | "engines": { 2503 | "node": ">= 6" 2504 | } 2505 | }, 2506 | "node_modules/regenerator-runtime": { 2507 | "version": "0.14.1", 2508 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", 2509 | "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", 2510 | "license": "MIT" 2511 | }, 2512 | "node_modules/resolve-pkg-maps": { 2513 | "version": "1.0.0", 2514 | "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", 2515 | "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", 2516 | "license": "MIT", 2517 | "funding": { 2518 | "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" 2519 | } 2520 | }, 2521 | "node_modules/restore-cursor": { 2522 | "version": "3.1.0", 2523 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 2524 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 2525 | "license": "MIT", 2526 | "dependencies": { 2527 | "onetime": "^5.1.0", 2528 | "signal-exit": "^3.0.2" 2529 | }, 2530 | "engines": { 2531 | "node": ">=8" 2532 | } 2533 | }, 2534 | "node_modules/router": { 2535 | "version": "2.2.0", 2536 | "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", 2537 | "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", 2538 | "license": "MIT", 2539 | "dependencies": { 2540 | "debug": "^4.4.0", 2541 | "depd": "^2.0.0", 2542 | "is-promise": "^4.0.0", 2543 | "parseurl": "^1.3.3", 2544 | "path-to-regexp": "^8.0.0" 2545 | }, 2546 | "engines": { 2547 | "node": ">= 18" 2548 | } 2549 | }, 2550 | "node_modules/run-async": { 2551 | "version": "2.4.1", 2552 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", 2553 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", 2554 | "license": "MIT", 2555 | "engines": { 2556 | "node": ">=0.12.0" 2557 | } 2558 | }, 2559 | "node_modules/rxjs": { 2560 | "version": "7.8.1", 2561 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", 2562 | "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", 2563 | "license": "Apache-2.0", 2564 | "dependencies": { 2565 | "tslib": "^2.1.0" 2566 | } 2567 | }, 2568 | "node_modules/safe-buffer": { 2569 | "version": "5.2.1", 2570 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2571 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2572 | "funding": [ 2573 | { 2574 | "type": "github", 2575 | "url": "https://github.com/sponsors/feross" 2576 | }, 2577 | { 2578 | "type": "patreon", 2579 | "url": "https://www.patreon.com/feross" 2580 | }, 2581 | { 2582 | "type": "consulting", 2583 | "url": "https://feross.org/support" 2584 | } 2585 | ], 2586 | "license": "MIT" 2587 | }, 2588 | "node_modules/safer-buffer": { 2589 | "version": "2.1.2", 2590 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2591 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2592 | "license": "MIT" 2593 | }, 2594 | "node_modules/sax": { 2595 | "version": "1.4.1", 2596 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", 2597 | "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", 2598 | "license": "ISC" 2599 | }, 2600 | "node_modules/secure-json-parse": { 2601 | "version": "2.7.0", 2602 | "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", 2603 | "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", 2604 | "license": "BSD-3-Clause" 2605 | }, 2606 | "node_modules/send": { 2607 | "version": "1.2.0", 2608 | "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", 2609 | "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", 2610 | "license": "MIT", 2611 | "dependencies": { 2612 | "debug": "^4.3.5", 2613 | "encodeurl": "^2.0.0", 2614 | "escape-html": "^1.0.3", 2615 | "etag": "^1.8.1", 2616 | "fresh": "^2.0.0", 2617 | "http-errors": "^2.0.0", 2618 | "mime-types": "^3.0.1", 2619 | "ms": "^2.1.3", 2620 | "on-finished": "^2.4.1", 2621 | "range-parser": "^1.2.1", 2622 | "statuses": "^2.0.1" 2623 | }, 2624 | "engines": { 2625 | "node": ">= 18" 2626 | } 2627 | }, 2628 | "node_modules/send/node_modules/mime-db": { 2629 | "version": "1.54.0", 2630 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", 2631 | "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", 2632 | "license": "MIT", 2633 | "engines": { 2634 | "node": ">= 0.6" 2635 | } 2636 | }, 2637 | "node_modules/send/node_modules/mime-types": { 2638 | "version": "3.0.1", 2639 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", 2640 | "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", 2641 | "license": "MIT", 2642 | "dependencies": { 2643 | "mime-db": "^1.54.0" 2644 | }, 2645 | "engines": { 2646 | "node": ">= 0.6" 2647 | } 2648 | }, 2649 | "node_modules/sequin": { 2650 | "version": "0.1.1", 2651 | "resolved": "https://registry.npmjs.org/sequin/-/sequin-0.1.1.tgz", 2652 | "integrity": "sha512-hJWMZRwP75ocoBM+1/YaCsvS0j5MTPeBHJkS2/wruehl9xwtX30HlDF1Gt6UZ8HHHY8SJa2/IL+jo+JJCd59rA==", 2653 | "license": "MIT", 2654 | "engines": { 2655 | "node": ">=0.4.0" 2656 | } 2657 | }, 2658 | "node_modules/serve-static": { 2659 | "version": "2.2.0", 2660 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", 2661 | "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", 2662 | "license": "MIT", 2663 | "dependencies": { 2664 | "encodeurl": "^2.0.0", 2665 | "escape-html": "^1.0.3", 2666 | "parseurl": "^1.3.3", 2667 | "send": "^1.2.0" 2668 | }, 2669 | "engines": { 2670 | "node": ">= 18" 2671 | } 2672 | }, 2673 | "node_modules/setprototypeof": { 2674 | "version": "1.2.0", 2675 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 2676 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", 2677 | "license": "ISC" 2678 | }, 2679 | "node_modules/shebang-command": { 2680 | "version": "2.0.0", 2681 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2682 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2683 | "license": "MIT", 2684 | "dependencies": { 2685 | "shebang-regex": "^3.0.0" 2686 | }, 2687 | "engines": { 2688 | "node": ">=8" 2689 | } 2690 | }, 2691 | "node_modules/shebang-regex": { 2692 | "version": "3.0.0", 2693 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2694 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2695 | "license": "MIT", 2696 | "engines": { 2697 | "node": ">=8" 2698 | } 2699 | }, 2700 | "node_modules/side-channel": { 2701 | "version": "1.1.0", 2702 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", 2703 | "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", 2704 | "license": "MIT", 2705 | "dependencies": { 2706 | "es-errors": "^1.3.0", 2707 | "object-inspect": "^1.13.3", 2708 | "side-channel-list": "^1.0.0", 2709 | "side-channel-map": "^1.0.1", 2710 | "side-channel-weakmap": "^1.0.2" 2711 | }, 2712 | "engines": { 2713 | "node": ">= 0.4" 2714 | }, 2715 | "funding": { 2716 | "url": "https://github.com/sponsors/ljharb" 2717 | } 2718 | }, 2719 | "node_modules/side-channel-list": { 2720 | "version": "1.0.0", 2721 | "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", 2722 | "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", 2723 | "license": "MIT", 2724 | "dependencies": { 2725 | "es-errors": "^1.3.0", 2726 | "object-inspect": "^1.13.3" 2727 | }, 2728 | "engines": { 2729 | "node": ">= 0.4" 2730 | }, 2731 | "funding": { 2732 | "url": "https://github.com/sponsors/ljharb" 2733 | } 2734 | }, 2735 | "node_modules/side-channel-map": { 2736 | "version": "1.0.1", 2737 | "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", 2738 | "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", 2739 | "license": "MIT", 2740 | "dependencies": { 2741 | "call-bound": "^1.0.2", 2742 | "es-errors": "^1.3.0", 2743 | "get-intrinsic": "^1.2.5", 2744 | "object-inspect": "^1.13.3" 2745 | }, 2746 | "engines": { 2747 | "node": ">= 0.4" 2748 | }, 2749 | "funding": { 2750 | "url": "https://github.com/sponsors/ljharb" 2751 | } 2752 | }, 2753 | "node_modules/side-channel-weakmap": { 2754 | "version": "1.0.2", 2755 | "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", 2756 | "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", 2757 | "license": "MIT", 2758 | "dependencies": { 2759 | "call-bound": "^1.0.2", 2760 | "es-errors": "^1.3.0", 2761 | "get-intrinsic": "^1.2.5", 2762 | "object-inspect": "^1.13.3", 2763 | "side-channel-map": "^1.0.1" 2764 | }, 2765 | "engines": { 2766 | "node": ">= 0.4" 2767 | }, 2768 | "funding": { 2769 | "url": "https://github.com/sponsors/ljharb" 2770 | } 2771 | }, 2772 | "node_modules/signal-exit": { 2773 | "version": "3.0.7", 2774 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2775 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 2776 | "license": "ISC" 2777 | }, 2778 | "node_modules/statuses": { 2779 | "version": "2.0.1", 2780 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 2781 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 2782 | "license": "MIT", 2783 | "engines": { 2784 | "node": ">= 0.8" 2785 | } 2786 | }, 2787 | "node_modules/string_decoder": { 2788 | "version": "1.3.0", 2789 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 2790 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 2791 | "license": "MIT", 2792 | "dependencies": { 2793 | "safe-buffer": "~5.2.0" 2794 | } 2795 | }, 2796 | "node_modules/string-width": { 2797 | "version": "4.2.3", 2798 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2799 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2800 | "license": "MIT", 2801 | "dependencies": { 2802 | "emoji-regex": "^8.0.0", 2803 | "is-fullwidth-code-point": "^3.0.0", 2804 | "strip-ansi": "^6.0.1" 2805 | }, 2806 | "engines": { 2807 | "node": ">=8" 2808 | } 2809 | }, 2810 | "node_modules/strip-ansi": { 2811 | "version": "6.0.1", 2812 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2813 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2814 | "license": "MIT", 2815 | "dependencies": { 2816 | "ansi-regex": "^5.0.1" 2817 | }, 2818 | "engines": { 2819 | "node": ">=8" 2820 | } 2821 | }, 2822 | "node_modules/supports-color": { 2823 | "version": "7.2.0", 2824 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2825 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2826 | "license": "MIT", 2827 | "dependencies": { 2828 | "has-flag": "^4.0.0" 2829 | }, 2830 | "engines": { 2831 | "node": ">=8" 2832 | } 2833 | }, 2834 | "node_modules/swr": { 2835 | "version": "2.3.3", 2836 | "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.3.tgz", 2837 | "integrity": "sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==", 2838 | "license": "MIT", 2839 | "dependencies": { 2840 | "dequal": "^2.0.3", 2841 | "use-sync-external-store": "^1.4.0" 2842 | }, 2843 | "peerDependencies": { 2844 | "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 2845 | } 2846 | }, 2847 | "node_modules/throttleit": { 2848 | "version": "2.1.0", 2849 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", 2850 | "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", 2851 | "license": "MIT", 2852 | "engines": { 2853 | "node": ">=18" 2854 | }, 2855 | "funding": { 2856 | "url": "https://github.com/sponsors/sindresorhus" 2857 | } 2858 | }, 2859 | "node_modules/through": { 2860 | "version": "2.3.8", 2861 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2862 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", 2863 | "license": "MIT" 2864 | }, 2865 | "node_modules/tldts": { 2866 | "version": "6.1.66", 2867 | "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.66.tgz", 2868 | "integrity": "sha512-l3ciXsYFel/jSRfESbyKYud1nOw7WfhrBEF9I3UiarYk/qEaOOwu3qXNECHw4fHGHGTEOuhf/VdKgoDX5M/dhQ==", 2869 | "license": "MIT", 2870 | "dependencies": { 2871 | "tldts-core": "^6.1.66" 2872 | }, 2873 | "bin": { 2874 | "tldts": "bin/cli.js" 2875 | } 2876 | }, 2877 | "node_modules/tldts-core": { 2878 | "version": "6.1.66", 2879 | "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.66.tgz", 2880 | "integrity": "sha512-s07jJruSwndD2X8bVjwioPfqpIc1pDTzszPe9pL1Skbh4bjytL85KNQ3tolqLbCvpQHawIsGfFi9dgerWjqW4g==", 2881 | "license": "MIT" 2882 | }, 2883 | "node_modules/tmp": { 2884 | "version": "0.0.33", 2885 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 2886 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 2887 | "license": "MIT", 2888 | "dependencies": { 2889 | "os-tmpdir": "~1.0.2" 2890 | }, 2891 | "engines": { 2892 | "node": ">=0.6.0" 2893 | } 2894 | }, 2895 | "node_modules/toidentifier": { 2896 | "version": "1.0.1", 2897 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 2898 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 2899 | "license": "MIT", 2900 | "engines": { 2901 | "node": ">=0.6" 2902 | } 2903 | }, 2904 | "node_modules/tough-cookie": { 2905 | "version": "5.0.0", 2906 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", 2907 | "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", 2908 | "license": "BSD-3-Clause", 2909 | "dependencies": { 2910 | "tldts": "^6.1.32" 2911 | }, 2912 | "engines": { 2913 | "node": ">=16" 2914 | } 2915 | }, 2916 | "node_modules/tr46": { 2917 | "version": "0.0.3", 2918 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 2919 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", 2920 | "license": "MIT" 2921 | }, 2922 | "node_modules/tslib": { 2923 | "version": "2.8.1", 2924 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 2925 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 2926 | "license": "0BSD" 2927 | }, 2928 | "node_modules/tsx": { 2929 | "version": "4.19.4", 2930 | "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", 2931 | "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", 2932 | "license": "MIT", 2933 | "dependencies": { 2934 | "esbuild": "~0.25.0", 2935 | "get-tsconfig": "^4.7.5" 2936 | }, 2937 | "bin": { 2938 | "tsx": "dist/cli.mjs" 2939 | }, 2940 | "engines": { 2941 | "node": ">=18.0.0" 2942 | }, 2943 | "optionalDependencies": { 2944 | "fsevents": "~2.3.3" 2945 | } 2946 | }, 2947 | "node_modules/tunnel": { 2948 | "version": "0.0.6", 2949 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 2950 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 2951 | "license": "MIT", 2952 | "engines": { 2953 | "node": ">=0.6.11 <=0.7.0 || >=0.7.3" 2954 | } 2955 | }, 2956 | "node_modules/tunnel-agent": { 2957 | "version": "0.6.0", 2958 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2959 | "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", 2960 | "license": "Apache-2.0", 2961 | "dependencies": { 2962 | "safe-buffer": "^5.0.1" 2963 | }, 2964 | "engines": { 2965 | "node": "*" 2966 | } 2967 | }, 2968 | "node_modules/type-fest": { 2969 | "version": "0.21.3", 2970 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", 2971 | "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", 2972 | "license": "(MIT OR CC0-1.0)", 2973 | "engines": { 2974 | "node": ">=10" 2975 | }, 2976 | "funding": { 2977 | "url": "https://github.com/sponsors/sindresorhus" 2978 | } 2979 | }, 2980 | "node_modules/type-is": { 2981 | "version": "2.0.1", 2982 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", 2983 | "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", 2984 | "license": "MIT", 2985 | "dependencies": { 2986 | "content-type": "^1.0.5", 2987 | "media-typer": "^1.1.0", 2988 | "mime-types": "^3.0.0" 2989 | }, 2990 | "engines": { 2991 | "node": ">= 0.6" 2992 | } 2993 | }, 2994 | "node_modules/type-is/node_modules/mime-db": { 2995 | "version": "1.54.0", 2996 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", 2997 | "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", 2998 | "license": "MIT", 2999 | "engines": { 3000 | "node": ">= 0.6" 3001 | } 3002 | }, 3003 | "node_modules/type-is/node_modules/mime-types": { 3004 | "version": "3.0.1", 3005 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", 3006 | "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", 3007 | "license": "MIT", 3008 | "dependencies": { 3009 | "mime-db": "^1.54.0" 3010 | }, 3011 | "engines": { 3012 | "node": ">= 0.6" 3013 | } 3014 | }, 3015 | "node_modules/typescript": { 3016 | "version": "5.7.2", 3017 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", 3018 | "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", 3019 | "dev": true, 3020 | "license": "Apache-2.0", 3021 | "bin": { 3022 | "tsc": "bin/tsc", 3023 | "tsserver": "bin/tsserver" 3024 | }, 3025 | "engines": { 3026 | "node": ">=14.17" 3027 | } 3028 | }, 3029 | "node_modules/undici": { 3030 | "version": "5.29.0", 3031 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", 3032 | "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", 3033 | "license": "MIT", 3034 | "dependencies": { 3035 | "@fastify/busboy": "^2.0.0" 3036 | }, 3037 | "engines": { 3038 | "node": ">=14.0" 3039 | } 3040 | }, 3041 | "node_modules/undici-types": { 3042 | "version": "6.19.8", 3043 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 3044 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 3045 | "license": "MIT" 3046 | }, 3047 | "node_modules/unpipe": { 3048 | "version": "1.0.0", 3049 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 3050 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 3051 | "license": "MIT", 3052 | "engines": { 3053 | "node": ">= 0.8" 3054 | } 3055 | }, 3056 | "node_modules/use-sync-external-store": { 3057 | "version": "1.5.0", 3058 | "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", 3059 | "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", 3060 | "license": "MIT", 3061 | "peerDependencies": { 3062 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" 3063 | } 3064 | }, 3065 | "node_modules/util-deprecate": { 3066 | "version": "1.0.2", 3067 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3068 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 3069 | "license": "MIT" 3070 | }, 3071 | "node_modules/vary": { 3072 | "version": "1.1.2", 3073 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 3074 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 3075 | "license": "MIT", 3076 | "engines": { 3077 | "node": ">= 0.8" 3078 | } 3079 | }, 3080 | "node_modules/wcwidth": { 3081 | "version": "1.0.1", 3082 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", 3083 | "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", 3084 | "license": "MIT", 3085 | "dependencies": { 3086 | "defaults": "^1.0.3" 3087 | } 3088 | }, 3089 | "node_modules/web-streams-polyfill": { 3090 | "version": "3.3.3", 3091 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", 3092 | "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", 3093 | "license": "MIT", 3094 | "engines": { 3095 | "node": ">= 8" 3096 | } 3097 | }, 3098 | "node_modules/webidl-conversions": { 3099 | "version": "3.0.1", 3100 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 3101 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", 3102 | "license": "BSD-2-Clause" 3103 | }, 3104 | "node_modules/websocket-driver": { 3105 | "version": "0.7.4", 3106 | "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", 3107 | "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", 3108 | "license": "Apache-2.0", 3109 | "dependencies": { 3110 | "http-parser-js": ">=0.5.1", 3111 | "safe-buffer": ">=5.1.0", 3112 | "websocket-extensions": ">=0.1.1" 3113 | }, 3114 | "engines": { 3115 | "node": ">=0.8.0" 3116 | } 3117 | }, 3118 | "node_modules/websocket-extensions": { 3119 | "version": "0.1.4", 3120 | "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", 3121 | "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", 3122 | "license": "Apache-2.0", 3123 | "engines": { 3124 | "node": ">=0.8.0" 3125 | } 3126 | }, 3127 | "node_modules/whatwg-url": { 3128 | "version": "5.0.0", 3129 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 3130 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 3131 | "license": "MIT", 3132 | "dependencies": { 3133 | "tr46": "~0.0.3", 3134 | "webidl-conversions": "^3.0.0" 3135 | } 3136 | }, 3137 | "node_modules/which": { 3138 | "version": "2.0.2", 3139 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3140 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3141 | "license": "ISC", 3142 | "dependencies": { 3143 | "isexe": "^2.0.0" 3144 | }, 3145 | "bin": { 3146 | "node-which": "bin/node-which" 3147 | }, 3148 | "engines": { 3149 | "node": ">= 8" 3150 | } 3151 | }, 3152 | "node_modules/wrap-ansi": { 3153 | "version": "6.2.0", 3154 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 3155 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 3156 | "license": "MIT", 3157 | "dependencies": { 3158 | "ansi-styles": "^4.0.0", 3159 | "string-width": "^4.1.0", 3160 | "strip-ansi": "^6.0.0" 3161 | }, 3162 | "engines": { 3163 | "node": ">=8" 3164 | } 3165 | }, 3166 | "node_modules/wrappy": { 3167 | "version": "1.0.2", 3168 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3169 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3170 | "license": "ISC" 3171 | }, 3172 | "node_modules/xml2js": { 3173 | "version": "0.6.2", 3174 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", 3175 | "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", 3176 | "license": "MIT", 3177 | "dependencies": { 3178 | "sax": ">=0.6.0", 3179 | "xmlbuilder": "~11.0.0" 3180 | }, 3181 | "engines": { 3182 | "node": ">=4.0.0" 3183 | } 3184 | }, 3185 | "node_modules/xmlbuilder": { 3186 | "version": "11.0.1", 3187 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 3188 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", 3189 | "license": "MIT", 3190 | "engines": { 3191 | "node": ">=4.0" 3192 | } 3193 | }, 3194 | "node_modules/zod": { 3195 | "version": "3.23.8", 3196 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", 3197 | "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", 3198 | "license": "MIT", 3199 | "funding": { 3200 | "url": "https://github.com/sponsors/colinhacks" 3201 | } 3202 | }, 3203 | "node_modules/zod-to-json-schema": { 3204 | "version": "3.24.5", 3205 | "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", 3206 | "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", 3207 | "license": "ISC", 3208 | "peerDependencies": { 3209 | "zod": "^3.24.1" 3210 | } 3211 | } 3212 | } 3213 | } 3214 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "salesforce-mcp-server", 3 | "version": "1.0.0", 4 | "type": "module", 5 | "scripts": { 6 | "build": "tsc", 7 | "start": "node build/index.js", 8 | "dev": "tsx watch src/index.ts" 9 | }, 10 | "dependencies": { 11 | "@modelcontextprotocol/sdk": "^1.0.1", 12 | "dotenv": "^16.3.1", 13 | "jsforce": "^3.6.3", 14 | "mcp-evals": "^1.0.18" 15 | }, 16 | "devDependencies": { 17 | "@types/jsforce": "^1.11.5", 18 | "@types/node": "^20.10.4", 19 | "tsx": "^4.6.2", 20 | "typescript": "^5.7.2" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /smithery.yaml: -------------------------------------------------------------------------------- 1 | # Smithery configuration file: https://smithery.ai/docs/config#smitheryyaml 2 | 3 | startCommand: 4 | type: stdio 5 | configSchema: 6 | # JSON Schema defining the configuration options for the MCP. 7 | type: object 8 | required: 9 | - sfUsername 10 | - sfPassword 11 | - sfSecurityToken 12 | properties: 13 | sfUsername: 14 | type: string 15 | description: Salesforce username. 16 | sfPassword: 17 | type: string 18 | description: Salesforce password. 19 | sfSecurityToken: 20 | type: string 21 | description: Salesforce security token. 22 | sfLoginUrl: 23 | type: string 24 | default: https://login.salesforce.com 25 | description: Salesforce login URL. 26 | commandFunction: 27 | # A function that produces the CLI command to start the MCP on stdio. 28 | |- 29 | (config) => ({ command: 'npm', args: ['start'], env: { SF_USERNAME: config.sfUsername, SF_PASSWORD: config.sfPassword, SF_SECURITY_TOKEN: config.sfSecurityToken, SF_LOGIN_URL: config.sfLoginUrl || 'https://login.salesforce.com' } }) -------------------------------------------------------------------------------- /src/evals/evals.ts: -------------------------------------------------------------------------------- 1 | //evals.ts 2 | 3 | import { EvalConfig } from 'mcp-evals'; 4 | import { openai } from "@ai-sdk/openai"; 5 | import { grade, EvalFunction } from "mcp-evals"; 6 | 7 | const queryEval: EvalFunction = { 8 | name: "queryEval", 9 | description: "Evaluates the Salesforce query tool functionality", 10 | run: async () => { 11 | const result = await grade(openai("gpt-4"), "Please execute a SOQL query to retrieve all Contact records from Salesforce and return their names and IDs."); 12 | return JSON.parse(result); 13 | } 14 | }; 15 | 16 | const toolingQueryEval: EvalFunction = { 17 | name: "Tooling Query Evaluation", 18 | description: "Evaluates the functionality of executing a query against the Salesforce Tooling API", 19 | run: async () => { 20 | const result = await grade(openai("gpt-4"), "Please execute a Tooling API query to list all Apex classes in the org."); 21 | return JSON.parse(result); 22 | } 23 | }; 24 | 25 | const describeObjectEval: EvalFunction = { 26 | name: 'describe-object Evaluation', 27 | description: 'Evaluates the detailed metadata retrieval for a Salesforce object', 28 | run: async () => { 29 | const result = await grade(openai("gpt-4"), "Describe the Opportunity object in Salesforce with detailed metadata"); 30 | return JSON.parse(result); 31 | } 32 | }; 33 | 34 | const metadataRetrieveEval: EvalFunction = { 35 | name: "metadata-retrieve Evaluation", 36 | description: "Evaluates the functionality of retrieving metadata components from Salesforce", 37 | run: async () => { 38 | const result = await grade(openai("gpt-4"), "Please retrieve the Flow named 'MyFlow' from Salesforce using your metadata-retrieve tool."); 39 | return JSON.parse(result); 40 | } 41 | }; 42 | 43 | const queryEval: EvalFunction = { 44 | name: 'query Tool Evaluation', 45 | description: 'Evaluates the correctness of executing a SOQL query on Salesforce', 46 | run: async () => { 47 | const result = await grade(openai("gpt-4"), "Use the query tool to retrieve the first ten accounts from Salesforce, returning Id and Name fields."); 48 | return JSON.parse(result); 49 | } 50 | }; 51 | 52 | const config: EvalConfig = { 53 | model: openai("gpt-4"), 54 | evals: [queryEval, toolingQueryEval, describeObjectEval, metadataRetrieveEval, queryEval] 55 | }; 56 | 57 | export default config; 58 | 59 | export const evals = [queryEval, toolingQueryEval, describeObjectEval, metadataRetrieveEval, queryEval]; -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import { Server } from "@modelcontextprotocol/sdk/server/index.js"; 3 | import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; 4 | import { 5 | ListToolsRequestSchema, 6 | CallToolRequestSchema 7 | } from "@modelcontextprotocol/sdk/types.js"; 8 | import * as jsforce from 'jsforce'; 9 | import dotenv from "dotenv"; 10 | import { tools } from "./tools.js"; 11 | 12 | dotenv.config(); 13 | 14 | const API_CONFIG = { 15 | LOGIN_URL: process.env.SF_LOGIN_URL || 'https://login.salesforce.com' 16 | } as const; 17 | 18 | if (!process.env.SF_USERNAME || !process.env.SF_PASSWORD || !process.env.SF_SECURITY_TOKEN) { 19 | throw new Error("SF_USERNAME, SF_PASSWORD, and SF_SECURITY_TOKEN environment variables are required"); 20 | } 21 | 22 | class SalesforceServer { 23 | private server: Server; 24 | private conn: jsforce.Connection; 25 | 26 | constructor() { 27 | this.server = new Server({ 28 | name: "salesforce-mcp-server", 29 | version: "0.2.0" 30 | }, { 31 | capabilities: { 32 | tools: {} 33 | } 34 | }); 35 | 36 | this.conn = new jsforce.Connection({ 37 | loginUrl: API_CONFIG.LOGIN_URL, 38 | version:'58.0' 39 | }); 40 | 41 | this.setupHandlers(); 42 | this.setupErrorHandling(); 43 | } 44 | 45 | private setupErrorHandling(): void { 46 | this.server.onerror = (error) => { 47 | console.error("[MCP Error]", error); 48 | }; 49 | 50 | process.on('SIGINT', async () => { 51 | await this.server.close(); 52 | process.exit(0); 53 | }); 54 | } 55 | 56 | private setupHandlers(): void { 57 | this.server.setRequestHandler( 58 | ListToolsRequestSchema, 59 | async () => ({ 60 | tools: tools.map(({ name, description, inputSchema }) => ({ 61 | name, 62 | description, 63 | inputSchema 64 | })) 65 | }) 66 | ); 67 | 68 | this.server.setRequestHandler( 69 | CallToolRequestSchema, 70 | async (request) => { 71 | const tool = tools.find(t => t.name === request.params.name); 72 | 73 | if (!tool) { 74 | return { 75 | content: [{ 76 | type: "text", 77 | text: `Unknown tool: ${request.params.name}` 78 | }], 79 | isError: true 80 | }; 81 | } 82 | 83 | try { 84 | await this.conn.login( 85 | process.env.SF_USERNAME!, 86 | process.env.SF_PASSWORD! + process.env.SF_SECURITY_TOKEN! 87 | ); 88 | 89 | const result = await tool.handler(this.conn, request.params.arguments); 90 | 91 | return { 92 | content: [{ 93 | type: "text", 94 | text: JSON.stringify(result, null, 2) 95 | }] 96 | }; 97 | } catch (error) { 98 | return { 99 | content: [{ 100 | type: "text", 101 | text: `Salesforce API error: ${error instanceof Error ? error.message : String(error)}` 102 | }], 103 | isError: true 104 | }; 105 | } 106 | } 107 | ); 108 | } 109 | 110 | async run(): Promise { 111 | const transport = new StdioServerTransport(); 112 | await this.server.connect(transport); 113 | console.error("Salesforce MCP server running on stdio"); 114 | } 115 | } 116 | 117 | const server = new SalesforceServer(); 118 | server.run().catch(console.error); -------------------------------------------------------------------------------- /src/tools.ts: -------------------------------------------------------------------------------- 1 | import { Connection } from 'jsforce'; 2 | import { 3 | QueryArgs, 4 | ToolingQueryArgs, 5 | DescribeObjectArgs, 6 | MetadataRetrieveArgs, 7 | isValidToolingQueryArgs, 8 | isValidDescribeObjectArgs, 9 | isValidMetadataRetrieveArgs, 10 | isValidMetadataType 11 | } from './types.js'; 12 | 13 | export interface ToolHandler { 14 | name: string; 15 | description: string; 16 | inputSchema: Record; 17 | handler: (conn: Connection, args: any) => Promise; 18 | } 19 | 20 | export const tools: ToolHandler[] = [ 21 | { 22 | name: "query", 23 | description: "Execute a SOQL query on Salesforce", 24 | inputSchema: { 25 | type: "object", 26 | properties: { 27 | query: { 28 | type: "string", 29 | description: "SOQL query to execute" 30 | } 31 | }, 32 | required: ["query"] 33 | }, 34 | handler: async (conn: Connection, args: QueryArgs) => { 35 | return await conn.query(args.query); 36 | } 37 | }, 38 | { 39 | name: "tooling-query", 40 | description: "Execute a query against the Salesforce Tooling API", 41 | inputSchema: { 42 | type: "object", 43 | properties: { 44 | query: { 45 | type: "string", 46 | description: "Tooling API query to execute" 47 | } 48 | }, 49 | required: ["query"] 50 | }, 51 | handler: async (conn: Connection, args: ToolingQueryArgs) => { 52 | if (!isValidToolingQueryArgs(args)) { 53 | throw new Error("Invalid tooling query arguments"); 54 | } 55 | return await conn.tooling.query(args.query); 56 | } 57 | }, 58 | { 59 | name: "describe-object", 60 | description: "Get detailed metadata about a Salesforce object", 61 | inputSchema: { 62 | type: "object", 63 | properties: { 64 | objectName: { 65 | type: "string", 66 | description: "API name of the object to describe" 67 | }, 68 | detailed: { 69 | type: "boolean", 70 | description: "Whether to return full metadata (optional)", 71 | default: false 72 | } 73 | }, 74 | required: ["objectName"] 75 | }, 76 | handler: async (conn: Connection, args: DescribeObjectArgs) => { 77 | if (!isValidDescribeObjectArgs(args)) { 78 | throw new Error("Invalid describe object arguments"); 79 | } 80 | const objType = conn.sobject(args.objectName); 81 | if (args.detailed) { 82 | // For custom objects, we can get additional metadata 83 | if (args.objectName.endsWith('__c')) { 84 | const [describe, metadata] = await Promise.all([ 85 | objType.describe(), 86 | conn.metadata.read('CustomObject', args.objectName) 87 | ]); 88 | return { describe, metadata }; 89 | } 90 | return await objType.describe(); 91 | } 92 | return await objType.describe(); 93 | } 94 | }, 95 | { 96 | name: "metadata-retrieve", 97 | description: "Retrieve metadata components from Salesforce", 98 | inputSchema: { 99 | type: "object", 100 | properties: { 101 | type: { 102 | type: "string", 103 | description: "Metadata type (e.g., Flow, CustomObject)", 104 | enum: [ 105 | 'CustomObject', 106 | 'Flow', 107 | 'FlowDefinition', 108 | 'CustomField', 109 | 'ValidationRule', 110 | 'ApexClass', 111 | 'ApexTrigger', 112 | 'WorkflowRule', 113 | 'Layout' 114 | ] 115 | }, 116 | fullNames: { 117 | type: "array", 118 | items: { 119 | type: "string" 120 | }, 121 | description: "Array of component names to retrieve" 122 | } 123 | }, 124 | required: ["type", "fullNames"] 125 | }, 126 | handler: async (conn: Connection, args: MetadataRetrieveArgs) => { 127 | if (!isValidMetadataRetrieveArgs(args)) { 128 | throw new Error("Invalid metadata retrieve arguments"); 129 | } 130 | 131 | if (!isValidMetadataType(args.type)) { 132 | throw new Error(`Invalid metadata type: ${args.type}`); 133 | } 134 | 135 | return await conn.metadata.read(args.type, args.fullNames); 136 | } 137 | } 138 | ]; 139 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | import type { MetadataType } from 'jsforce/api/metadata'; 2 | 3 | // Existing query interface 4 | export interface QueryArgs { 5 | query: string; 6 | } 7 | 8 | export interface ToolingQueryArgs { 9 | query: string; 10 | } 11 | 12 | export interface DescribeObjectArgs { 13 | objectName: string; 14 | detailed?: boolean; 15 | } 16 | 17 | export interface MetadataRetrieveArgs { 18 | type: MetadataType; // Using jsforce's MetadataType 19 | fullNames: string[]; 20 | } 21 | 22 | // Type guards 23 | export function isValidQueryArgs(args: any): args is QueryArgs { 24 | return ( 25 | typeof args === "object" && 26 | args !== null && 27 | "query" in args && 28 | typeof args.query === "string" 29 | ); 30 | } 31 | 32 | export function isValidToolingQueryArgs(args: any): args is ToolingQueryArgs { 33 | return ( 34 | typeof args === "object" && 35 | args !== null && 36 | "query" in args && 37 | typeof args.query === "string" 38 | ); 39 | } 40 | 41 | export function isValidDescribeObjectArgs(args: any): args is DescribeObjectArgs { 42 | return ( 43 | typeof args === "object" && 44 | args !== null && 45 | "objectName" in args && 46 | typeof args.objectName === "string" && 47 | (args.detailed === undefined || typeof args.detailed === "boolean") 48 | ); 49 | } 50 | 51 | export function isValidMetadataRetrieveArgs(args: any): args is MetadataRetrieveArgs { 52 | return ( 53 | typeof args === "object" && 54 | args !== null && 55 | "type" in args && 56 | typeof args.type === "string" && // We'll validate against MetadataType in the handler 57 | "fullNames" in args && 58 | Array.isArray(args.fullNames) && 59 | args.fullNames.every((name: any) => typeof name === "string") 60 | ); 61 | } 62 | 63 | // Helper function to validate MetadataType 64 | export function isValidMetadataType(type: string): type is MetadataType { 65 | return [ 66 | 'CustomObject', 67 | 'Flow', 68 | 'FlowDefinition', 69 | 'CustomField', 70 | 'ValidationRule', 71 | 'ApexClass', 72 | 'ApexTrigger', 73 | 'WorkflowRule', 74 | 'Layout' 75 | // Add more as needed 76 | ].includes(type); 77 | } 78 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "module": "ES2020", 5 | "moduleResolution": "bundler", 6 | "esModuleInterop": true, 7 | "outDir": "./build", 8 | "rootDir": "./src", 9 | "strict": true, 10 | "skipLibCheck": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "declaration": true 13 | }, 14 | "include": ["src/**/*"], 15 | "exclude": ["node_modules", "build"] 16 | } --------------------------------------------------------------------------------