From 18f446722d0eceb3225655e1b67e86c2b0d746bf Mon Sep 17 00:00:00 2001 From: Matthew Lenhard Date: Thu, 1 May 2025 10:01:44 -0400 Subject: [PATCH 01/14] feat - tests + evals --- README.md | 9 + package-lock.json | 1155 ++++++++++++++++++++++++++++++++++++++++++-- package.json | 3 +- src/evals/evals.ts | 50 ++ 4 files changed, 1189 insertions(+), 28 deletions(-) create mode 100644 src/evals/evals.ts diff --git a/README.md b/README.md index 6b351c0..87cc8d5 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,15 @@ This project uses Jest for testing. The tests are located in the `src/__tests__` You can run the tests using one of the following commands: ```bash + + +## Running evals + +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). + +```bash +OPENAI_API_KEY=your-key npx mcp-eval src/evals/evals.ts src/tools/codegen/index.ts +``` # Run tests using the custom script (with coverage) node run-tests.cjs diff --git a/package-lock.json b/package-lock.json index 20b34d7..34825dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@playwright/browser-firefox": "1.51.1", "@playwright/browser-webkit": "1.51.1", "@playwright/test": "^1.51.1", + "mcp-evals": "^1.0.18", "playwright": "1.51.1", "uuid": "^9.0.1" }, @@ -30,6 +31,127 @@ "typescript": "^5.8.2" } }, + "node_modules/@actions/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz", + "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==", + "license": "MIT", + "dependencies": { + "@actions/exec": "^1.1.1", + "@actions/http-client": "^2.0.1" + } + }, + "node_modules/@actions/exec": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz", + "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==", + "license": "MIT", + "dependencies": { + "@actions/io": "^1.0.1" + } + }, + "node_modules/@actions/http-client": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz", + "integrity": "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==", + "license": "MIT", + "dependencies": { + "tunnel": "^0.0.6", + "undici": "^5.25.4" + } + }, + "node_modules/@actions/io": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz", + "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==", + "license": "MIT" + }, + "node_modules/@ai-sdk/openai": { + "version": "1.3.21", + "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-1.3.21.tgz", + "integrity": "sha512-ipAhkRKUd2YaMmn7DAklX3N7Ywx/rCsJHVyb0V/lKRqPcc612qAFVbjg+Uve8QYJlbPxgfsM4s9JmCFp6PSdYw==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.7" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "node_modules/@ai-sdk/provider": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-1.1.3.tgz", + "integrity": "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==", + "license": "Apache-2.0", + "dependencies": { + "json-schema": "^0.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ai-sdk/provider-utils": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-2.2.7.tgz", + "integrity": "sha512-kM0xS3GWg3aMChh9zfeM+80vEZfXzR3JEUBdycZLtbRZ2TRT8xOj3WodGHPb06sUK5yD7pAXC/P7ctsi2fvUGQ==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "nanoid": "^3.3.8", + "secure-json-parse": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.23.8" + } + }, + "node_modules/@ai-sdk/react": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-1.2.11.tgz", + "integrity": "sha512-+kPqLkJ3TWP6czaJPV+vzAKSUcKQ1598BUrcLHt56sH99+LhmIIW3ylZp0OfC3O6TR3eO1Lt0Yzw4R0mK6g9Gw==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider-utils": "2.2.7", + "@ai-sdk/ui-utils": "1.2.10", + "swr": "^2.2.5", + "throttleit": "2.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@ai-sdk/ui-utils": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-1.2.10.tgz", + "integrity": "sha512-GUj+LBoAlRQF1dL/M49jtufGqtLOMApxTpCmVjoRpIPt/dFALVL9RfqfvxwztyIwbK+IxGzcYjSGRsrWrj+86g==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.7", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.23.8" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -43,6 +165,38 @@ "node": ">=6.0.0" } }, + "node_modules/@anthropic-ai/sdk": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.8.1.tgz", + "integrity": "sha512-59etePenCizVx1O8Qhi1T1ruE04ISfNzCnyhZNcsss1QljsLmYS83jttarMNEvGYcsUF7rwxw2lzcC3Zbxao7g==", + "license": "MIT", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "digest-fetch": "^1.3.0", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7", + "web-streams-polyfill": "^3.2.1" + } + }, + "node_modules/@anthropic-ai/sdk/node_modules/@types/node": { + "version": "18.19.87", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.87.tgz", + "integrity": "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@anthropic-ai/sdk/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, "node_modules/@babel/code-frame": { "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", @@ -495,6 +649,415 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz", + "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz", + "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz", + "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz", + "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz", + "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz", + "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz", + "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz", + "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz", + "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz", + "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz", + "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz", + "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz", + "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz", + "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz", + "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz", + "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz", + "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz", + "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz", + "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz", + "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz", + "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz", + "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz", + "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz", + "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz", + "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -880,6 +1443,15 @@ "node": ">=18" } }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/@playwright/browser-chromium": { "version": "1.51.1", "resolved": "https://registry.npmjs.org/@playwright/browser-chromium/-/browser-chromium-1.51.1.tgz", @@ -1016,6 +1588,12 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/diff-match-patch": { + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/@types/diff-match-patch/-/diff-match-patch-1.0.36.tgz", + "integrity": "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==", + "license": "MIT" + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -1063,11 +1641,20 @@ "version": "20.17.27", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.27.tgz", "integrity": "sha512-U58sbKhDrthHlxHRJw7ZLiLDZGmAUOZUbpw0S6nL27sYUdhvgBLCRu/keSd6qcTsfArd1sRFCCBxzWATGr/0UA==", - "dev": true, "dependencies": { "undici-types": "~6.19.2" } }, + "node_modules/@types/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -1098,6 +1685,18 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/accepts": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", @@ -1110,6 +1709,18 @@ "node": ">= 0.6" } }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -1123,6 +1734,32 @@ "node": ">=8" } }, + "node_modules/ai": { + "version": "4.3.13", + "resolved": "https://registry.npmjs.org/ai/-/ai-4.3.13.tgz", + "integrity": "sha512-cC5HXItuOwGykSMacCPzNp6+NMTxeuTjOenztVgSJhdC9Z4OrzBxwkyeDAf4h1QP938ZFi7IBdq3u4lxVoVmvw==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "1.1.3", + "@ai-sdk/provider-utils": "2.2.7", + "@ai-sdk/react": "1.2.11", + "@ai-sdk/ui-utils": "1.2.10", + "@opentelemetry/api": "1.9.0", + "jsondiffpatch": "0.6.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -1151,7 +1788,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -1211,8 +1847,7 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { "version": "1.8.4", @@ -1341,6 +1976,11 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base-64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", + "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" + }, "node_modules/body-parser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.1.0.tgz", @@ -1595,7 +2235,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1616,6 +2255,15 @@ "node": ">=10" } }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -1680,7 +2328,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -1691,14 +2338,12 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -1805,7 +2450,6 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1815,6 +2459,15 @@ "node": ">= 8" } }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, "node_modules/cwd": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", @@ -1895,7 +2548,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -1908,6 +2560,15 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -1926,6 +2587,12 @@ "node": ">=8" } }, + "node_modules/diff-match-patch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", + "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==", + "license": "Apache-2.0" + }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -1935,6 +2602,28 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/digest-fetch": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz", + "integrity": "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==", + "license": "ISC", + "dependencies": { + "base-64": "^0.1.0", + "md5": "^2.3.0" + } + }, + "node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -2040,7 +2729,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -2057,6 +2745,46 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, + "node_modules/esbuild": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz", + "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.3", + "@esbuild/android-arm": "0.25.3", + "@esbuild/android-arm64": "0.25.3", + "@esbuild/android-x64": "0.25.3", + "@esbuild/darwin-arm64": "0.25.3", + "@esbuild/darwin-x64": "0.25.3", + "@esbuild/freebsd-arm64": "0.25.3", + "@esbuild/freebsd-x64": "0.25.3", + "@esbuild/linux-arm": "0.25.3", + "@esbuild/linux-arm64": "0.25.3", + "@esbuild/linux-ia32": "0.25.3", + "@esbuild/linux-loong64": "0.25.3", + "@esbuild/linux-mips64el": "0.25.3", + "@esbuild/linux-ppc64": "0.25.3", + "@esbuild/linux-riscv64": "0.25.3", + "@esbuild/linux-s390x": "0.25.3", + "@esbuild/linux-x64": "0.25.3", + "@esbuild/netbsd-arm64": "0.25.3", + "@esbuild/netbsd-x64": "0.25.3", + "@esbuild/openbsd-arm64": "0.25.3", + "@esbuild/openbsd-x64": "0.25.3", + "@esbuild/sunos-x64": "0.25.3", + "@esbuild/win32-arm64": "0.25.3", + "@esbuild/win32-ia32": "0.25.3", + "@esbuild/win32-x64": "0.25.3" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -2101,6 +2829,15 @@ "node": ">= 0.6" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/eventsource": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.5.tgz", @@ -2457,7 +3194,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -2468,11 +3204,16 @@ "node": ">= 6" } }, + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", + "license": "MIT" + }, "node_modules/form-data/node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -2481,7 +3222,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -2489,6 +3229,28 @@ "node": ">= 0.6" } }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "license": "MIT", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/formdata-node/node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2544,7 +3306,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -2636,6 +3397,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -2727,7 +3500,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -2747,7 +3519,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -2836,6 +3607,15 @@ "node": ">=10.17.0" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/iconv-lite": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", @@ -2929,6 +3709,12 @@ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" + }, "node_modules/is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", @@ -3006,8 +3792,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", @@ -3807,6 +4592,12 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -3819,6 +4610,35 @@ "node": ">=6" } }, + "node_modules/jsondiffpatch": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.6.0.tgz", + "integrity": "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==", + "license": "MIT", + "dependencies": { + "@types/diff-match-patch": "^1.0.36", + "chalk": "^5.3.0", + "diff-match-patch": "^1.0.5" + }, + "bin": { + "jsondiffpatch": "bin/jsondiffpatch.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/jsondiffpatch/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -3945,6 +4765,70 @@ "node": ">= 0.4" } }, + "node_modules/mcp-evals": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/mcp-evals/-/mcp-evals-1.0.18.tgz", + "integrity": "sha512-khDcEG0XWshdCRirqLXogNoDLmzFA86QyuKoi5ioXsbeRZ3XQra8Zsg7vD+C0K5vwkFIoB1vTuPjHEHMhdLFtQ==", + "license": "MIT", + "dependencies": { + "@actions/core": "^1.10.0", + "@ai-sdk/openai": "^1.3.17", + "@anthropic-ai/sdk": "^0.8.0", + "@modelcontextprotocol/sdk": "^1.10.2", + "ai": "^4.3.9", + "chalk": "^4.1.2", + "dotenv": "^16.3.1", + "openai": "^4.24.1", + "tsx": "^4.19.3" + }, + "bin": { + "mcp-eval": "dist/cli.js" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/mcp-evals/node_modules/@modelcontextprotocol/sdk": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.10.2.tgz", + "integrity": "sha512-rb6AMp2DR4SN+kc6L1ta2NCpApyA9WYNx3CrTSZvGxq9wH71bRur+zRqPfg0vQ9mjywR7qZdX2RGHOPq3ss+tA==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.3", + "eventsource": "^3.0.2", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/mcp-evals/node_modules/pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "license": "BSD-3-Clause", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "node_modules/media-typer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", @@ -4045,6 +4929,24 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -4059,6 +4961,46 @@ "node": ">= 0.6" } }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -4300,6 +5242,51 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/openai": { + "version": "4.96.2", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.96.2.tgz", + "integrity": "sha512-R2XnxvMsizkROr7BV3uNp1q/3skwPZ7fmPjO1bXLnfB4Tu5xKxrT1EVwzjhxn0MZKBKAvOaGWS63jTMN6KrIXA==", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + }, + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/openai/node_modules/@types/node": { + "version": "18.19.87", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.87.tgz", + "integrity": "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/openai/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, "node_modules/os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -4444,7 +5431,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -4782,6 +5768,15 @@ "node": ">=8" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve.exports": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", @@ -4853,6 +5848,12 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "license": "BSD-3-Clause" + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -4945,7 +5946,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -4957,7 +5957,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -5255,7 +6254,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -5275,6 +6273,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swr": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.3.tgz", + "integrity": "sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -5289,6 +6300,18 @@ "node": ">=8" } }, + "node_modules/throttleit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", + "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -5315,6 +6338,12 @@ "node": ">=0.6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -5403,6 +6432,34 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true }, + "node_modules/tsx": { + "version": "4.19.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", + "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -5459,11 +6516,22 @@ "node": ">=14.17" } }, + "node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" }, "node_modules/unpipe": { "version": "1.0.0", @@ -5503,6 +6571,15 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -5667,11 +6744,35 @@ "makeerror": "1.0.12" } }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, diff --git a/package.json b/package.json index 2c98974..775845f 100644 --- a/package.json +++ b/package.json @@ -31,8 +31,9 @@ "@playwright/browser-chromium": "1.51.1", "@playwright/browser-firefox": "1.51.1", "@playwright/browser-webkit": "1.51.1", - "playwright": "1.51.1", "@playwright/test": "^1.51.1", + "mcp-evals": "^1.0.18", + "playwright": "1.51.1", "uuid": "^9.0.1" }, "keywords": [ diff --git a/src/evals/evals.ts b/src/evals/evals.ts new file mode 100644 index 0000000..f0ae462 --- /dev/null +++ b/src/evals/evals.ts @@ -0,0 +1,50 @@ +//evals.ts + +import { EvalConfig } from 'mcp-evals'; +import { openai } from "@ai-sdk/openai"; +import { grade, EvalFunction } from "mcp-evals"; + +const startCodegenSessionEval: EvalFunction = { + name: 'startCodegenSession Evaluation', + description: 'Evaluates the start codegen session tool', + run: async () => { + const result = await grade(openai("gpt-4"), "Please start a new code generation session with an output path of /my/test/path, a testNamePrefix of MyPrefix, and comments enabled. Confirm the session was created successfully."); + return JSON.parse(result); + } +}; + +const end_codegen_sessionEval: EvalFunction = { + name: 'end_codegen_session Evaluation', + description: 'Evaluates the end_codegen_session tool functionality', + run: async () => { + const result = await grade(openai("gpt-4"), "Please end the code generation session with ID session123 and generate the Playwright test code"); + return JSON.parse(result); + } +}; + +const get_codegen_sessionEval: EvalFunction = { + name: 'get_codegen_session Tool Evaluation', + description: 'Evaluates the retrieval of code generation session details', + run: async () => { + const result = await grade(openai("gpt-4"), "Please retrieve the code generation session details using session ID abc123."); + return JSON.parse(result); + } +}; + +const clearCodegenSessionEval: EvalFunction = { + name: 'clear_codegen_session Evaluation', + description: 'Evaluates the functionality of clearing a code generation session', + run: async () => { + const result = await grade(openai("gpt-4"), "Please clear the code generation session with the ID testSession_123 to verify removal."); + return JSON.parse(result); + } +}; + +const config: EvalConfig = { + model: openai("gpt-4"), + evals: [startCodegenSessionEval, end_codegen_sessionEval, get_codegen_sessionEval, clearCodegenSessionEval] +}; + +export default config; + +export const evals = [startCodegenSessionEval, end_codegen_sessionEval, get_codegen_sessionEval, clearCodegenSessionEval]; \ No newline at end of file From 334c368ba596e0a95517d363fd40ef8ad111e249 Mon Sep 17 00:00:00 2001 From: Matthew Lenhard Date: Thu, 1 May 2025 10:23:49 -0400 Subject: [PATCH 02/14] [bugfix] fix readme formatting --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 87cc8d5..7199f93 100644 --- a/README.md +++ b/README.md @@ -96,15 +96,6 @@ This project uses Jest for testing. The tests are located in the `src/__tests__` You can run the tests using one of the following commands: ```bash - - -## Running evals - -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). - -```bash -OPENAI_API_KEY=your-key npx mcp-eval src/evals/evals.ts src/tools/codegen/index.ts -``` # Run tests using the custom script (with coverage) node run-tests.cjs @@ -116,6 +107,15 @@ npm run test:custom # Run tests with custom script (same as node run-tests.cj The test coverage report will be generated in the `coverage` directory. + +### Running evals + +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). + +```bash +OPENAI_API_KEY=your-key npx mcp-eval src/evals/evals.ts src/tools/codegen/index.ts +``` + ## Star History -[![Star History Chart](https://api.star-history.com/svg?repos=executeautomation/mcp-playwright&type=Date)](https://star-history.com/#executeautomation/mcp-playwright&Date) +[![Star History Chart](https://api.star-history.com/svg?repos=executeautomation/mcp-playwright&type=Date)](https://star-history.com/#executeautomation/mcp-playwright&Date) \ No newline at end of file From 0779224edf9f35f2e0d47d752309f10a07c00c97 Mon Sep 17 00:00:00 2001 From: Karthik KK Date: Sun, 11 May 2025 14:51:46 +1200 Subject: [PATCH 03/14] chore: Update dependencies and version to 1.0.4, including Playwright and Babel packages, and enhance README with installation badges --- README.md | 1 + package-lock.json | 635 ++++++++++++++++++---------------------------- package.json | 16 +- 3 files changed, 262 insertions(+), 390 deletions(-) diff --git a/README.md b/README.md index e3a2c8a..5517616 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,7 @@ const urlForWebsites = `vscode:mcp/install?${encodeURIComponent(config)}`; const urlForGithub = `https://insiders.vscode.dev/redirect?url=${encodeURIComponent(urlForWebsites)}`; --> +[Install in VS Code](https://insiders.vscode.dev/redirect?url=vscode%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522playwright%2522%252C%2522command%2522%253A%2522npx%2522%252C%2522args%2522%253A%255B%2522-y%2522%252C%2522%2540executeautomation%252Fplaywright-mcp-server%2522%255D%257D) [Install in VS Code Insiders](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522playwright%2522%252C%2522command%2522%253A%2522npx%2522%252C%2522args%2522%253A%255B%2522-y%2522%252C%2522%2540executeautomation%252Fplaywright-mcp-server%2522%255D%257D) Alternatively, you can install the Playwright MCP server using the VS Code CLI: diff --git a/package-lock.json b/package-lock.json index 20b34d7..b499571 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,21 +1,21 @@ { "name": "@executeautomation/playwright-mcp-server", - "version": "1.0.3", + "version": "1.0.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@executeautomation/playwright-mcp-server", - "version": "1.0.3", + "version": "1.0.4", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "1.6.1", - "@playwright/browser-chromium": "1.51.1", - "@playwright/browser-firefox": "1.51.1", - "@playwright/browser-webkit": "1.51.1", - "@playwright/test": "^1.51.1", - "playwright": "1.51.1", - "uuid": "^9.0.1" + "@modelcontextprotocol/sdk": "1.11.1", + "@playwright/browser-chromium": "1.52.0", + "@playwright/browser-firefox": "1.52.0", + "@playwright/browser-webkit": "1.52.0", + "@playwright/test": "^1.52.0", + "playwright": "1.52.0", + "uuid": "11.1.0" }, "bin": { "playwright-mcp-server": "dist/index.js" @@ -24,7 +24,7 @@ "@types/jest": "^29.5.14", "@types/node": "^20.10.5", "jest": "^29.7.0", - "jest-playwright-preset": "^4.0.0", + "jest-playwright-preset": "4.0.0", "shx": "^0.3.4", "ts-jest": "^29.2.6", "typescript": "^5.8.2" @@ -44,44 +44,44 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", + "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", - "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", + "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.10", - "@babel/types": "^7.26.10", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helpers": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -97,13 +97,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", - "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", "dev": true, "dependencies": { - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0", + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -113,13 +113,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", - "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -129,27 +129,27 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", + "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -159,61 +159,61 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", - "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", "dev": true, "dependencies": { - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", "dev": true, "dependencies": { - "@babel/types": "^7.27.0" + "@babel/types": "^7.27.1" }, "bin": { "parser": "bin/babel-parser.js" @@ -274,12 +274,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -313,12 +313,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -430,12 +430,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -445,30 +445,30 @@ } }, "node_modules/@babel/template": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", - "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", + "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.27.0", - "@babel/parser": "^7.27.0", - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -477,13 +477,13 @@ } }, "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -862,16 +862,17 @@ } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.6.1.tgz", - "integrity": "sha512-oxzMzYCkZHMntzuyerehK3fV6A2Kwh5BD6CGEJSVDU2QNEhfLOptf2X7esQgaHZXHZY0oHmMsOtIDLP71UJXgA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.1.tgz", + "integrity": "sha512-9LfmxKTb1v+vUS1/emSk1f5ePmTLkb9Le9AxOB5T0XM59EUumwcS45z05h7aiZx3GI0Bl7mjb3FMEglYj+acuQ==", "dependencies": { "content-type": "^1.0.5", "cors": "^2.8.5", + "cross-spawn": "^7.0.3", "eventsource": "^3.0.2", "express": "^5.0.1", "express-rate-limit": "^7.5.0", - "pkce-challenge": "^4.1.0", + "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.24.1" @@ -881,47 +882,47 @@ } }, "node_modules/@playwright/browser-chromium": { - "version": "1.51.1", - "resolved": "https://registry.npmjs.org/@playwright/browser-chromium/-/browser-chromium-1.51.1.tgz", - "integrity": "sha512-Xebxk0SrDKttd8VGiUwLxOMbuH/Lf/+vFyzFG7QHVvqsAOw3Ec7Xdl1HRB4dnVP/RTEytkH4OgQ4OFy6K2c1xw==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@playwright/browser-chromium/-/browser-chromium-1.52.0.tgz", + "integrity": "sha512-n2/e2Q0dFACFg/1JZ0t2IYLorDdno6q1QwKnNbPICHwCkAtW7+fSMqCvJ9FSMWSyPugxZqIFhownSpyATxtiTw==", "hasInstallScript": true, "dependencies": { - "playwright-core": "1.51.1" + "playwright-core": "1.52.0" }, "engines": { "node": ">=18" } }, "node_modules/@playwright/browser-firefox": { - "version": "1.51.1", - "resolved": "https://registry.npmjs.org/@playwright/browser-firefox/-/browser-firefox-1.51.1.tgz", - "integrity": "sha512-F7RaES/0JtMafS5E4hdAWsvu01aalKOC6VSidklkoeDO5/duM3Ubl/C6eaBP+qHuwqZN/XGBxKHyYC3UoZwM8Q==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@playwright/browser-firefox/-/browser-firefox-1.52.0.tgz", + "integrity": "sha512-TXNRmKUCBsAHTOmeN4wxJNKDGYfp6TJcpjJNkHcxI0vaOdzUKH9qaAJypGL/vnbLmCYAVlYwiZJU1PTcacu5bw==", "hasInstallScript": true, "dependencies": { - "playwright-core": "1.51.1" + "playwright-core": "1.52.0" }, "engines": { "node": ">=18" } }, "node_modules/@playwright/browser-webkit": { - "version": "1.51.1", - "resolved": "https://registry.npmjs.org/@playwright/browser-webkit/-/browser-webkit-1.51.1.tgz", - "integrity": "sha512-He51aydblwT1qx0IKI4hFgVlE7rQBayFaj5PQBLedrcDlMeoGOQsKVgqgo7/VsO7WHhDdJkkSuBoVXNyX7UodQ==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@playwright/browser-webkit/-/browser-webkit-1.52.0.tgz", + "integrity": "sha512-IH5K9kgDDq8ZXSyXZS1T4j3qWI6GrPtkZDUOyaoc9ylkvdDZVh071peBlWD0VSuaNQgMrL4rrZ24xPuZAyjxqw==", "hasInstallScript": true, "dependencies": { - "playwright-core": "1.51.1" + "playwright-core": "1.52.0" }, "engines": { "node": ">=18" } }, "node_modules/@playwright/test": { - "version": "1.51.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.51.1.tgz", - "integrity": "sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.52.0.tgz", + "integrity": "sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==", "dependencies": { - "playwright": "1.51.1" + "playwright": "1.52.0" }, "bin": { "playwright": "cli.js" @@ -989,9 +990,9 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" @@ -1060,9 +1061,9 @@ } }, "node_modules/@types/node": { - "version": "20.17.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.27.tgz", - "integrity": "sha512-U58sbKhDrthHlxHRJw7ZLiLDZGmAUOZUbpw0S6nL27sYUdhvgBLCRu/keSd6qcTsfArd1sRFCCBxzWATGr/0UA==", + "version": "20.17.46", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.46.tgz", + "integrity": "sha512-0PQHLhZPWOxGW4auogW0eOQAuNIlCYvibIpG67ja0TOJ6/sehu+1en7sfceUn+QQtx4Rk3GxbLNwPh0Cav7TWw==", "dev": true, "dependencies": { "undici-types": "~6.19.2" @@ -1215,9 +1216,9 @@ "dev": true }, "node_modules/axios": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", - "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", "dev": true, "dependencies": { "follow-redirects": "^1.15.6", @@ -1342,15 +1343,15 @@ "dev": true }, "node_modules/body-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.1.0.tgz", - "integrity": "sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.0", "http-errors": "^2.0.0", - "iconv-lite": "^0.5.2", + "iconv-lite": "^0.6.3", "on-finished": "^2.4.1", "qs": "^6.14.0", "raw-body": "^3.0.0", @@ -1360,41 +1361,6 @@ "node": ">=18" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1418,9 +1384,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.24.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", "dev": true, "funding": [ { @@ -1437,10 +1403,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -1572,9 +1538,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001707", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", - "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", + "version": "1.0.30001717", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz", + "integrity": "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==", "dev": true, "funding": [ { @@ -1753,9 +1719,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "engines": { "node": ">= 0.6" } @@ -1805,7 +1771,6 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1829,11 +1794,11 @@ } }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1854,9 +1819,9 @@ } }, "node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", "dev": true, "peerDependencies": { "babel-plugin-macros": "^3.1.0" @@ -1908,15 +1873,6 @@ "node": ">= 0.8" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -1969,9 +1925,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.125", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.125.tgz", - "integrity": "sha512-A2+qEsSUc95QvyFDl7PNwkDDNphIKBVfBBtWWkPGRbiWEgzLo0SvLygYF6HgzVduHd+4WGPB/WD64POFgwzY3g==", + "version": "1.5.151", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.151.tgz", + "integrity": "sha512-Rl6uugut2l9sLojjS4H4SAr3A4IgACMLgpuEMPYCVcKydzfyPrn5absNRju38IhQOf/NwjJY8OGWjlteqYeBCA==", "dev": true }, "node_modules/emittery": { @@ -2102,20 +2058,20 @@ } }, "node_modules/eventsource": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.5.tgz", - "integrity": "sha512-LT/5J605bx5SNyE+ITBDiM3FxffBiq9un7Vx0EwMDM3vg8sWKx/tO2zC+LMqZ+smAM0F2hblaDZUVZF0te2pSw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", "dependencies": { - "eventsource-parser": "^3.0.0" + "eventsource-parser": "^3.0.1" }, "engines": { "node": ">=18.0.0" } }, "node_modules/eventsource-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.0.tgz", - "integrity": "sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", + "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", "engines": { "node": ">=18.0.0" } @@ -2187,45 +2143,44 @@ "dev": true }, "node_modules/express": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.0.1.tgz", - "integrity": "sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "dependencies": { "accepts": "^2.0.0", - "body-parser": "^2.0.1", + "body-parser": "^2.2.0", "content-disposition": "^1.0.0", - "content-type": "~1.0.4", - "cookie": "0.7.1", + "content-type": "^1.0.5", + "cookie": "^0.7.1", "cookie-signature": "^1.2.1", - "debug": "4.3.6", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "^2.0.0", - "fresh": "2.0.0", - "http-errors": "2.0.0", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", - "methods": "~1.1.2", "mime-types": "^3.0.0", - "on-finished": "2.4.1", - "once": "1.4.0", - "parseurl": "~1.3.3", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "router": "^2.0.0", - "safe-buffer": "5.2.1", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", "send": "^1.1.0", - "serve-static": "^2.1.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "^2.0.0", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express-rate-limit": { @@ -2315,27 +2270,6 @@ "node": ">= 0.8" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -2837,11 +2771,11 @@ } }, "node_modules/iconv-lite": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", - "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -3006,8 +2940,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", @@ -3970,14 +3903,6 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -4041,9 +3966,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/natural-compare": { "version": "1.4.0", @@ -4444,7 +4369,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -4482,18 +4406,18 @@ } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, "engines": { "node": ">= 6" } }, "node_modules/pkce-challenge": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-4.1.0.tgz", - "integrity": "sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", "engines": { "node": ">=16.20.0" } @@ -4511,11 +4435,11 @@ } }, "node_modules/playwright": { - "version": "1.51.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.51.1.tgz", - "integrity": "sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.52.0.tgz", + "integrity": "sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==", "dependencies": { - "playwright-core": "1.51.1" + "playwright-core": "1.52.0" }, "bin": { "playwright": "cli.js" @@ -4528,9 +4452,9 @@ } }, "node_modules/playwright-core": { - "version": "1.51.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.51.1.tgz", - "integrity": "sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.52.0.tgz", + "integrity": "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==", "bin": { "playwright-core": "cli.js" }, @@ -4637,11 +4561,11 @@ ] }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -4672,17 +4596,6 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", @@ -4808,10 +4721,12 @@ } }, "node_modules/router": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.1.0.tgz", - "integrity": "sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" @@ -4863,18 +4778,17 @@ } }, "node_modules/send": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.1.0.tgz", - "integrity": "sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "dependencies": { "debug": "^4.3.5", - "destroy": "^1.2.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", - "fresh": "^0.5.2", + "fresh": "^2.0.0", "http-errors": "^2.0.0", - "mime-types": "^2.1.35", + "mime-types": "^3.0.1", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", @@ -4884,47 +4798,15 @@ "node": ">= 18" } }, - "node_modules/send/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "node_modules/serve-static": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.1.0.tgz", - "integrity": "sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", - "send": "^1.0.0" + "send": "^1.2.0" }, "engines": { "node": ">= 18" @@ -4945,7 +4827,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -4957,7 +4838,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -5325,9 +5205,9 @@ } }, "node_modules/ts-jest": { - "version": "29.3.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.0.tgz", - "integrity": "sha512-4bfGBX7Gd1Aqz3SyeDS9O276wEU/BInZxskPrbhZLyv+c1wskDCqDFMJQJLWrIr/fKoAH4GE5dKUlrdyvo+39A==", + "version": "29.3.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.2.tgz", + "integrity": "sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==", "dev": true, "dependencies": { "bs-logger": "^0.2.6", @@ -5338,7 +5218,7 @@ "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", "semver": "^7.7.1", - "type-fest": "^4.37.0", + "type-fest": "^4.39.1", "yargs-parser": "^21.1.1" }, "bin": { @@ -5386,9 +5266,9 @@ } }, "node_modules/ts-jest/node_modules/type-fest": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", - "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, "engines": { "node": ">=16" @@ -5425,9 +5305,9 @@ } }, "node_modules/type-is": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.0.tgz", - "integrity": "sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", @@ -5447,9 +5327,9 @@ } }, "node_modules/typescript": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -5503,24 +5383,16 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/v8-to-istanbul": { @@ -5671,7 +5543,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -5778,9 +5649,9 @@ } }, "node_modules/zod": { - "version": "3.24.2", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", - "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", + "version": "3.24.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", + "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 6f029bc..eff8209 100644 --- a/package.json +++ b/package.json @@ -27,13 +27,13 @@ "url": "https://github.com/executeautomation/mcp-playwright.git" }, "dependencies": { - "@modelcontextprotocol/sdk": "1.6.1", - "@playwright/browser-chromium": "1.51.1", - "@playwright/browser-firefox": "1.51.1", - "@playwright/browser-webkit": "1.51.1", - "playwright": "1.51.1", - "@playwright/test": "^1.51.1", - "uuid": "^9.0.1" + "@modelcontextprotocol/sdk": "1.11.1", + "@playwright/browser-chromium": "1.52.0", + "@playwright/browser-firefox": "1.52.0", + "@playwright/browser-webkit": "1.52.0", + "playwright": "1.52.0", + "@playwright/test": "^1.52.0", + "uuid": "11.1.0" }, "keywords": [ "playwright", @@ -45,7 +45,7 @@ "@types/jest": "^29.5.14", "@types/node": "^20.10.5", "jest": "^29.7.0", - "jest-playwright-preset": "^4.0.0", + "jest-playwright-preset": "4.0.0", "shx": "^0.3.4", "ts-jest": "^29.2.6", "typescript": "^5.8.2" From af8178733e1393508b3f8332d2de3464543aa8e9 Mon Sep 17 00:00:00 2001 From: Karthik KK Date: Sun, 11 May 2025 14:54:20 +1200 Subject: [PATCH 04/14] Fixed the error is SSE --- src/requestHandler.ts | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/requestHandler.ts b/src/requestHandler.ts index 6b2f4eb..eb41d26 100644 --- a/src/requestHandler.ts +++ b/src/requestHandler.ts @@ -33,9 +33,13 @@ export function setupRequestHandlers(server: Server, tools: Tool[]) { if (uri === "console://logs") { const logs = getConsoleLogs().join("\n"); // Broadcast logs to SSE clients - const sseServer = (server as any)[SSE_SERVER_SYMBOL]; - if (sseServer) { - sseServer.broadcast('console_logs', { logs }); + try { + const sseServer = (server as any)[SSE_SERVER_SYMBOL]; + if (sseServer) { + sseServer.broadcast('console_logs', { logs }); + } + } catch (err) { + console.error('Failed to broadcast console logs via SSE:', err); } return { contents: [{ @@ -51,9 +55,13 @@ export function setupRequestHandlers(server: Server, tools: Tool[]) { const screenshot = getScreenshots().get(name); if (screenshot) { // Broadcast screenshot event to SSE clients - const sseServer = (server as any)[SSE_SERVER_SYMBOL]; - if (sseServer) { - sseServer.broadcast('screenshot', { name, screenshot }); + try { + const sseServer = (server as any)[SSE_SERVER_SYMBOL]; + if (sseServer) { + sseServer.broadcast('screenshot', { name, screenshot }); + } + } catch (err) { + console.error('Failed to broadcast screenshot via SSE:', err); } return { contents: [{ From 8218bbacde68335c35ad464aab2fd006185801d3 Mon Sep 17 00:00:00 2001 From: Karthik KK Date: Sun, 11 May 2025 15:12:30 +1200 Subject: [PATCH 05/14] Enhance SSE server initialization and error handling. Added custom interface for server with SSE support, and improved error logging for client connections and broadcasts. --- src/index.ts | 37 +++++++++++++++++++++++++------------ src/sseServer.ts | 16 +++++++++++++--- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/index.ts b/src/index.ts index e75f7a5..a47a769 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,8 +9,13 @@ import http from 'http'; export const SSE_SERVER_SYMBOL = Symbol('sseServer'); +// Custom interface to allow symbol property +interface McpServerWithSSE extends Server { + [key: symbol]: any; +} + async function runServer() { - const server = new Server( + const server: McpServerWithSSE = new Server( { name: "executeautomation/playwright-mcp-server", version: "1.0.4", @@ -21,7 +26,7 @@ async function runServer() { tools: {}, }, } - ); + ) as McpServerWithSSE; // Create tool definitions const TOOLS = createToolDefinitions(); @@ -29,16 +34,24 @@ async function runServer() { // Setup request handlers setupRequestHandlers(server, TOOLS); - // Start HTTP server for SSE - const httpServer = http.createServer(); - const sseServer = new SseServer(); - sseServer.attachToServer(httpServer); - httpServer.listen(3001, () => { - console.log('SSE server listening on http://localhost:3001/events'); - }); - - // Attach sseServer to MCP server for use in handlers - (server as any)[SSE_SERVER_SYMBOL] = sseServer; + // Start HTTP server for SSE only if not in test environment + let sseServer; + if (process.env.NODE_ENV !== 'test') { + let httpServer; + try { + httpServer = http.createServer(); + sseServer = new SseServer(); + sseServer.attachToServer(httpServer); + httpServer.listen(3001, () => { + console.log('SSE server listening on http://localhost:3001/events'); + }); + } catch (err) { + console.error('Failed to initialize SSE server:', err); + } + if (sseServer) { + server[SSE_SERVER_SYMBOL] = sseServer; + } + } // Create transport and connect const transport = new StdioServerTransport(); diff --git a/src/sseServer.ts b/src/sseServer.ts index 8b7ae44..e3f4982 100644 --- a/src/sseServer.ts +++ b/src/sseServer.ts @@ -13,8 +13,12 @@ export class SseServer extends EventEmitter { 'Connection': 'keep-alive', 'Access-Control-Allow-Origin': '*', }); - res.write('\n'); - this.clients.add(res); + try { + res.write('\n'); + this.clients.add(res); + } catch (err) { + console.error('Failed to add SSE client or write initial response:', err); + } req.on('close', () => { this.clients.delete(res); }); @@ -25,7 +29,13 @@ export class SseServer extends EventEmitter { broadcast(event: string, data: any) { const payload = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`; for (const client of this.clients) { - client.write(payload); + try { + client.write(payload); + } catch (err) { + // Remove client if write fails (e.g., client disconnected) + this.clients.delete(client); + console.error('Failed to write SSE event to client, removing client:', err); + } } } } \ No newline at end of file From 8f903b10b7bf0ecd6fec2f6513aa8844afcfcc48 Mon Sep 17 00:00:00 2001 From: Matthew Lenhard Date: Mon, 12 May 2025 07:31:27 -0400 Subject: [PATCH 06/14] [bugfix] fix legacy peer deps --- package-lock.json | 919 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 679 insertions(+), 240 deletions(-) diff --git a/package-lock.json b/package-lock.json index e30ad8a..87cd624 100644 --- a/package-lock.json +++ b/package-lock.json @@ -67,13 +67,13 @@ "license": "MIT" }, "node_modules/@ai-sdk/openai": { - "version": "1.3.21", - "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-1.3.21.tgz", - "integrity": "sha512-ipAhkRKUd2YaMmn7DAklX3N7Ywx/rCsJHVyb0V/lKRqPcc612qAFVbjg+Uve8QYJlbPxgfsM4s9JmCFp6PSdYw==", + "version": "1.3.22", + "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-1.3.22.tgz", + "integrity": "sha512-QwA+2EkG0QyjVR+7h6FE7iOu2ivNqAVMm9UJZkVxxTk5OIq5fFJDTEI/zICEMuHImTTXR2JjsL6EirJ28Jc4cw==", "license": "Apache-2.0", "dependencies": { "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.7" + "@ai-sdk/provider-utils": "2.2.8" }, "engines": { "node": ">=18" @@ -95,9 +95,9 @@ } }, "node_modules/@ai-sdk/provider-utils": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-2.2.7.tgz", - "integrity": "sha512-kM0xS3GWg3aMChh9zfeM+80vEZfXzR3JEUBdycZLtbRZ2TRT8xOj3WodGHPb06sUK5yD7pAXC/P7ctsi2fvUGQ==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-2.2.8.tgz", + "integrity": "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==", "license": "Apache-2.0", "dependencies": { "@ai-sdk/provider": "1.1.3", @@ -112,13 +112,13 @@ } }, "node_modules/@ai-sdk/react": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-1.2.11.tgz", - "integrity": "sha512-+kPqLkJ3TWP6czaJPV+vzAKSUcKQ1598BUrcLHt56sH99+LhmIIW3ylZp0OfC3O6TR3eO1Lt0Yzw4R0mK6g9Gw==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-1.2.12.tgz", + "integrity": "sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g==", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider-utils": "2.2.7", - "@ai-sdk/ui-utils": "1.2.10", + "@ai-sdk/provider-utils": "2.2.8", + "@ai-sdk/ui-utils": "1.2.11", "swr": "^2.2.5", "throttleit": "2.1.0" }, @@ -136,13 +136,13 @@ } }, "node_modules/@ai-sdk/ui-utils": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-1.2.10.tgz", - "integrity": "sha512-GUj+LBoAlRQF1dL/M49jtufGqtLOMApxTpCmVjoRpIPt/dFALVL9RfqfvxwztyIwbK+IxGzcYjSGRsrWrj+86g==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-1.2.11.tgz", + "integrity": "sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w==", "license": "Apache-2.0", "dependencies": { "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.7", + "@ai-sdk/provider-utils": "2.2.8", "zod-to-json-schema": "^3.24.1" }, "engines": { @@ -157,6 +157,7 @@ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -183,9 +184,9 @@ } }, "node_modules/@anthropic-ai/sdk/node_modules/@types/node": { - "version": "18.19.87", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.87.tgz", - "integrity": "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A==", + "version": "18.19.100", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.100.tgz", + "integrity": "sha512-ojmMP8SZBKprc3qGrGk8Ujpo80AXkrP7G2tOT4VWr5jlr5DHjsJF+emXJz+Wm0glmy4Js62oKMdZZ6B9Y+tEcA==", "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -202,6 +203,7 @@ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", @@ -216,6 +218,7 @@ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -225,6 +228,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -255,6 +259,7 @@ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.27.1", "@babel/types": "^7.27.1", @@ -271,6 +276,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", @@ -287,6 +293,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" @@ -300,6 +307,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", @@ -317,6 +325,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -326,6 +335,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -335,6 +345,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -344,6 +355,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -353,6 +365,7 @@ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.27.1", "@babel/types": "^7.27.1" @@ -366,6 +379,7 @@ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" }, @@ -381,6 +395,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -393,6 +408,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -405,6 +421,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -417,6 +434,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -432,6 +450,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -447,6 +466,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -459,6 +479,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -471,6 +492,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -486,6 +508,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -498,6 +521,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -510,6 +534,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -522,6 +547,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -534,6 +560,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -546,6 +573,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -558,6 +586,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -573,6 +602,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -588,6 +618,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -603,6 +634,7 @@ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", @@ -617,6 +649,7 @@ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.1", @@ -635,6 +668,7 @@ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" @@ -647,12 +681,13 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz", - "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", "cpu": [ "ppc64" ], @@ -666,9 +701,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz", - "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", "cpu": [ "arm" ], @@ -682,9 +717,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz", - "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", "cpu": [ "arm64" ], @@ -698,9 +733,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz", - "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", "cpu": [ "x64" ], @@ -714,9 +749,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz", - "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", "cpu": [ "arm64" ], @@ -730,9 +765,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz", - "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", "cpu": [ "x64" ], @@ -746,9 +781,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz", - "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", "cpu": [ "arm64" ], @@ -762,9 +797,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz", - "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", "cpu": [ "x64" ], @@ -778,9 +813,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz", - "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", "cpu": [ "arm" ], @@ -794,9 +829,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz", - "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", "cpu": [ "arm64" ], @@ -810,9 +845,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz", - "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", "cpu": [ "ia32" ], @@ -826,9 +861,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz", - "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", "cpu": [ "loong64" ], @@ -842,9 +877,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz", - "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", "cpu": [ "mips64el" ], @@ -858,9 +893,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz", - "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", "cpu": [ "ppc64" ], @@ -874,9 +909,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz", - "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", "cpu": [ "riscv64" ], @@ -890,9 +925,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz", - "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", "cpu": [ "s390x" ], @@ -906,9 +941,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz", - "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", "cpu": [ "x64" ], @@ -922,9 +957,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz", - "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", "cpu": [ "arm64" ], @@ -938,9 +973,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz", - "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", "cpu": [ "x64" ], @@ -954,9 +989,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz", - "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", "cpu": [ "arm64" ], @@ -970,9 +1005,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz", - "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", "cpu": [ "x64" ], @@ -986,9 +1021,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz", - "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", "cpu": [ "x64" ], @@ -1002,9 +1037,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz", - "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", "cpu": [ "arm64" ], @@ -1018,9 +1053,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz", - "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", "cpu": [ "ia32" ], @@ -1034,9 +1069,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz", - "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", "cpu": [ "x64" ], @@ -1062,13 +1097,15 @@ "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@hapi/topo": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -1078,6 +1115,7 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -1094,6 +1132,7 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1103,6 +1142,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -1120,6 +1160,7 @@ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -1167,6 +1208,7 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -1182,6 +1224,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -1195,6 +1238,7 @@ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -1207,6 +1251,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -1224,6 +1269,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -1239,6 +1285,7 @@ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -1282,6 +1329,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -1294,6 +1342,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -1308,6 +1357,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -1323,6 +1373,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -1338,6 +1389,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -1364,6 +1416,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -1381,6 +1434,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1395,6 +1449,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1404,6 +1459,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1412,13 +1468,15 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1428,6 +1486,7 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.1.tgz", "integrity": "sha512-9LfmxKTb1v+vUS1/emSk1f5ePmTLkb9Le9AxOB5T0XM59EUumwcS45z05h7aiZx3GI0Bl7mjb3FMEglYj+acuQ==", + "license": "MIT", "dependencies": { "content-type": "^1.0.5", "cors": "^2.8.5", @@ -1458,6 +1517,7 @@ "resolved": "https://registry.npmjs.org/@playwright/browser-chromium/-/browser-chromium-1.52.0.tgz", "integrity": "sha512-n2/e2Q0dFACFg/1JZ0t2IYLorDdno6q1QwKnNbPICHwCkAtW7+fSMqCvJ9FSMWSyPugxZqIFhownSpyATxtiTw==", "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "playwright-core": "1.52.0" }, @@ -1470,6 +1530,7 @@ "resolved": "https://registry.npmjs.org/@playwright/browser-firefox/-/browser-firefox-1.52.0.tgz", "integrity": "sha512-TXNRmKUCBsAHTOmeN4wxJNKDGYfp6TJcpjJNkHcxI0vaOdzUKH9qaAJypGL/vnbLmCYAVlYwiZJU1PTcacu5bw==", "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "playwright-core": "1.52.0" }, @@ -1482,6 +1543,7 @@ "resolved": "https://registry.npmjs.org/@playwright/browser-webkit/-/browser-webkit-1.52.0.tgz", "integrity": "sha512-IH5K9kgDDq8ZXSyXZS1T4j3qWI6GrPtkZDUOyaoc9ylkvdDZVh071peBlWD0VSuaNQgMrL4rrZ24xPuZAyjxqw==", "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "playwright-core": "1.52.0" }, @@ -1493,6 +1555,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.52.0.tgz", "integrity": "sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==", + "license": "Apache-2.0", "dependencies": { "playwright": "1.52.0" }, @@ -1508,6 +1571,7 @@ "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -1516,25 +1580,29 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@sinonjs/commons": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -1544,6 +1612,7 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } @@ -1553,6 +1622,7 @@ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1566,6 +1636,7 @@ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } @@ -1575,6 +1646,7 @@ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -1585,6 +1657,7 @@ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" } @@ -1600,6 +1673,7 @@ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1608,13 +1682,15 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -1624,6 +1700,7 @@ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } @@ -1633,15 +1710,17 @@ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" } }, "node_modules/@types/node": { - "version": "20.17.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.27.tgz", - "integrity": "sha512-U58sbKhDrthHlxHRJw7ZLiLDZGmAUOZUbpw0S6nL27sYUdhvgBLCRu/keSd6qcTsfArd1sRFCCBxzWATGr/0UA==", + "version": "20.17.46", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.46.tgz", + "integrity": "sha512-0PQHLhZPWOxGW4auogW0eOQAuNIlCYvibIpG67ja0TOJ6/sehu+1en7sfceUn+QQtx4Rk3GxbLNwPh0Cav7TWw==", + "license": "MIT", "dependencies": { "undici-types": "~6.19.2" } @@ -1660,13 +1739,15 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/wait-on": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/@types/wait-on/-/wait-on-5.3.4.tgz", "integrity": "sha512-EBsPjFMrFlMbbUFf9D1Fp+PAB2TwmUn7a3YtHyD9RLuTIk1jDd8SxXVAoez2Ciy+8Jsceo2MYEYZzJ/DvorOKw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1676,6 +1757,7 @@ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -1684,7 +1766,8 @@ "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/abort-controller": { "version": "3.0.0", @@ -1702,6 +1785,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" @@ -1727,6 +1811,7 @@ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -1736,15 +1821,15 @@ } }, "node_modules/ai": { - "version": "4.3.13", - "resolved": "https://registry.npmjs.org/ai/-/ai-4.3.13.tgz", - "integrity": "sha512-cC5HXItuOwGykSMacCPzNp6+NMTxeuTjOenztVgSJhdC9Z4OrzBxwkyeDAf4h1QP938ZFi7IBdq3u4lxVoVmvw==", + "version": "4.3.15", + "resolved": "https://registry.npmjs.org/ai/-/ai-4.3.15.tgz", + "integrity": "sha512-TYKRzbWg6mx/pmTadlAEIhuQtzfHUV0BbLY72+zkovXwq/9xhcH24IlQmkyBpElK6/4ArS0dHdOOtR1jOPVwtg==", "license": "Apache-2.0", "dependencies": { "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.7", - "@ai-sdk/react": "1.2.11", - "@ai-sdk/ui-utils": "1.2.10", + "@ai-sdk/provider-utils": "2.2.8", + "@ai-sdk/react": "1.2.12", + "@ai-sdk/ui-utils": "1.2.11", "@opentelemetry/api": "1.9.0", "jsondiffpatch": "0.6.0" }, @@ -1766,6 +1851,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -1781,6 +1867,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1789,6 +1876,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1804,6 +1892,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1817,6 +1906,7 @@ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, + "license": "MIT", "dependencies": { "default-require-extensions": "^3.0.0" }, @@ -1828,13 +1918,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -1843,18 +1935,21 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" }, "node_modules/axios": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", "dev": true, + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -1866,6 +1961,7 @@ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -1887,6 +1983,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -1903,6 +2000,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -1919,6 +2017,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -1934,6 +2033,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -1960,6 +2060,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -1975,7 +2076,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/base-64": { "version": "0.1.0", @@ -1986,6 +2088,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", @@ -2006,6 +2109,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2016,6 +2120,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -2042,6 +2147,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001716", "electron-to-chromium": "^1.5.149", @@ -2060,6 +2166,7 @@ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -2072,6 +2179,7 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -2080,12 +2188,14 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2095,6 +2205,7 @@ "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, + "license": "MIT", "dependencies": { "hasha": "^5.0.0", "make-dir": "^3.0.0", @@ -2110,6 +2221,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -2125,6 +2237,7 @@ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -2136,6 +2249,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -2148,6 +2262,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -2164,6 +2279,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2173,6 +2289,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2195,12 +2312,14 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2217,6 +2336,7 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -2241,6 +2361,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } @@ -2249,13 +2370,15 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2265,6 +2388,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -2279,6 +2403,7 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -2288,12 +2413,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2304,12 +2431,14 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2322,6 +2451,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -2330,18 +2460,21 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/content-disposition": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -2353,6 +2486,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2361,12 +2495,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2375,6 +2511,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", "engines": { "node": ">=6.6.0" } @@ -2383,6 +2520,7 @@ "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -2396,6 +2534,7 @@ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -2416,6 +2555,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2439,6 +2579,7 @@ "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz", "integrity": "sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==", "dev": true, + "license": "MIT", "dependencies": { "find-pkg": "^0.1.2", "fs-exists-sync": "^0.1.0" @@ -2451,6 +2592,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -2468,6 +2610,7 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2477,6 +2620,7 @@ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", "dev": true, + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -2491,6 +2635,7 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2500,6 +2645,7 @@ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, + "license": "MIT", "dependencies": { "strip-bom": "^4.0.0" }, @@ -2514,6 +2660,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -2522,6 +2669,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2540,6 +2688,7 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2555,6 +2704,7 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2585,6 +2735,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -2597,13 +2748,15 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -2618,13 +2771,15 @@ "version": "1.5.151", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.151.tgz", "integrity": "sha512-Rl6uugut2l9sLojjS4H4SAr3A4IgACMLgpuEMPYCVcKydzfyPrn5absNRju38IhQOf/NwjJY8OGWjlteqYeBCA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2636,12 +2791,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2651,6 +2808,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -2659,6 +2817,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -2667,6 +2826,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -2675,6 +2835,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -2686,6 +2847,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -2700,12 +2862,13 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/esbuild": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz", - "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -2715,31 +2878,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.3", - "@esbuild/android-arm": "0.25.3", - "@esbuild/android-arm64": "0.25.3", - "@esbuild/android-x64": "0.25.3", - "@esbuild/darwin-arm64": "0.25.3", - "@esbuild/darwin-x64": "0.25.3", - "@esbuild/freebsd-arm64": "0.25.3", - "@esbuild/freebsd-x64": "0.25.3", - "@esbuild/linux-arm": "0.25.3", - "@esbuild/linux-arm64": "0.25.3", - "@esbuild/linux-ia32": "0.25.3", - "@esbuild/linux-loong64": "0.25.3", - "@esbuild/linux-mips64el": "0.25.3", - "@esbuild/linux-ppc64": "0.25.3", - "@esbuild/linux-riscv64": "0.25.3", - "@esbuild/linux-s390x": "0.25.3", - "@esbuild/linux-x64": "0.25.3", - "@esbuild/netbsd-arm64": "0.25.3", - "@esbuild/netbsd-x64": "0.25.3", - "@esbuild/openbsd-arm64": "0.25.3", - "@esbuild/openbsd-x64": "0.25.3", - "@esbuild/sunos-x64": "0.25.3", - "@esbuild/win32-arm64": "0.25.3", - "@esbuild/win32-ia32": "0.25.3", - "@esbuild/win32-x64": "0.25.3" + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" } }, "node_modules/escalade": { @@ -2747,6 +2910,7 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2754,13 +2918,15 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2770,6 +2936,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -2782,6 +2949,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2799,6 +2967,7 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", "dependencies": { "eventsource-parser": "^3.0.1" }, @@ -2810,6 +2979,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", + "license": "MIT", "engines": { "node": ">=18.0.0" } @@ -2819,6 +2989,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -2851,6 +3022,7 @@ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", "integrity": "sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==", "dev": true, + "license": "MIT", "dependencies": { "os-homedir": "^1.0.1" }, @@ -2863,6 +3035,7 @@ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -2878,12 +3051,14 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/expect-playwright/-/expect-playwright-0.8.0.tgz", "integrity": "sha512-+kn8561vHAY+dt+0gMqqj1oY+g5xWrsuGMk4QGxotT2WS545nVqqjs37z6hrYfIuucwqthzwJfCJUEYqixyljg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/express": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "license": "MIT", "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.0", @@ -2925,6 +3100,7 @@ "version": "7.5.0", "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -2939,13 +3115,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } @@ -2955,6 +3133,7 @@ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } @@ -2964,6 +3143,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -2973,6 +3153,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2985,6 +3166,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2996,6 +3178,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", @@ -3013,6 +3196,7 @@ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, + "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -3030,6 +3214,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -3045,6 +3230,7 @@ "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz", "integrity": "sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==", "dev": true, + "license": "MIT", "dependencies": { "fs-exists-sync": "^0.1.0", "resolve-dir": "^0.1.0" @@ -3058,6 +3244,7 @@ "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz", "integrity": "sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==", "dev": true, + "license": "MIT", "dependencies": { "find-file-up": "^0.1.2" }, @@ -3070,6 +3257,7 @@ "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.10.tgz", "integrity": "sha512-ncYFnWEIwL7PzmrK1yZtaccN8GhethD37RzBHG6iOZoFYB4vSmLLXfeWJjeN5nMvCJMjOtBvBBF8OgxEcikiZg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "~4.1.2", "commander": "^12.1.0", @@ -3084,6 +3272,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -3103,6 +3292,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -3117,6 +3307,7 @@ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" @@ -3129,6 +3320,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -3149,6 +3341,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3157,6 +3350,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -3190,6 +3384,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3198,6 +3393,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -3220,13 +3416,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/fs-exists-sync": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", "integrity": "sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3235,13 +3433,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3254,6 +3454,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3263,6 +3464,7 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -3272,6 +3474,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -3280,6 +3483,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -3304,6 +3508,7 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -3312,6 +3517,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -3325,6 +3531,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3350,6 +3557,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3370,6 +3578,7 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", "integrity": "sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==", "dev": true, + "license": "MIT", "dependencies": { "global-prefix": "^0.1.4", "is-windows": "^0.2.0" @@ -3383,6 +3592,7 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", "integrity": "sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==", "dev": true, + "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.0", "ini": "^1.3.4", @@ -3398,6 +3608,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -3410,6 +3621,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -3418,6 +3630,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3429,12 +3642,14 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -3443,6 +3658,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3454,6 +3670,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -3469,6 +3686,7 @@ "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, + "license": "MIT", "dependencies": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" @@ -3485,6 +3703,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -3493,6 +3712,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -3505,6 +3725,7 @@ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, + "license": "MIT", "dependencies": { "parse-passwd": "^1.0.0" }, @@ -3516,12 +3737,14 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -3538,6 +3761,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -3555,6 +3779,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -3567,6 +3792,7 @@ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -3586,6 +3812,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -3595,6 +3822,7 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3605,6 +3833,7 @@ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3613,19 +3842,22 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -3634,6 +3866,7 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -3642,7 +3875,8 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-buffer": { "version": "1.1.6", @@ -3655,6 +3889,7 @@ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -3670,6 +3905,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3679,6 +3915,7 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3688,6 +3925,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -3695,13 +3933,15 @@ "node_modules/is-promise": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -3713,13 +3953,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-windows": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", "integrity": "sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3727,13 +3969,15 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } @@ -3743,6 +3987,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "append-transform": "^2.0.0" }, @@ -3755,6 +4000,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.23.9", "@babel/parser": "^7.23.9", @@ -3771,6 +4017,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3783,6 +4030,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, + "license": "ISC", "dependencies": { "archy": "^1.0.0", "cross-spawn": "^7.0.3", @@ -3800,6 +4048,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -3809,6 +4058,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -3823,6 +4073,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -3837,6 +4088,7 @@ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -3850,6 +4102,7 @@ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -3868,6 +4121,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -3894,6 +4148,7 @@ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -3908,6 +4163,7 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -3939,6 +4195,7 @@ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -3972,6 +4229,7 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -4017,6 +4275,7 @@ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -4032,6 +4291,7 @@ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -4044,6 +4304,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -4060,6 +4321,7 @@ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -4077,6 +4339,7 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -4086,6 +4349,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -4111,6 +4375,7 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -4124,6 +4389,7 @@ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -4139,6 +4405,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -4159,6 +4426,7 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -4173,6 +4441,7 @@ "resolved": "https://registry.npmjs.org/jest-playwright-preset/-/jest-playwright-preset-4.0.0.tgz", "integrity": "sha512-+dGZ1X2KqtwXaabVjTGxy0a3VzYfvYsWaRcuO8vMhyclHSOpGSI1+5cmlqzzCwQ3+fv0EjkTc7I5aV9lo08dYw==", "dev": true, + "license": "MIT", "dependencies": { "expect-playwright": "^0.8.0", "jest-process-manager": "^0.4.0", @@ -4193,6 +4462,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -4202,6 +4472,7 @@ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -4219,6 +4490,7 @@ "resolved": "https://registry.npmjs.org/jest-process-manager/-/jest-process-manager-0.4.0.tgz", "integrity": "sha512-80Y6snDyb0p8GG83pDxGI/kQzwVTkCxc7ep5FPe/F6JYdvRDhwr6RzRmPSP7SEwuLhxo80lBS/NqOdUIbHIfhw==", "dev": true, + "license": "MIT", "dependencies": { "@types/wait-on": "^5.2.0", "chalk": "^4.1.0", @@ -4237,6 +4509,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -4246,6 +4519,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -4266,6 +4540,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -4279,6 +4554,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -4311,6 +4587,7 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -4344,6 +4621,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -4375,6 +4653,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4387,6 +4666,7 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -4404,6 +4684,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -4421,6 +4702,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4433,6 +4715,7 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -4452,6 +4735,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -4467,6 +4751,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4482,6 +4767,7 @@ "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", @@ -4494,13 +4780,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -4514,6 +4802,7 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -4525,7 +4814,8 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema": { "version": "0.4.0", @@ -4538,6 +4828,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -4579,6 +4870,7 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4588,6 +4880,7 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4596,13 +4889,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -4614,25 +4909,29 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/loglevel": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" }, @@ -4646,6 +4945,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -4655,6 +4955,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -4670,6 +4971,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4681,13 +4983,15 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -4696,6 +5000,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -4723,36 +5028,6 @@ "react": "^19.1.0" } }, - "node_modules/mcp-evals/node_modules/@modelcontextprotocol/sdk": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.10.2.tgz", - "integrity": "sha512-rb6AMp2DR4SN+kc6L1ta2NCpApyA9WYNx3CrTSZvGxq9wH71bRur+zRqPfg0vQ9mjywR7qZdX2RGHOPq3ss+tA==", - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.3", - "eventsource": "^3.0.2", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/mcp-evals/node_modules/pkce-challenge": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", - "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", - "license": "MIT", - "engines": { - "node": ">=16.20.0" - } - }, "node_modules/md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -4768,6 +5043,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -4776,6 +5052,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", "engines": { "node": ">=18" }, @@ -4787,13 +5064,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -4806,6 +5085,7 @@ "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4814,6 +5094,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, @@ -4826,6 +5107,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4835,6 +5117,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4847,6 +5130,7 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4854,7 +5138,8 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.11", @@ -4878,12 +5163,14 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/negotiator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4932,13 +5219,15 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, + "license": "MIT", "dependencies": { "process-on-spawn": "^1.0.0" }, @@ -4950,13 +5239,15 @@ "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4966,6 +5257,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -4978,6 +5270,7 @@ "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", @@ -5019,6 +5312,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -5029,13 +5323,15 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nyc/node_modules/istanbul-lib-instrument": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", @@ -5051,6 +5347,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -5066,6 +5363,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -5079,13 +5377,15 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/nyc/node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -5108,6 +5408,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -5120,6 +5421,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5128,6 +5430,7 @@ "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5139,6 +5442,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -5150,6 +5454,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -5159,6 +5464,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -5170,9 +5476,9 @@ } }, "node_modules/openai": { - "version": "4.96.2", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.96.2.tgz", - "integrity": "sha512-R2XnxvMsizkROr7BV3uNp1q/3skwPZ7fmPjO1bXLnfB4Tu5xKxrT1EVwzjhxn0MZKBKAvOaGWS63jTMN6KrIXA==", + "version": "4.98.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.98.0.tgz", + "integrity": "sha512-TmDKur1WjxxMPQAtLG5sgBSCJmX7ynTsGmewKzoDwl1fRxtbLOsiR0FA/AOAAtYUmP6azal+MYQuOENfdU+7yg==", "license": "Apache-2.0", "dependencies": { "@types/node": "^18.11.18", @@ -5200,9 +5506,9 @@ } }, "node_modules/openai/node_modules/@types/node": { - "version": "18.19.87", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.87.tgz", - "integrity": "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A==", + "version": "18.19.100", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.100.tgz", + "integrity": "sha512-ojmMP8SZBKprc3qGrGk8Ujpo80AXkrP7G2tOT4VWr5jlr5DHjsJF+emXJz+Wm0glmy4Js62oKMdZZ6B9Y+tEcA==", "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -5219,6 +5525,7 @@ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5228,6 +5535,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -5243,6 +5551,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -5255,6 +5564,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -5270,6 +5580,7 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -5282,6 +5593,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5291,6 +5603,7 @@ "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, + "license": "ISC", "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^5.0.0", @@ -5306,6 +5619,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5324,6 +5638,7 @@ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5332,6 +5647,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5341,6 +5657,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5350,6 +5667,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5358,6 +5676,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", "engines": { "node": ">=8" } @@ -5366,12 +5685,14 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-to-regexp": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "license": "MIT", "engines": { "node": ">=16" } @@ -5380,13 +5701,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -5399,6 +5722,7 @@ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -5407,6 +5731,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "license": "MIT", "engines": { "node": ">=16.20.0" } @@ -5416,6 +5741,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -5427,6 +5753,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.52.0.tgz", "integrity": "sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==", + "license": "Apache-2.0", "dependencies": { "playwright-core": "1.52.0" }, @@ -5444,6 +5771,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.52.0.tgz", "integrity": "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==", + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, @@ -5456,6 +5784,7 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -5469,6 +5798,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -5483,6 +5813,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5495,6 +5826,7 @@ "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", "dev": true, + "license": "MIT", "dependencies": { "fromentries": "^1.2.0" }, @@ -5507,6 +5839,7 @@ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -5519,6 +5852,7 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -5531,7 +5865,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pure-rand": { "version": "6.1.0", @@ -5547,12 +5882,14 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, "node_modules/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" }, @@ -5567,6 +5904,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5575,6 +5913,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -5585,11 +5924,22 @@ "node": ">= 0.8" } }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rechoir": { "version": "0.6.2", @@ -5608,6 +5958,7 @@ "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, + "license": "ISC", "dependencies": { "es6-error": "^4.0.1" }, @@ -5620,6 +5971,7 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5628,13 +5980,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", @@ -5655,6 +6009,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -5667,6 +6022,7 @@ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", "integrity": "sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==", "dev": true, + "license": "MIT", "dependencies": { "expand-tilde": "^1.2.2", "global-modules": "^0.2.3" @@ -5680,6 +6036,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5698,6 +6055,7 @@ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -5708,6 +6066,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -5722,6 +6081,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", @@ -5738,6 +6098,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } @@ -5759,12 +6120,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/secure-json-parse": { "version": "2.7.0", @@ -5777,6 +6140,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -5785,6 +6149,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", "dependencies": { "debug": "^4.3.5", "encodeurl": "^2.0.0", @@ -5806,6 +6171,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", @@ -5820,17 +6186,20 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -5842,6 +6211,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", "engines": { "node": ">=8" } @@ -5851,6 +6221,7 @@ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -5868,6 +6239,7 @@ "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.3", "shelljs": "^0.8.5" @@ -5883,6 +6255,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", @@ -5901,6 +6274,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" @@ -5916,6 +6290,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -5933,6 +6308,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -5951,19 +6327,22 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5973,6 +6352,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -5982,6 +6362,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -5992,6 +6373,7 @@ "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^2.0.0", "is-windows": "^1.0.2", @@ -6009,6 +6391,7 @@ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6018,6 +6401,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -6033,6 +6417,7 @@ "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-5.0.0.tgz", "integrity": "sha512-28+AJr82moMVWolQvlAIv3JcYDkjkFTEmfDc503wxrF5l2rQ3dFz6DpbXp3kD4zmgGGldfM4xM4v1sFj/ZaIOA==", "dev": true, + "license": "MIT", "dependencies": { "exit": "^0.1.2", "signal-exit": "^3.0.3", @@ -6044,13 +6429,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -6062,6 +6449,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -6071,6 +6459,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -6084,6 +6473,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6098,6 +6488,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6110,6 +6501,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6119,6 +6511,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6128,6 +6521,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -6139,6 +6533,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6151,6 +6546,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6176,6 +6572,7 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -6201,13 +6598,15 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -6219,6 +6618,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "engines": { "node": ">=0.6" } @@ -6234,6 +6634,7 @@ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, + "license": "MIT", "bin": { "tree-kill": "cli.js" } @@ -6243,6 +6644,7 @@ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.2.tgz", "integrity": "sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==", "dev": true, + "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", "ejs": "^3.1.10", @@ -6292,6 +6694,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -6304,6 +6707,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -6315,7 +6719,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/tsx": { "version": "4.19.4", @@ -6350,6 +6755,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -6359,6 +6765,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -6370,6 +6777,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", @@ -6384,6 +6792,7 @@ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, + "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" } @@ -6393,6 +6802,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6416,12 +6826,14 @@ "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -6445,6 +6857,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -6473,6 +6886,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/esm/bin/uuid" } @@ -6482,6 +6896,7 @@ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -6495,6 +6910,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -6504,6 +6920,7 @@ "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", "dev": true, + "license": "MIT", "dependencies": { "axios": "^1.6.1", "joi": "^17.11.0", @@ -6523,6 +6940,7 @@ "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-0.2.14.tgz", "integrity": "sha512-kIzjWcr6ykl7WFbZd0TMae8xovwqcqbx6FM9l+7agOgUByhzdjfzZBPK2CPufldTOMxbUivss//Sh9MFawmPRQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^2.4.2", "commander": "^3.0.2", @@ -6540,6 +6958,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -6552,6 +6971,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -6566,6 +6986,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -6574,19 +6995,22 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wait-port/node_modules/commander": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wait-port/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -6596,6 +7020,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -6605,6 +7030,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -6617,6 +7043,7 @@ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } @@ -6650,6 +7077,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -6664,13 +7092,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6686,13 +7116,15 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -6706,6 +7138,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -6714,13 +7147,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -6739,6 +7174,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -6748,6 +7184,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -6759,6 +7196,7 @@ "version": "3.24.4", "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -6767,6 +7205,7 @@ "version": "3.24.5", "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", + "license": "ISC", "peerDependencies": { "zod": "^3.24.1" } From 4aa6a31eab241683a1853b97e8978eda361f0338 Mon Sep 17 00:00:00 2001 From: Karthik KK Date: Tue, 13 May 2025 09:14:27 +1200 Subject: [PATCH 07/14] Fixed code by removing the SSE Support --- README.md | 33 +--------------- docs/docs/intro.mdx | 28 ------------- docs/docs/playwright-web/Supported-Tools.mdx | 8 +--- docs/docs/release.mdx | 8 +--- src/index.ts | 41 +++++++------------- src/requestHandler.ts | 19 --------- src/sseServer.ts | 41 -------------------- src/tools/browser/console.ts | 6 --- 8 files changed, 16 insertions(+), 168 deletions(-) delete mode 100644 src/sseServer.ts diff --git a/README.md b/README.md index e5571ae..319616d 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Using Smithery To install Playwright MCP for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@executeautomation/playwright-mcp-server): ```bash -npx -y @smithery/cli install @executeautomation/playwright-mcp-server --client claude +npx @smithery/cli install @executeautomation/playwright-mcp-server --client claude ``` #### Installation in VS Code @@ -88,36 +88,6 @@ Here's the Claude Desktop configuration to use the Playwright server: } ``` -## SSE (Server-Sent Events) Support - -Playwright MCP Server now supports real-time event streaming via Server-Sent Events (SSE). - -### How to Use - -- The server exposes an SSE endpoint at `http://localhost:3001/events`. -- You can connect to this endpoint using any SSE-compatible client (such as EventSource in the browser or curl). -- Events are sent in real-time as they occur (e.g., new console logs, screenshots, etc.). - -### Example (JavaScript) -```js -const evtSource = new EventSource('http://localhost:3001/events'); -evtSource.addEventListener('console_log_entry', (event) => { - const data = JSON.parse(event.data); - console.log('Console log:', data.log); -}); -evtSource.addEventListener('screenshot', (event) => { - const data = JSON.parse(event.data); - console.log('Screenshot event:', data); -}); -``` - -### Available Events -- `console_log_entry`: Fired when a new console log is captured. -- `console_logs`: Fired when all logs are requested. -- `screenshot`: Fired when a screenshot is taken or requested. - -This allows you to build real-time dashboards, monitoring tools, or simply observe browser activity as it happens. - ## Testing This project uses Jest for testing. The tests are located in the `src/__tests__` directory. @@ -138,7 +108,6 @@ npm run test:custom # Run tests with custom script (same as node run-tests.cj The test coverage report will be generated in the `coverage` directory. - ### Running evals 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). diff --git a/docs/docs/intro.mdx b/docs/docs/intro.mdx index 866dffe..e2112d1 100644 --- a/docs/docs/intro.mdx +++ b/docs/docs/intro.mdx @@ -70,31 +70,3 @@ Modify your `claude-desktop-config.json` file as shown below This video should give you an high level overview of what Claude's MCP is and how helpful it will soon become for AI agents - -## 🟢 Real-Time Event Streaming (SSE) - -Playwright MCP Server now supports real-time event streaming via Server-Sent Events (SSE). - -- The server exposes an SSE endpoint at `http://localhost:3001/events`. -- You can connect to this endpoint using any SSE-compatible client (such as EventSource in the browser or curl). -- Events are sent in real-time as they occur (e.g., new console logs, screenshots, etc.). - -**Example (JavaScript):** -```js -const evtSource = new EventSource('http://localhost:3001/events'); -evtSource.addEventListener('console_log_entry', (event) => { - const data = JSON.parse(event.data); - console.log('Console log:', data.log); -}); -evtSource.addEventListener('screenshot', (event) => { - const data = JSON.parse(event.data); - console.log('Screenshot event:', data); -}); -``` - -**Available Events:** -- `console_log_entry`: Fired when a new console log is captured. -- `console_logs`: Fired when all logs are requested. -- `screenshot`: Fired when a screenshot is taken or requested. - -This allows you to build real-time dashboards, monitoring tools, or simply observe browser activity as it happens. diff --git a/docs/docs/playwright-web/Supported-Tools.mdx b/docs/docs/playwright-web/Supported-Tools.mdx index 468864d..155a743 100644 --- a/docs/docs/playwright-web/Supported-Tools.mdx +++ b/docs/docs/playwright-web/Supported-Tools.mdx @@ -4,13 +4,7 @@ sidebar_position: 1 import YouTubeVideoEmbed from '@site/src/components/HomepageFeatures/YouTubeVideoEmbed'; -# 🛠️ Supported Tools - -> **🟢 Real-Time Event Streaming (SSE) is now supported!** -> -> - Connect to `http://localhost:3001/events` for real-time updates (console logs, screenshots, etc.). -> - Use any SSE-compatible client (e.g., EventSource in the browser). -> - Events: `console_log_entry`, `console_logs`, `screenshot`. +# ��️ Supported Tools Playwright MCP for Browser automation has following key features - Console log monitoring diff --git a/docs/docs/release.mdx b/docs/docs/release.mdx index 3d6679b..c291298 100644 --- a/docs/docs/release.mdx +++ b/docs/docs/release.mdx @@ -6,12 +6,6 @@ import YouTubeVideoEmbed from '@site/src/components/HomepageFeatures/YouTubeVide # Release Notes ## Version 1.0.4 -- **SSE (Server-Sent Events) Support**: Added real-time event streaming via SSE - - New SSE server runs on `http://localhost:3001/events` - - Real-time streaming of browser console logs and screenshots to any SSE-compatible client - - Example usage and event types (`console_log_entry`, `console_logs`, `screenshot`) documented in README and docs - - Enables building real-time dashboards, monitoring tools, or observing browser activity as it happens - - **New Tool: `playwright_iframe_fill`** - Fill input fields inside iframes using CSS selectors @@ -22,7 +16,7 @@ import YouTubeVideoEmbed from '@site/src/components/HomepageFeatures/YouTubeVide - Captures uncaught exceptions and unhandled Promise rejections in browser logs for better debugging - **Documentation Updates** - - Added/updated documentation for new tools, SSE support, and improved installation/configuration instructions + - Added/updated documentation for new tools and improved installation/configuration instructions - **Test Coverage** - Added and updated tests for new tools and features diff --git a/src/index.ts b/src/index.ts index a47a769..247dd57 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,18 +4,9 @@ import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { createToolDefinitions } from "./tools.js"; import { setupRequestHandlers } from "./requestHandler.js"; -import { SseServer } from './sseServer.js'; -import http from 'http'; - -export const SSE_SERVER_SYMBOL = Symbol('sseServer'); - -// Custom interface to allow symbol property -interface McpServerWithSSE extends Server { - [key: symbol]: any; -} async function runServer() { - const server: McpServerWithSSE = new Server( + const server = new Server( { name: "executeautomation/playwright-mcp-server", version: "1.0.4", @@ -26,7 +17,7 @@ async function runServer() { tools: {}, }, } - ) as McpServerWithSSE; + ); // Create tool definitions const TOOLS = createToolDefinitions(); @@ -34,25 +25,19 @@ async function runServer() { // Setup request handlers setupRequestHandlers(server, TOOLS); - // Start HTTP server for SSE only if not in test environment - let sseServer; - if (process.env.NODE_ENV !== 'test') { - let httpServer; - try { - httpServer = http.createServer(); - sseServer = new SseServer(); - sseServer.attachToServer(httpServer); - httpServer.listen(3001, () => { - console.log('SSE server listening on http://localhost:3001/events'); - }); - } catch (err) { - console.error('Failed to initialize SSE server:', err); - } - if (sseServer) { - server[SSE_SERVER_SYMBOL] = sseServer; - } + // Graceful shutdown logic + function shutdown() { + console.log('Shutdown signal received'); + process.exit(0); } + process.on('SIGINT', shutdown); + process.on('SIGTERM', shutdown); + process.on('exit', shutdown); + process.on('uncaughtException', (err) => { + console.error('Uncaught Exception:', err); + }); + // Create transport and connect const transport = new StdioServerTransport(); await server.connect(transport); diff --git a/src/requestHandler.ts b/src/requestHandler.ts index eb41d26..a5de9fd 100644 --- a/src/requestHandler.ts +++ b/src/requestHandler.ts @@ -7,7 +7,6 @@ import { Tool } from "@modelcontextprotocol/sdk/types.js"; import { handleToolCall, getConsoleLogs, getScreenshots } from "./toolHandler.js"; -import { SSE_SERVER_SYMBOL } from './index.js'; export function setupRequestHandlers(server: Server, tools: Tool[]) { // List resources handler @@ -32,15 +31,6 @@ export function setupRequestHandlers(server: Server, tools: Tool[]) { if (uri === "console://logs") { const logs = getConsoleLogs().join("\n"); - // Broadcast logs to SSE clients - try { - const sseServer = (server as any)[SSE_SERVER_SYMBOL]; - if (sseServer) { - sseServer.broadcast('console_logs', { logs }); - } - } catch (err) { - console.error('Failed to broadcast console logs via SSE:', err); - } return { contents: [{ uri, @@ -54,15 +44,6 @@ export function setupRequestHandlers(server: Server, tools: Tool[]) { const name = uri.split("://")[1]; const screenshot = getScreenshots().get(name); if (screenshot) { - // Broadcast screenshot event to SSE clients - try { - const sseServer = (server as any)[SSE_SERVER_SYMBOL]; - if (sseServer) { - sseServer.broadcast('screenshot', { name, screenshot }); - } - } catch (err) { - console.error('Failed to broadcast screenshot via SSE:', err); - } return { contents: [{ uri, diff --git a/src/sseServer.ts b/src/sseServer.ts deleted file mode 100644 index e3f4982..0000000 --- a/src/sseServer.ts +++ /dev/null @@ -1,41 +0,0 @@ -import http from 'http'; -import { EventEmitter } from 'events'; - -export class SseServer extends EventEmitter { - private clients: Set = new Set(); - - attachToServer(server: http.Server) { - server.on('request', (req, res) => { - if (req.url === '/events' && req.method === 'GET') { - res.writeHead(200, { - 'Content-Type': 'text/event-stream', - 'Cache-Control': 'no-cache', - 'Connection': 'keep-alive', - 'Access-Control-Allow-Origin': '*', - }); - try { - res.write('\n'); - this.clients.add(res); - } catch (err) { - console.error('Failed to add SSE client or write initial response:', err); - } - req.on('close', () => { - this.clients.delete(res); - }); - } - }); - } - - broadcast(event: string, data: any) { - const payload = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`; - for (const client of this.clients) { - try { - client.write(payload); - } catch (err) { - // Remove client if write fails (e.g., client disconnected) - this.clients.delete(client); - console.error('Failed to write SSE event to client, removing client:', err); - } - } - } -} \ No newline at end of file diff --git a/src/tools/browser/console.ts b/src/tools/browser/console.ts index 70b4cb4..bf392f4 100644 --- a/src/tools/browser/console.ts +++ b/src/tools/browser/console.ts @@ -1,6 +1,5 @@ import { BrowserToolBase } from './base.js'; import { ToolContext, ToolResponse, createSuccessResponse } from '../common/types.js'; -import { SSE_SERVER_SYMBOL } from '../../index.js'; /** * Tool for retrieving and filtering console logs from the browser @@ -16,11 +15,6 @@ export class ConsoleLogsTool extends BrowserToolBase { registerConsoleMessage(type: string, text: string): void { const logEntry = `[${type}] ${text}`; this.consoleLogs.push(logEntry); - // Broadcast new log entry to SSE clients - const sseServer = (this.server as any)[SSE_SERVER_SYMBOL]; - if (sseServer) { - sseServer.broadcast('console_log_entry', { log: logEntry }); - } } /** From c76f14864fc9c81c5996d97686b3534472f0ecc8 Mon Sep 17 00:00:00 2001 From: Karthik KK Date: Tue, 13 May 2025 09:16:35 +1200 Subject: [PATCH 08/14] chore: Bump version to 1.0.5 and remove SSE support, including related code and documentation cleanup --- docs/docs/release.mdx | 5 +++++ package.json | 2 +- src/index.ts | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/docs/release.mdx b/docs/docs/release.mdx index c291298..bca01ae 100644 --- a/docs/docs/release.mdx +++ b/docs/docs/release.mdx @@ -5,6 +5,11 @@ import YouTubeVideoEmbed from '@site/src/components/HomepageFeatures/YouTubeVide # Release Notes +## Version 1.0.5 +- **Removed SSE (Server-Sent Events) Support**: All SSE-related code, endpoints, and documentation have been fully removed. The server now only supports STDIO transport for communication with clients. +- **Codebase Cleanup**: Removed all references to SseServer, /events endpoint, and related event streaming features from the code and documentation. +- **Version bump**: Incremented version to 1.0.5. + ## Version 1.0.4 - **New Tool: `playwright_iframe_fill`** - Fill input fields inside iframes using CSS selectors diff --git a/package.json b/package.json index 5675d3b..c6d6b7c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@executeautomation/playwright-mcp-server", - "version": "1.0.4", + "version": "1.0.5", "description": "Model Context Protocol servers for Playwright", "license": "MIT", "author": "ExecuteAutomation, Ltd (https://executeautomation.com)", diff --git a/src/index.ts b/src/index.ts index 247dd57..a14e987 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,7 +9,7 @@ async function runServer() { const server = new Server( { name: "executeautomation/playwright-mcp-server", - version: "1.0.4", + version: "1.0.5", }, { capabilities: { From 2dea084030530150f5b8cc9e3274957677cb647b Mon Sep 17 00:00:00 2001 From: Lawrence Sinclair Date: Wed, 14 May 2025 13:43:38 +0700 Subject: [PATCH 09/14] Add MseeP.ai badge to README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 319616d..4b59699 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[![MseeP.ai Security Assessment Badge](https://mseep.net/pr/executeautomation-mcp-playwright-badge.png)](https://mseep.ai/app/executeautomation-mcp-playwright) +
Special thanks to:
From 4a722fed45e83b5e3527941aa730dd4d56bc7d97 Mon Sep 17 00:00:00 2001 From: ExecuteAutomation Date: Wed, 21 May 2025 15:08:55 +1200 Subject: [PATCH 10/14] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4b59699..e478354 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ +
[![MseeP.ai Security Assessment Badge](https://mseep.net/pr/executeautomation-mcp-playwright-badge.png)](https://mseep.ai/app/executeautomation-mcp-playwright) - +
Special thanks to:
@@ -120,4 +121,4 @@ OPENAI_API_KEY=your-key npx mcp-eval src/evals/evals.ts src/tools/codegen/index ## Star History -[![Star History Chart](https://api.star-history.com/svg?repos=executeautomation/mcp-playwright&type=Date)](https://star-history.com/#executeautomation/mcp-playwright&Date) \ No newline at end of file +[![Star History Chart](https://api.star-history.com/svg?repos=executeautomation/mcp-playwright&type=Date)](https://star-history.com/#executeautomation/mcp-playwright&Date) From 7338fca688e0f713771dbc0703804e0f855c677d Mon Sep 17 00:00:00 2001 From: ExecuteAutomation Date: Wed, 21 May 2025 15:10:08 +1200 Subject: [PATCH 11/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e478354..49091d4 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@
-[![MseeP.ai Security Assessment Badge](https://mseep.net/pr/executeautomation-mcp-playwright-badge.png)](https://mseep.ai/app/executeautomation-mcp-playwright) +[MseeP.ai Security Assessment Badge](https://mseep.net/pr/executeautomation-mcp-playwright-badge.png)](https://mseep.ai/app/executeautomation-mcp-playwright)
Special thanks to: From f8872cf76ceb4e3b743d74397e578796c7a13b9d Mon Sep 17 00:00:00 2001 From: ExecuteAutomation Date: Wed, 21 May 2025 15:17:11 +1200 Subject: [PATCH 12/14] Update README.md --- README.md | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 49091d4..c93d843 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,22 @@
-[MseeP.ai Security Assessment Badge](https://mseep.net/pr/executeautomation-mcp-playwright-badge.png)](https://mseep.ai/app/executeautomation-mcp-playwright) -
-
- Special thanks to: -
-
- - Warp sponsorship - - -### [Warp, the AI terminal for developers](https://www.warp.dev/?utm_source=github&utm_medium=referral&utm_campaign=mcp-playwright) -[Available for MacOS, Linux, & Windows](https://www.warp.dev/?utm_source=github&utm_medium=referral&utm_campaign=mcp-playwright)
- + + + + + + + + + +
+ + MseeP.ai Security Assessment Badge + + + + Warp sponsorship + +
MseeP.ai Security AssessmentSpecial thanks to Warp, the AI terminal for developers

From f2d429a03c4f7769245785908335888eeb252a08 Mon Sep 17 00:00:00 2001 From: Gaurav Khurana Date: Sun, 8 Jun 2025 09:55:06 +0530 Subject: [PATCH 13/14] Updated installation instructions --- docs/docs/img/mcp-server-running.png | Bin 0 -> 95449 bytes docs/docs/local-setup/Installation.mdx | 8 ++++++++ 2 files changed, 8 insertions(+) create mode 100644 docs/docs/img/mcp-server-running.png diff --git a/docs/docs/img/mcp-server-running.png b/docs/docs/img/mcp-server-running.png new file mode 100644 index 0000000000000000000000000000000000000000..7152ca922736d65e5ffc422d23b521e80cdf5808 GIT binary patch literal 95449 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 Date: Wed, 18 Jun 2025 11:23:24 +1000 Subject: [PATCH 14/14] Add the chrome executable path to use installed browsers. Only doing the change if people want to use installed browsers. --- src/toolHandler.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/toolHandler.ts b/src/toolHandler.ts index 9a4b516..ecc450d 100644 --- a/src/toolHandler.ts +++ b/src/toolHandler.ts @@ -197,8 +197,10 @@ async function ensureBrowser(browserSettings?: BrowserSettings) { browserInstance = chromium; break; } + // Read the Chrome executable path from the environment variable + const executablePath = process.env.PLAYWRIGHT_CHROME_EXECUTABLE_PATH || undefined; // Fallback to default if not set - browser = await browserInstance.launch({ headless }); + browser = await browserInstance.launch({ headless, executablePath }); currentBrowserType = browserType; // Add cleanup logic when browser is disconnected @@ -620,4 +622,4 @@ export function getScreenshots(): Map { return screenshotTool?.getScreenshots() ?? new Map(); } -export { registerConsoleMessage }; \ No newline at end of file +export { registerConsoleMessage };