diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..91a839b5e --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +package-lock.json linguist-generated diff --git a/.github/workflows/actions/test-and-build/action.yaml b/.github/workflows/actions/test-and-build/action.yaml index ce6d4bc08..e3d6b39e3 100644 --- a/.github/workflows/actions/test-and-build/action.yaml +++ b/.github/workflows/actions/test-and-build/action.yaml @@ -54,10 +54,6 @@ runs: fi shell: bash - - name: Install npm - run: npm install -g npm@8.19.4 - shell: bash - - name: Install Dependencies shell: bash run: | diff --git a/.github/workflows/draft-release.yaml b/.github/workflows/draft-release.yaml index c7f886ef6..70c290198 100644 --- a/.github/workflows/draft-release.yaml +++ b/.github/workflows/draft-release.yaml @@ -40,7 +40,8 @@ jobs: - name: Setup Node.js Environment uses: actions/setup-node@v4 with: - node-version: 20.16.0 + node-version: 22.15.1 + cache: npm - name: Determine Next Version shell: bash diff --git a/.github/workflows/publish-release.yaml b/.github/workflows/publish-release.yaml index 323300232..a8277ed6e 100644 --- a/.github/workflows/publish-release.yaml +++ b/.github/workflows/publish-release.yaml @@ -15,10 +15,8 @@ jobs: - name: Setup Node.js Environment uses: actions/setup-node@v4 with: - node-version: 20.16.0 - - - name: Install npm - run: npm install -g npm@8.19.4 + node-version: 22.15.1 + cache: npm - name: Run node-gyp bug workaround script run: | diff --git a/.github/workflows/test-and-build-from-fork.yaml b/.github/workflows/test-and-build-from-fork.yaml index 92c3eb2df..91bb7345b 100644 --- a/.github/workflows/test-and-build-from-fork.yaml +++ b/.github/workflows/test-and-build-from-fork.yaml @@ -30,7 +30,8 @@ jobs: - name: Setup Node.js Environment uses: actions/setup-node@v4 with: - node-version: 20.16.0 + node-version: 22.15.1 + cache: npm - name: Install Dependencies run: npm ci --omit=optional diff --git a/.github/workflows/test-and-build.yaml b/.github/workflows/test-and-build.yaml index 1fa310259..5399eef5f 100644 --- a/.github/workflows/test-and-build.yaml +++ b/.github/workflows/test-and-build.yaml @@ -34,7 +34,8 @@ jobs: - name: Setup Node.js Environment uses: actions/setup-node@v4 with: - node-version: 20.16.0 + node-version: 22.15.1 + cache: npm - name: Run tests and build uses: ./.github/workflows/actions/test-and-build diff --git a/package-lock.json b/package-lock.json index fa9ca6e42..34caaf974 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,14 +13,14 @@ "@babel/parser": "^7.25.8", "@babel/traverse": "^7.25.7", "@mongodb-js/compass-components": "^1.38.1", - "@mongodb-js/connection-form": "1.52.3", - "@mongodb-js/connection-info": "^0.15.0", - "@mongodb-js/device-id": "^0.3.0", - "@mongodb-js/mongodb-constants": "^0.11.1", + "@mongodb-js/connection-form": "^1.52.3", + "@mongodb-js/connection-info": "^0.17.1", + "@mongodb-js/device-id": "^0.3.1", + "@mongodb-js/mongodb-constants": "^0.14.0", "@mongosh/browser-runtime-electron": "^3.18.0", "@mongosh/i18n": "^2.13.1", "@mongosh/service-provider-node-driver": "^3.12.0", - "@mongosh/shell-api": "^3.13.0", + "@mongosh/shell-api": "^3.18.0", "@segment/analytics-node": "^1.3.0", "bson": "^6.10.4", "debug": "^4.3.7", @@ -28,13 +28,14 @@ "ejson-shell-parser": "^2.0.1", "lodash": "^4.17.21", "micromatch": "^4.0.8", - "mongodb": "^6.18.0", + "mongodb": "^6.19.0", "mongodb-build-info": "^1.7.2", - "mongodb-cloud-info": "^2.2.0", + "mongodb-cloud-info": "^2.2.2", "mongodb-connection-string-url": "^3.0.2", - "mongodb-data-service": "^22.25.5", + "mongodb-data-service": "^22.30.1", "mongodb-log-writer": "^2.4.1", - "mongodb-query-parser": "^4.4.0", + "mongodb-mcp-server": "^1.0.0", + "mongodb-query-parser": "^4.4.2", "mongodb-schema": "^12.6.2", "node-machine-id": "1.1.12", "numeral": "^2.0.6", @@ -50,30 +51,30 @@ "devDependencies": { "@babel/preset-typescript": "^7.25.7", "@babel/types": "^7.25.8", - "@mongodb-js/oidc-mock-provider": "^0.11.0", - "@mongodb-js/oidc-plugin": "^1.1.8", + "@mongodb-js/oidc-mock-provider": "^0.11.3", + "@mongodb-js/oidc-plugin": "^2.0.3", "@mongodb-js/prettier-config-devtools": "^1.0.2", "@mongodb-js/sbom-tools": "^0.8.1", "@mongodb-js/signing-utils": "^0.4.0", - "@mongosh/service-provider-core": "^3.3.3", + "@mongosh/service-provider-core": "^3.3.5", "@testing-library/react": "^14.3.1", "@testing-library/user-event": "^14.5.2", "@types/babel__traverse": "^7.20.6", "@types/chai": "^4.3.20", + "@types/chai-as-promised": "^8.0.2", "@types/debug": "^4.1.12", "@types/glob": "^7.2.0", "@types/lodash": "^4.17.14", "@types/micromatch": "^4.0.9", - "@types/mkdirp": "^2.0.0", "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", + "@types/node": "^20.19.0", "@types/prettier": "^2.7.3", "@types/react": "^17.0.83", "@types/react-dom": "^17.0.25", "@types/sinon": "^9.0.11", "@types/sinon-chai": "^3.2.12", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.94.0", + "@types/vscode": "^1.101.1", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "@vscode/test-electron": "^2.4.1", @@ -96,9 +97,9 @@ "mocha": "^10.7.3", "mocha-junit-reporter": "^2.2.1", "mocha-multi": "^1.1.7", - "mongodb-client-encryption": "^6.4.0", - "mongodb-rag-core": "^0.7.0", - "mongodb-runner": "^5.9.0", + "mongodb-client-encryption": "^6.5.0", + "mongodb-rag-core": "^0.7.1", + "mongodb-runner": "^5.9.2", "node-fetch": "^2.7.0", "node-loader": "^0.6.0", "npm-run-all": "^4.1.5", @@ -115,7 +116,7 @@ "terser-webpack-plugin": "^5.3.10", "ts-loader": "^9.5.1", "ts-node": "^10.9.2", - "typescript": "^4.9.5", + "typescript": "^5.9.2", "webfont": "^11.2.26", "webpack": "^5.95.0", "webpack-bundle-analyzer": "^4.10.2", @@ -124,325 +125,94 @@ "xvfb-maybe": "^0.2.1" }, "engines": { - "node": ">=20.9.0", + "node": "^20.19.0 || ^22.12.0 || >= 23.0.0", "npm": ">=10.1.0", - "vscode": "^1.94.2" + "vscode": "^1.101.1" } }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/@ai-sdk/azure": { - "version": "1.3.23", - "resolved": "https://registry.npmjs.org/@ai-sdk/azure/-/azure-1.3.23.tgz", - "integrity": "sha512-vpsaPtU24RBVk/IMM5UylR/N4RtAuL2NZLWc7LJ3tvMTHu6pI46a7w+1qIwR3F6yO9ehWR8qvfLaBefJNFxaVw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/openai": "1.3.22", - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "zod": "^3.0.0" - } - }, - "node_modules/@ai-sdk/openai": { - "version": "1.3.22", - "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-1.3.22.tgz", - "integrity": "sha512-QwA+2EkG0QyjVR+7h6FE7iOu2ivNqAVMm9UJZkVxxTk5OIq5fFJDTEI/zICEMuHImTTXR2JjsL6EirJ28Jc4cw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8" - }, - "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==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "json-schema": "^0.4.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@ai-sdk/provider-utils": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-2.2.8.tgz", - "integrity": "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==", - "dev": true, - "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.12", - "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-1.2.12.tgz", - "integrity": "sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider-utils": "2.2.8", - "@ai-sdk/ui-utils": "1.2.11", - "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/solid": { - "version": "0.0.54", - "resolved": "https://registry.npmjs.org/@ai-sdk/solid/-/solid-0.0.54.tgz", - "integrity": "sha512-96KWTVK+opdFeRubqrgaJXoNiDP89gNxFRWUp0PJOotZW816AbhUf4EnDjBjXTLjXL1n0h8tGSE9sZsRkj9wQQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider-utils": "1.0.22", - "@ai-sdk/ui-utils": "0.0.50" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "solid-js": "^1.7.7" - }, - "peerDependenciesMeta": { - "solid-js": { - "optional": true - } - } - }, - "node_modules/@ai-sdk/solid/node_modules/@ai-sdk/provider": { - "version": "0.0.26", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.26.tgz", - "integrity": "sha512-dQkfBDs2lTYpKM8389oopPdQgIU007GQyCbuPPrV+K6MtSII3HBfE0stUIMXUb44L+LK1t6GXPP7wjSzjO6uKg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "json-schema": "^0.4.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@ai-sdk/solid/node_modules/@ai-sdk/provider-utils": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-1.0.22.tgz", - "integrity": "sha512-YHK2rpj++wnLVc9vPGzGFP3Pjeld2MwhKinetA0zKXOoHAT/Jit5O8kZsxcSlJPu9wvcGT1UGZEjZrtO7PfFOQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider": "0.0.26", - "eventsource-parser": "^1.1.2", - "nanoid": "^3.3.7", - "secure-json-parse": "^2.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "zod": "^3.0.0" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } - } - }, - "node_modules/@ai-sdk/solid/node_modules/@ai-sdk/ui-utils": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-0.0.50.tgz", - "integrity": "sha512-Z5QYJVW+5XpSaJ4jYCCAVG7zIAuKOOdikhgpksneNmKvx61ACFaf98pmOd+xnjahl0pIlc/QIe6O4yVaJ1sEaw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider": "0.0.26", - "@ai-sdk/provider-utils": "1.0.22", - "json-schema": "^0.4.0", - "secure-json-parse": "^2.7.0", - "zod-to-json-schema": "^3.23.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "zod": "^3.0.0" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } - } - }, - "node_modules/@ai-sdk/svelte": { - "version": "0.0.57", - "resolved": "https://registry.npmjs.org/@ai-sdk/svelte/-/svelte-0.0.57.tgz", - "integrity": "sha512-SyF9ItIR9ALP9yDNAD+2/5Vl1IT6kchgyDH8xkmhysfJI6WrvJbtO1wdQ0nylvPLcsPoYu+cAlz1krU4lFHcYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider-utils": "1.0.22", - "@ai-sdk/ui-utils": "0.0.50", - "sswr": "^2.1.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "svelte": { - "optional": true - } - } - }, - "node_modules/@ai-sdk/svelte/node_modules/@ai-sdk/provider": { - "version": "0.0.26", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.26.tgz", - "integrity": "sha512-dQkfBDs2lTYpKM8389oopPdQgIU007GQyCbuPPrV+K6MtSII3HBfE0stUIMXUb44L+LK1t6GXPP7wjSzjO6uKg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "json-schema": "^0.4.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@ai-sdk/svelte/node_modules/@ai-sdk/provider-utils": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-1.0.22.tgz", - "integrity": "sha512-YHK2rpj++wnLVc9vPGzGFP3Pjeld2MwhKinetA0zKXOoHAT/Jit5O8kZsxcSlJPu9wvcGT1UGZEjZrtO7PfFOQ==", + "version": "2.0.0-beta.13", + "resolved": "https://registry.npmjs.org/@ai-sdk/azure/-/azure-2.0.0-beta.13.tgz", + "integrity": "sha512-doae5dg+U8e+LBvGlY4HI5W5hyvGCynOKKZ4ybMtgRp2RwjTxc58QBJeznM/kKSagYEnjikMXTM0qo0zqCeUYA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "0.0.26", - "eventsource-parser": "^1.1.2", - "nanoid": "^3.3.7", - "secure-json-parse": "^2.7.0" + "@ai-sdk/openai": "2.0.0-beta.13", + "@ai-sdk/provider": "2.0.0-beta.1", + "@ai-sdk/provider-utils": "3.0.0-beta.7" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } + "zod": "^3.25.76 || ^4" } }, - "node_modules/@ai-sdk/svelte/node_modules/@ai-sdk/ui-utils": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-0.0.50.tgz", - "integrity": "sha512-Z5QYJVW+5XpSaJ4jYCCAVG7zIAuKOOdikhgpksneNmKvx61ACFaf98pmOd+xnjahl0pIlc/QIe6O4yVaJ1sEaw==", + "node_modules/@ai-sdk/gateway": { + "version": "1.0.0-beta.14", + "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-1.0.0-beta.14.tgz", + "integrity": "sha512-jsOZoz4hd1vSQ6PBftdQ/j3hPC4Fxf7tY2slCgdpMEevrqFVmRBp6W5xEELDa2wXuPQ/3QxtrQhQU7Qxj42p2Q==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "0.0.26", - "@ai-sdk/provider-utils": "1.0.22", - "json-schema": "^0.4.0", - "secure-json-parse": "^2.7.0", - "zod-to-json-schema": "^3.23.3" + "@ai-sdk/provider": "2.0.0-beta.1", + "@ai-sdk/provider-utils": "3.0.0-beta.6" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } + "zod": "^3.25.76 || ^4" } }, - "node_modules/@ai-sdk/ui-utils": { - "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==", + "node_modules/@ai-sdk/gateway/node_modules/@ai-sdk/provider-utils": { + "version": "3.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.0-beta.6.tgz", + "integrity": "sha512-r8Nswwko+7nuLnLxprPgAxjGcpjq5fnFmfFwtkz4k9KfF1Z6Nkwvl8+Ee9BULBWXOqbtJGh9iCiJaTPBnhZrqw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8", + "@ai-sdk/provider": "2.0.0-beta.1", + "@standard-schema/spec": "^1.0.0", + "eventsource-parser": "^3.0.3", "zod-to-json-schema": "^3.24.1" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.23.8" + "zod": "^3.25.76 || ^4" } }, - "node_modules/@ai-sdk/vue": { - "version": "0.0.59", - "resolved": "https://registry.npmjs.org/@ai-sdk/vue/-/vue-0.0.59.tgz", - "integrity": "sha512-+ofYlnqdc8c4F6tM0IKF0+7NagZRAiqBJpGDJ+6EYhDW8FHLUP/JFBgu32SjxSxC6IKFZxEnl68ZoP/Z38EMlw==", + "node_modules/@ai-sdk/openai": { + "version": "2.0.0-beta.13", + "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-2.0.0-beta.13.tgz", + "integrity": "sha512-0hxkegu+qx+31OfNbn+pVjOlKkdVVqthRVZo8ccWklCnrEvd1DdLLJg9N/GDzTz/QSYnXhmIzXmT0J7u2SB5Aw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider-utils": "1.0.22", - "@ai-sdk/ui-utils": "0.0.50", - "swrv": "^1.0.4" + "@ai-sdk/provider": "2.0.0-beta.1", + "@ai-sdk/provider-utils": "3.0.0-beta.7" }, "engines": { "node": ">=18" }, "peerDependencies": { - "vue": "^3.3.4" - }, - "peerDependenciesMeta": { - "vue": { - "optional": true - } + "zod": "^3.25.76 || ^4" } }, - "node_modules/@ai-sdk/vue/node_modules/@ai-sdk/provider": { - "version": "0.0.26", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.26.tgz", - "integrity": "sha512-dQkfBDs2lTYpKM8389oopPdQgIU007GQyCbuPPrV+K6MtSII3HBfE0stUIMXUb44L+LK1t6GXPP7wjSzjO6uKg==", + "node_modules/@ai-sdk/provider": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-2.0.0-beta.1.tgz", + "integrity": "sha512-Z8SPncMtS3RsoXITmT7NVwrAq6M44dmw0DoUOYJqNNtCu8iMWuxB8Nxsoqpa0uEEy9R1V1ZThJAXTYgjTUxl3w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -452,53 +222,23 @@ "node": ">=18" } }, - "node_modules/@ai-sdk/vue/node_modules/@ai-sdk/provider-utils": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-1.0.22.tgz", - "integrity": "sha512-YHK2rpj++wnLVc9vPGzGFP3Pjeld2MwhKinetA0zKXOoHAT/Jit5O8kZsxcSlJPu9wvcGT1UGZEjZrtO7PfFOQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider": "0.0.26", - "eventsource-parser": "^1.1.2", - "nanoid": "^3.3.7", - "secure-json-parse": "^2.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "zod": "^3.0.0" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } - } - }, - "node_modules/@ai-sdk/vue/node_modules/@ai-sdk/ui-utils": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-0.0.50.tgz", - "integrity": "sha512-Z5QYJVW+5XpSaJ4jYCCAVG7zIAuKOOdikhgpksneNmKvx61ACFaf98pmOd+xnjahl0pIlc/QIe6O4yVaJ1sEaw==", + "node_modules/@ai-sdk/provider-utils": { + "version": "3.0.0-beta.7", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.0-beta.7.tgz", + "integrity": "sha512-w1nMJegq98/TpVOUlYPehX/tyTmyx4b0NCWH2VMHF6hpnJjGuS3UfzkEAKTkHCWYbNZY038b4IkGDx24C0xNOA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "0.0.26", - "@ai-sdk/provider-utils": "1.0.22", - "json-schema": "^0.4.0", - "secure-json-parse": "^2.7.0", - "zod-to-json-schema": "^3.23.3" + "@ai-sdk/provider": "2.0.0-beta.1", + "@standard-schema/spec": "^1.0.0", + "eventsource-parser": "^3.0.3", + "zod-to-json-schema": "^3.24.1" }, "engines": { "node": ">=18" }, "peerDependencies": { - "zod": "^3.0.0" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } + "zod": "^3.25.76 || ^4" } }, "node_modules/@ampproject/remapping": { @@ -4901,15 +4641,15 @@ } }, "node_modules/@braintrust/core": { - "version": "0.0.83", - "resolved": "https://registry.npmjs.org/@braintrust/core/-/core-0.0.83.tgz", - "integrity": "sha512-HDxtI3eYTJO7sN36jVrNDDPAaewldrnsfv99p5TKFrH5OUNX7x5tyqlPX+wQXyjn7PSvyNGpsqK8S/dnrqKocQ==", + "version": "0.0.93", + "resolved": "https://registry.npmjs.org/@braintrust/core/-/core-0.0.93.tgz", + "integrity": "sha512-KoQJwRFpxDMj4iyG3JlOHpOqMiG22A/ZJKW14U1JPzALJgggTefXfTrw91NHTHU+hGIeHozxiOnjFostiCyzCA==", "dev": true, "license": "MIT", "dependencies": { "@asteasolutions/zod-to-openapi": "^6.3.1", "uuid": "^9.0.1", - "zod": "^3.22.4" + "zod": "^3.25.34" } }, "node_modules/@braintrust/core/node_modules/uuid": { @@ -5231,9 +4971,9 @@ } }, "node_modules/@electron/remote": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.1.2.tgz", - "integrity": "sha512-EPwNx+nhdrTBxyCqXt/pftoQg/ybtWDW3DUWHafejvnB1ZGGfMpv6e15D8KeempocjXe78T7WreyGGb3mlZxdA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-2.1.3.tgz", + "integrity": "sha512-XlpxC8S4ttj/v2d+PKp9na/3Ev8bV7YWNL7Cw5b9MAWgTphEml7iYgbc7V0r9D6yDOfOkj06bchZgOZdlWJGNA==", "license": "MIT", "peerDependencies": { "electron": ">= 13.0.0" @@ -5354,9 +5094,9 @@ "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.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", "cpu": [ "ppc64" ], @@ -5371,9 +5111,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", "cpu": [ "arm" ], @@ -5388,9 +5128,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", "cpu": [ "arm64" ], @@ -5405,9 +5145,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", "cpu": [ "x64" ], @@ -5422,9 +5162,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", "cpu": [ "arm64" ], @@ -5439,9 +5179,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", "cpu": [ "x64" ], @@ -5456,9 +5196,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", "cpu": [ "arm64" ], @@ -5473,9 +5213,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", "cpu": [ "x64" ], @@ -5490,9 +5230,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", "cpu": [ "arm" ], @@ -5507,9 +5247,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", "cpu": [ "arm64" ], @@ -5524,9 +5264,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", "cpu": [ "ia32" ], @@ -5541,9 +5281,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", "cpu": [ "loong64" ], @@ -5558,9 +5298,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", "cpu": [ "mips64el" ], @@ -5575,9 +5315,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", "cpu": [ "ppc64" ], @@ -5592,9 +5332,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", "cpu": [ "riscv64" ], @@ -5609,9 +5349,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", "cpu": [ "s390x" ], @@ -5626,9 +5366,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", "cpu": [ "x64" ], @@ -5643,9 +5383,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", "cpu": [ "arm64" ], @@ -5660,9 +5400,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", "cpu": [ "x64" ], @@ -5677,9 +5417,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", "cpu": [ "arm64" ], @@ -5694,9 +5434,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", "cpu": [ "x64" ], @@ -5710,10 +5450,27 @@ "node": ">=18" } }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "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==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", "cpu": [ "x64" ], @@ -5728,9 +5485,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", "cpu": [ "arm64" ], @@ -5745,9 +5502,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", "cpu": [ "ia32" ], @@ -5762,9 +5519,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.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", "cpu": [ "x64" ], @@ -5779,16 +5536,19 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } @@ -5797,7 +5557,6 @@ "version": "4.10.1", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", - "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -5806,7 +5565,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -5828,14 +5586,12 @@ "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -5850,7 +5606,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -5862,7 +5617,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -5874,7 +5628,6 @@ "version": "8.57.1", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -5937,7 +5690,6 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", - "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", @@ -5951,7 +5703,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, "engines": { "node": ">=12.22" }, @@ -5964,8 +5715,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true + "deprecated": "Use @eslint/object-schema instead" }, "node_modules/@ibm-cloud/watsonx-ai": { "version": "1.4.0", @@ -7419,30 +7169,190 @@ "node": ">=8" } }, - "node_modules/@marijn/find-cluster-break": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", - "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", - "license": "MIT" - }, - "node_modules/@mixmark-io/domino": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz", - "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==", + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", "dev": true, - "license": "BSD-2-Clause" + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } }, - "node_modules/@mongodb-js/compass-components": { - "version": "1.38.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/compass-components/-/compass-components-1.38.1.tgz", - "integrity": "sha512-NaZQ0upkuYeJQVyGLdzM5Pq8rstWw/KozVTP7mvgEnxcosVWvn+X2YmdaZQtUlOG8hHJM/WFx40tr+SFudtZFA==", - "license": "SSPL", + "node_modules/@mapbox/node-pre-gyp/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@dnd-kit/core": "^6.0.7", - "@dnd-kit/sortable": "^7.0.2", - "@dnd-kit/utilities": "^3.2.1", - "@leafygreen-ui/badge": "^9.0.2", - "@leafygreen-ui/banner": "^9.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": { + "version": "3.1.0", + "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", + "optional": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@marijn/find-cluster-break": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", + "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", + "license": "MIT" + }, + "node_modules/@mixmark-io/domino": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz", + "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.17.4.tgz", + "integrity": "sha512-zq24hfuAmmlNZvik0FLI58uE5sriN0WWsQzIlYnzSuKDAHFqJtBFrl/LfB1NLgJT5Y7dEBzaX4yAKqOPrcetaw==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.6", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "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/@mongodb-js/compass-app-registry": { + "version": "9.4.19", + "resolved": "https://registry.npmjs.org/@mongodb-js/compass-app-registry/-/compass-app-registry-9.4.19.tgz", + "integrity": "sha512-Od/ydzqSDX0IqklRjCav59rCM/eQOktrBfImTcoYzWg3QFBlEabFOBm/CfNJnRyQ0pBsajO7g3o8xu9pMFCkAg==", + "license": "SSPL", + "dependencies": { + "eventemitter3": "^4.0.0", + "react": "^17.0.2", + "react-redux": "^8.1.3", + "redux": "^4.2.1", + "reflux": "^0.4.1" + } + }, + "node_modules/@mongodb-js/compass-app-registry/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==", + "license": "MIT" + }, + "node_modules/@mongodb-js/compass-app-registry/node_modules/react-redux": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz", + "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4 || ^5.0.0-beta.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/@mongodb-js/compass-components": { + "version": "1.38.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/compass-components/-/compass-components-1.38.1.tgz", + "integrity": "sha512-NaZQ0upkuYeJQVyGLdzM5Pq8rstWw/KozVTP7mvgEnxcosVWvn+X2YmdaZQtUlOG8hHJM/WFx40tr+SFudtZFA==", + "license": "SSPL", + "dependencies": { + "@dnd-kit/core": "^6.0.7", + "@dnd-kit/sortable": "^7.0.2", + "@dnd-kit/utilities": "^3.2.1", + "@leafygreen-ui/badge": "^9.0.2", + "@leafygreen-ui/banner": "^9.0.2", "@leafygreen-ui/button": "^22.0.2", "@leafygreen-ui/card": "^12.0.2", "@leafygreen-ui/checkbox": "^14.0.2", @@ -7542,6 +7452,15 @@ "react": "^17.0.2" } }, + "node_modules/@mongodb-js/compass-editor/node_modules/@mongodb-js/mongodb-constants": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-constants/-/mongodb-constants-0.11.3.tgz", + "integrity": "sha512-mQpyqXc5Nn6HF9lUffsumR27Q3gCURC3cS7JxH7JdfrNhcwDH8IbobfnukDrb8L+fs3oABC3wgXudpWblF0haw==", + "license": "Apache-2.0", + "dependencies": { + "semver": "^7.7.1" + } + }, "node_modules/@mongodb-js/compass-editor/node_modules/prettier": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", @@ -7558,27 +7477,27 @@ } }, "node_modules/@mongodb-js/compass-logging": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@mongodb-js/compass-logging/-/compass-logging-1.7.2.tgz", - "integrity": "sha512-+J2ak3/yN2Qlkg/ENLF3MDTqxVvXt014x//UZmjUTIfrDR66b0GyjmFr8GLybn1VP9SE94WgxdNuQdjOQ+rpFw==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@mongodb-js/compass-logging/-/compass-logging-1.7.11.tgz", + "integrity": "sha512-1tLkHbcI+Gkm1UMpXLkXcG9vNLbIr91TeTP1578Oq/X/Qs5NN/V/MnmsPlsy2w1aW2OuegOYQTcQvQlExBFEUQ==", "license": "SSPL", "dependencies": { + "@mongodb-js/compass-app-registry": "^9.4.19", "debug": "^4.3.4", - "hadron-app-registry": "^9.4.11", - "hadron-ipc": "^3.5.2", + "hadron-ipc": "^3.5.10", "is-electron-renderer": "^2.0.1", "mongodb-log-writer": "^2.3.4", "react": "^17.0.2" } }, "node_modules/@mongodb-js/compass-utils": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@mongodb-js/compass-utils/-/compass-utils-0.9.2.tgz", - "integrity": "sha512-bvMRsE1eOYR3mHRCRos1IaHito0ZgmljWSUFhj/pSz1YdWHONheb+xRIZCzAgdjyF2Y9mXXZGOusFJAPD7jUVQ==", + "version": "0.9.10", + "resolved": "https://registry.npmjs.org/@mongodb-js/compass-utils/-/compass-utils-0.9.10.tgz", + "integrity": "sha512-Z4wL3Ngb6RvW35PsBoeXTkREofRIyufhOLQ2119gUC0hcFEcQyN46OmWxS0m3kR8dluSgOUwfgm2lJrCEkSMOA==", "license": "SSPL", "dependencies": { - "@electron/remote": "^2.1.2", - "electron": "^36.4.0" + "@electron/remote": "^2.1.3", + "electron": "^37.2.6" } }, "node_modules/@mongodb-js/connection-form": { @@ -7600,30 +7519,43 @@ "react": "^17.0.2" } }, - "node_modules/@mongodb-js/connection-info": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@mongodb-js/connection-info/-/connection-info-0.15.2.tgz", - "integrity": "sha512-0R/B9DOoICECowV0Had3xFNNRv1rUk685TCKR6ycrPQFQLvr9GBehGGqOkE3Vh55xLviZhyNMbE/mzXh2siCRA==", + "node_modules/@mongodb-js/connection-form/node_modules/@mongodb-js/connection-info": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/@mongodb-js/connection-info/-/connection-info-0.15.5.tgz", + "integrity": "sha512-m+L9Uq64lebPuHg64fWWrxS06+XA+p7VBZrSTGxhGpmUJWS11ZV2h8vJEl8Z6Co+PHX8a5Ca4moea5BRI5QvFg==", "license": "SSPL", "dependencies": { "lodash": "^4.17.21", "mongodb": "^6.16.0", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.28.2" + "mongodb-data-service": "^22.28.5" + } + }, + "node_modules/@mongodb-js/connection-info": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/connection-info/-/connection-info-0.17.1.tgz", + "integrity": "sha512-n/9Gw+hcz850SbpD7ZkZsVTRFbl6jQXeV4wkEiZ1SRvIV80m/kVRpU86iGt2UdGObGGZrB0TTdjuolZOCoRRWQ==", + "license": "SSPL", + "dependencies": { + "lodash": "^4.17.21", + "mongodb": "^6.17.0", + "mongodb-connection-string-url": "^3.0.1", + "mongodb-data-service": "^22.30.1" } }, "node_modules/@mongodb-js/device-id": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/device-id/-/device-id-0.3.0.tgz", - "integrity": "sha512-94qG0vcnQ943oEvxQFnecJ9/AaZS35rGGWdbplaGVds1CuSjVciPtuP6pKqGYX/KYsFq4Ghcdgc3zmCOx9c+eA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/device-id/-/device-id-0.3.1.tgz", + "integrity": "sha512-peIoQd8pwb5ksLuRREorBKA7swNTY+rFwUQypWR/oeDygQX4a8gnVjiQuVpbjAQtVFK7DotnBRysgXyz+h/sqg==", "license": "Apache-2.0" }, "node_modules/@mongodb-js/devtools-connect": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.9.1.tgz", - "integrity": "sha512-bJ7Khq9G9udvwUX2Bg6I0QHUHgB/BurO2BXqjF8yKSvjwawcVxy7ymDJ2aiXZVRUNUzNWCHHHbM8e3Cad6qPDA==", + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-3.9.3.tgz", + "integrity": "sha512-qlvjgzZeIJQgF+C2D+T5zOfsat62vp/hgoib+gJrU5JcThN8Hbq9ZQaE9f5/mUg3DKW1R9VvdrzcCn2NEZRvKA==", + "license": "Apache-2.0", "dependencies": { - "@mongodb-js/devtools-proxy-support": "^0.5.1", + "@mongodb-js/devtools-proxy-support": "^0.5.2", "@mongodb-js/oidc-http-server-pages": "1.1.6", "lodash.merge": "^4.6.2", "mongodb-connection-string-url": "^3.0.0", @@ -7641,61 +7573,10 @@ "mongodb-log-writer": "^2.4.1" } }, - "node_modules/@mongodb-js/devtools-connect/node_modules/@mongodb-js/devtools-proxy-support": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.5.1.tgz", - "integrity": "sha512-snIekrl3yj6fPnk6UfTIrBj8Wt43hvjqf7XhGaw1Qcn55BOClE7FgXcJjLXOIDsEMuzdGtLnJji+GbW2uD2ulg==", - "dependencies": { - "@mongodb-js/socksv5": "^0.0.10", - "agent-base": "^7.1.1", - "debug": "^4.4.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "lru-cache": "^11.0.0", - "node-fetch": "^3.3.2", - "pac-proxy-agent": "^7.0.2", - "socks-proxy-agent": "^8.0.4", - "ssh2": "^1.15.0", - "system-ca": "^2.0.1" - } - }, - "node_modules/@mongodb-js/devtools-connect/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@mongodb-js/devtools-connect/node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@mongodb-js/devtools-connect/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, "node_modules/@mongodb-js/devtools-proxy-support": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.4.4.tgz", - "integrity": "sha512-klRFd33bjUntPJuEY86NB0xYd64SaEYN0ABbE5fjU8+lO94ItvxTAWyHUmerPFAk8OLyz1MFyDoTXOvdOs9NAQ==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-proxy-support/-/devtools-proxy-support-0.5.2.tgz", + "integrity": "sha512-3zp/5Ui8ci8EK2pNZ+YKc73L8bPCIP0tkJNMCpsM3P9/I9L9woTpJtGGlS3GtwL1caOypeKc6pibDqQzkjQFCA==", "license": "Apache-2.0", "dependencies": { "@mongodb-js/socksv5": "^0.0.10", @@ -7715,14 +7596,16 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/@mongodb-js/devtools-proxy-support/node_modules/lru-cache": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", - "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "license": "ISC", "engines": { "node": "20 || >=22" } @@ -7731,6 +7614,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -7745,12 +7629,15 @@ } }, "node_modules/@mongodb-js/mongodb-constants": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-constants/-/mongodb-constants-0.11.1.tgz", - "integrity": "sha512-KEYAXGCJ6COKrmstaok0YteY56HAZLqYbJhLksusxH+xWZM8rrxCBTZvotC0N9L9RxFF+EJAavQWBes8nEWXRA==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-constants/-/mongodb-constants-0.14.0.tgz", + "integrity": "sha512-AuaKso7Bfq29dSXUZZMSDWR088Klz6SkL1mmzhjykA3VylfU3XwHhY1/AcPOsi0vSzn+2mQN87LKQKXp1plp2Q==", "license": "Apache-2.0", "dependencies": { "semver": "^7.7.1" + }, + "peerDependencies": { + "bson": "^6.10.3" } }, "node_modules/@mongodb-js/mongodb-downloader": { @@ -7782,28 +7669,15 @@ "typescript": "^5.0.4" } }, - "node_modules/@mongodb-js/mongodb-ts-autocomplete/node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/@mongodb-js/oidc-http-server-pages": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@mongodb-js/oidc-http-server-pages/-/oidc-http-server-pages-1.1.6.tgz", "integrity": "sha512-ZR/IZi/jI81TRas5X9kzN9t2GZI6u9JdawKctdCoXCrtyvQmRU6ktviCcvXGLwjcZnIWEWbZM7bkpnEdITYSCw==" }, "node_modules/@mongodb-js/oidc-mock-provider": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/oidc-mock-provider/-/oidc-mock-provider-0.11.0.tgz", - "integrity": "sha512-Onrqkde+sk14nnym6sIaWe7R6Sd8bauGM3njAiGCft52MDV+lPh0nYpjXJUX9pl6PqwlA96k7MRdh1znye23SA==", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@mongodb-js/oidc-mock-provider/-/oidc-mock-provider-0.11.3.tgz", + "integrity": "sha512-U1bCNOKAWQevd5vObXB58Dt+Fw1G21YZ31MmrRZSkfX3JlWT+YTTSot9lgzWs58PdFr3RhAa8VMrudThMDqbgA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7845,27 +7719,46 @@ "node": ">=12" } }, - "node_modules/@mongodb-js/oidc-mock-provider/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, + "node_modules/@mongodb-js/oidc-plugin": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@mongodb-js/oidc-plugin/-/oidc-plugin-2.0.3.tgz", + "integrity": "sha512-WlJYyM+p7tX8XkN2L9FbstsOOdIxwAYcwNgHx/XYVgy1gqo5mf4zjyWeohqB368WDStWb0CXUV2Bx1DM4EC/tQ==", + "license": "Apache-2.0", + "dependencies": { + "express": "^5.1.0", + "node-fetch": "^3.3.2", + "open": "^10.1.2", + "openid-client": "^6.6.3" + }, "engines": { - "node": ">=12" + "node": ">= 20.19.2" } }, - "node_modules/@mongodb-js/oidc-plugin": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@mongodb-js/oidc-plugin/-/oidc-plugin-1.1.8.tgz", - "integrity": "sha512-83H6SuUm4opxYqEc81AJBXEXlTMO9qnMGXidQFpB2Qwo4MmQtJN4UVm4notqwTBb/ysf410tspUGXy+QLu7xJQ==", - "license": "Apache-2.0", + "node_modules/@mongodb-js/oidc-plugin/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@mongodb-js/oidc-plugin/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", "dependencies": { - "express": "^4.18.2", - "open": "^9.1.0", - "openid-client": "^5.6.4" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">= 16.20.1" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, "node_modules/@mongodb-js/prettier-config-devtools": { @@ -7910,9 +7803,9 @@ } }, "node_modules/@mongodb-js/shell-bson-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/shell-bson-parser/-/shell-bson-parser-1.3.0.tgz", - "integrity": "sha512-ZUEq2qOziAMvZcOLrVwmL/1bbXNrumC4zsjgjYAbSarS0LwfoVO/5zEsud08PY2AUwJiHM2U0c7atDoEX48qcw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/shell-bson-parser/-/shell-bson-parser-1.3.1.tgz", + "integrity": "sha512-BnSjWc/XPVkugi78VaoRzdJMVgzFXiXvngcwWApzXNrQuKXzAXXQSuZ6kazx5toExPjHwu20gQmre59vKR0ZXw==", "license": "Apache-2.0", "dependencies": { "acorn": "^8.14.1" @@ -7937,6 +7830,7 @@ "version": "0.0.10", "resolved": "https://registry.npmjs.org/@mongodb-js/socksv5/-/socksv5-0.0.10.tgz", "integrity": "sha512-JDz2fLKsjMiSNUxKrCpGptsgu7DzsXfu4gnUQ3RhUaBS1d4YbLrt6HejpckAiHIAa+niBpZAeiUsoop0IihWsw==", + "license": "MIT", "dependencies": { "ip-address": "^9.0.5" }, @@ -7955,23 +7849,10 @@ "typescript": "^5.8.2" } }, - "node_modules/@mongodb-js/ts-autocomplete/node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@mongosh/arg-parser": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/@mongosh/arg-parser/-/arg-parser-3.14.0.tgz", - "integrity": "sha512-ue7FtuO9rgmjrh2lFZdgtrVMrGXeqBG8mWDDTb/CZ2GZNtULhAdk9d+gdnjupQNH66fGWoKdLhuur466HuJrtw==", + "node_modules/@mongosh/arg-parser": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@mongosh/arg-parser/-/arg-parser-3.14.0.tgz", + "integrity": "sha512-ue7FtuO9rgmjrh2lFZdgtrVMrGXeqBG8mWDDTb/CZ2GZNtULhAdk9d+gdnjupQNH66fGWoKdLhuur466HuJrtw==", "license": "Apache-2.0", "dependencies": { "@mongosh/errors": "2.4.2", @@ -8132,56 +8013,752 @@ "mongodb-client-encryption": "^6.3.0" } }, - "node_modules/@mongosh/shell-api": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@mongosh/shell-api/-/shell-api-3.18.0.tgz", - "integrity": "sha512-tu3e/TSrWSGvXV3Jt+BYbqIF45A7LEHq4KCZM7r/7ugK8zzrcRADxhdX6pvhRvtpIdMn3C4eNHMzk+oQiX6Nxg==", + "node_modules/@mongosh/service-provider-node-driver/node_modules/@mongodb-js/oidc-plugin": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@mongodb-js/oidc-plugin/-/oidc-plugin-1.1.8.tgz", + "integrity": "sha512-83H6SuUm4opxYqEc81AJBXEXlTMO9qnMGXidQFpB2Qwo4MmQtJN4UVm4notqwTBb/ysf410tspUGXy+QLu7xJQ==", "license": "Apache-2.0", "dependencies": { - "@babel/core": "^7.26.10", - "@babel/types": "^7.26.10", - "@mongosh/arg-parser": "^3.14.0", - "@mongosh/errors": "2.4.2", - "@mongosh/history": "2.4.8", - "@mongosh/i18n": "^2.15.2", - "@mongosh/service-provider-core": "3.3.5", - "mongodb-redact": "^1.1.5", - "mongodb-schema": "^12.6.2" + "express": "^4.18.2", + "open": "^9.1.0", + "openid-client": "^5.6.4" + }, + "engines": { + "node": ">= 16.20.1" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "license": "MIT", + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mongosh/service-provider-node-driver/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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "license": "MIT", + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "license": "MIT", + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@mongosh/service-provider-node-driver/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==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/jose": { + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "license": "MIT", + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/openid-client": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.7.1.tgz", + "integrity": "sha512-jDBPgSVfTnkIh71Hg9pRvtJc6wTwqjRkN88+gCFtYWrlP4Yx2Dsrow8uPi3qLr/aeymPF3o2+dS+wOpglK04ew==", + "license": "MIT", + "dependencies": { + "jose": "^4.15.9", + "lru-cache": "^6.0.0", + "object-hash": "^2.2.0", + "oidc-token-hash": "^5.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "license": "MIT", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/statuses": { + "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" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mongosh/service-provider-node-driver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/@mongosh/shell-api": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/@mongosh/shell-api/-/shell-api-3.18.0.tgz", + "integrity": "sha512-tu3e/TSrWSGvXV3Jt+BYbqIF45A7LEHq4KCZM7r/7ugK8zzrcRADxhdX6pvhRvtpIdMn3C4eNHMzk+oQiX6Nxg==", + "license": "Apache-2.0", + "dependencies": { + "@babel/core": "^7.26.10", + "@babel/types": "^7.26.10", + "@mongosh/arg-parser": "^3.14.0", + "@mongosh/errors": "2.4.2", + "@mongosh/history": "2.4.8", + "@mongosh/i18n": "^2.15.2", + "@mongosh/service-provider-core": "3.3.5", + "mongodb-redact": "^1.1.5", + "mongodb-schema": "^12.6.2" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/@mongosh/shell-evaluator": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/@mongosh/shell-evaluator/-/shell-evaluator-3.18.0.tgz", + "integrity": "sha512-jZpqGUreCNnYbS7/Oz2hqhW7AR5IPe5M4PyJaW3lU2URDzMU77RJE5GYw+drGrLTjlBiPLymnj7gri+Iac4MnA==", + "license": "Apache-2.0", + "dependencies": { + "@mongosh/async-rewriter2": "2.4.10", + "@mongosh/history": "2.4.8", + "@mongosh/shell-api": "^3.18.0" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/@mongosh/types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@mongosh/types/-/types-3.10.0.tgz", + "integrity": "sha512-2cep8k8O2iPoARXiXa3W3ypXmDG97iOGitdbYnEKZUcXdYIZLKsQU80oXIIFezRk9TFLDIewpV85JHJAfhbsWw==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/devtools-connect": "^3.4.1" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "node_modules/@napi-rs/canvas": { + "version": "0.1.77", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.77.tgz", + "integrity": "sha512-N9w2DkEKE1AXGp3q55GBOP6BEoFrqChDiFqJtKViTpQCWNOSVuMz7LkoGehbnpxtidppbsC36P0kCZNqJKs29w==", + "dev": true, + "license": "MIT", + "optional": true, + "workspaces": [ + "e2e/*" + ], + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@napi-rs/canvas-android-arm64": "0.1.77", + "@napi-rs/canvas-darwin-arm64": "0.1.77", + "@napi-rs/canvas-darwin-x64": "0.1.77", + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.77", + "@napi-rs/canvas-linux-arm64-gnu": "0.1.77", + "@napi-rs/canvas-linux-arm64-musl": "0.1.77", + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.77", + "@napi-rs/canvas-linux-x64-gnu": "0.1.77", + "@napi-rs/canvas-linux-x64-musl": "0.1.77", + "@napi-rs/canvas-win32-x64-msvc": "0.1.77" + } + }, + "node_modules/@napi-rs/canvas-android-arm64": { + "version": "0.1.77", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.77.tgz", + "integrity": "sha512-jC8YX0rbAnu9YrLK1A52KM2HX9EDjrJSCLVuBf9Dsov4IC6GgwMLS2pwL9GFLJnSZBFgdwnA84efBehHT9eshA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-darwin-arm64": { + "version": "0.1.77", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.77.tgz", + "integrity": "sha512-VFaCaCgAV0+hPwXajDIiHaaGx4fVCuUVYp/CxCGXmTGz699ngIEBx3Sa2oDp0uk3X+6RCRLueb7vD44BKBiPIg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-darwin-x64": { + "version": "0.1.77", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.77.tgz", + "integrity": "sha512-uD2NSkf6I4S3o0POJDwweK85FE4rfLNA2N714MgiEEMMw5AmupfSJGgpYzcyEXtPzdaca6rBfKcqNvzR1+EyLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { + "version": "0.1.77", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.77.tgz", + "integrity": "sha512-03GxMMZGhHRQxiA4gyoKT6iQSz8xnA6T9PAfg/WNJnbkVMFZG782DwUJUb39QIZ1uE1euMCPnDgWAJ092MmgJQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-gnu": { + "version": "0.1.77", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.77.tgz", + "integrity": "sha512-ZO+d2gRU9JU1Bb7SgJcJ1k9wtRMCpSWjJAJ+2phhu0Lw5As8jYXXXmLKmMTGs1bOya2dBMYDLzwp7KS/S/+aCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-musl": { + "version": "0.1.77", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.77.tgz", + "integrity": "sha512-S1KtnP1+nWs2RApzNkdNf8X4trTLrHaY7FivV61ZRaL8NvuGOkSkKa+gWN2iedIGFEDz6gecpl/JAUSewwFXYg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { + "version": "0.1.77", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.77.tgz", + "integrity": "sha512-A4YIKFYUwDtrSzCtdCAO5DYmRqlhCVKHdpq0+dBGPnIEhOQDFkPBTfoTAjO3pjlEnorlfKmNMOH21sKQg2esGA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-gnu": { + "version": "0.1.77", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.77.tgz", + "integrity": "sha512-Lt6Sef5l0+5O1cSZ8ysO0JI+x+rSrqZyXs5f7+kVkCAOVq8X5WTcDVbvWvEs2aRhrWTp5y25Jf2Bn+3IcNHOuQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.15.1" + "node": ">= 10" } }, - "node_modules/@mongosh/shell-evaluator": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@mongosh/shell-evaluator/-/shell-evaluator-3.18.0.tgz", - "integrity": "sha512-jZpqGUreCNnYbS7/Oz2hqhW7AR5IPe5M4PyJaW3lU2URDzMU77RJE5GYw+drGrLTjlBiPLymnj7gri+Iac4MnA==", - "license": "Apache-2.0", - "dependencies": { - "@mongosh/async-rewriter2": "2.4.10", - "@mongosh/history": "2.4.8", - "@mongosh/shell-api": "^3.18.0" - }, + "node_modules/@napi-rs/canvas-linux-x64-musl": { + "version": "0.1.77", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.77.tgz", + "integrity": "sha512-NiNFvC+D+omVeJ3IjYlIbyt/igONSABVe9z0ZZph29epHgZYu4eHwV9osfpRt1BGGOAM8LkFrHk4LBdn2EDymA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.15.1" + "node": ">= 10" } }, - "node_modules/@mongosh/types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/@mongosh/types/-/types-3.10.0.tgz", - "integrity": "sha512-2cep8k8O2iPoARXiXa3W3ypXmDG97iOGitdbYnEKZUcXdYIZLKsQU80oXIIFezRk9TFLDIewpV85JHJAfhbsWw==", - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/devtools-connect": "^3.4.1" - }, + "node_modules/@napi-rs/canvas-win32-x64-msvc": { + "version": "0.1.77", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.77.tgz", + "integrity": "sha512-fP6l0hZiWykyjvpZTS3sI46iib8QEflbPakNoUijtwyxRuOPTTBfzAWZUz5z2vKpJJ/8r305wnZeZ8lhsBHY5A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=14.15.1" + "node": ">= 10" } }, "node_modules/@next/env": { - "version": "14.2.28", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.28.tgz", - "integrity": "sha512-PAmWhJfJQlP+kxZwCjrVd9QnR5x0R3u0mTXTiZDgSd4h5LdXmjxCCWbN9kq6hkZBOax8Rm3xDW5HagWyJuT37g==", + "version": "14.2.32", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.32.tgz", + "integrity": "sha512-n9mQdigI6iZ/DF6pCTwMKeWgF2e8lg7qgt5M7HXMLtyhZYMnf/u905M18sSpPmHL9MKp9JHo56C6jrD2EvWxng==", "dev": true, "license": "MIT" }, @@ -8189,7 +8766,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -8202,7 +8778,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "engines": { "node": ">= 8" } @@ -8211,7 +8786,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -8392,6 +8966,21 @@ "@octokit/openapi-types": "^24.2.0" } }, + "node_modules/@opendocsg/pdf2md": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@opendocsg/pdf2md/-/pdf2md-0.2.1.tgz", + "integrity": "sha512-k/yvfrTb+GPTIIm/bMm5IsenTqAFl+IqvkBgFwFlmflS5TT7FOfyRLp8MypVWLAG4G9AnT7AZFbdQYgN/CR5BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "enumify": "^1.0.4", + "minimist": "^1.2.5", + "unpdf": "^0.12.1" + }, + "bin": { + "pdf2md": "lib/pdf2md-cli.js" + } + }, "node_modules/@opentelemetry/api": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", @@ -9289,6 +9878,13 @@ "node": ">=16.0.0" } }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "dev": true, + "license": "MIT" + }, "node_modules/@supercharge/promise-pool": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-3.2.0.tgz", @@ -9299,17 +9895,6 @@ "node": ">=8" } }, - "node_modules/@sveltejs/acorn-typescript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz", - "integrity": "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "acorn": "^8.9.0" - } - }, "node_modules/@swc/helpers": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz", @@ -9495,7 +10080,8 @@ "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "license": "MIT" }, "node_modules/@tsconfig/node10": { "version": "1.0.9", @@ -9558,6 +10144,16 @@ "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", "dev": true }, + "node_modules/@types/chai-as-promised": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-8.0.2.tgz", + "integrity": "sha512-meQ1wDr1K5KRCSvG2lX7n7/5wf70BeptTKst0axGvnN6zqaVpRqegoIbugiAPSqOW9K9aL8gDVrm7a2LXOtn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*" + } + }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", @@ -9567,13 +10163,6 @@ "@types/ms": "*" } }, - "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==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", @@ -9607,13 +10196,15 @@ } }, "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", - "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.7.tgz", + "integrity": "sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g==", "license": "MIT", "dependencies": { - "@types/react": "*", "hoist-non-react-statics": "^3.3.0" + }, + "peerDependencies": { + "@types/react": "*" } }, "node_modules/@types/http-cache-semantics": { @@ -9665,16 +10256,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/mkdirp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-2.0.0.tgz", - "integrity": "sha512-c/iUqMymAlxLAyIK3u5SzrwkrkyOdv1XDc91T+b5FsY7Jr6ERhUD19jJHOhPW4GD6tmN6mFEorfSdks525pwdQ==", - "deprecated": "This is a stub types definition. mkdirp provides its own type definitions, so you do not need this installed.", - "dev": true, - "dependencies": { - "mkdirp": "*" - } - }, "node_modules/@types/mocha": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", @@ -9688,9 +10269,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" + "version": "20.19.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.11.tgz", + "integrity": "sha512-uug3FEEGv0r+jrecvUUpbY8lLisvIjg6AAic6a2bSP5OEOLeJsDSnvhCDov7ipFFMXS3orMpzlmi0ZcuGkBbow==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } }, "node_modules/@types/node-fetch": { "version": "2.6.11", @@ -9702,6 +10287,12 @@ "form-data": "^4.0.0" } }, + "node_modules/@types/node/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", @@ -9869,10 +10460,11 @@ "dev": true }, "node_modules/@types/vscode": { - "version": "1.94.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.94.0.tgz", - "integrity": "sha512-UyQOIUT0pb14XSqJskYnRwD2aG0QrPVefIfrW1djR+/J4KeFQ0i1+hjZoaAmeNf3Z2jleK+R2hv+EboG/m8ruw==", - "dev": true + "version": "1.103.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.103.0.tgz", + "integrity": "sha512-o4hanZAQdNfsKecexq9L3eHICd0AAvdbLk6hA60UzGXbGH/q8b/9xv2RgR7vV3ZcHuyKVq7b37IGd/+gM4Tu+Q==", + "dev": true, + "license": "MIT" }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", @@ -9958,6 +10550,40 @@ } } }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.41.0.tgz", + "integrity": "sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.41.0", + "@typescript-eslint/types": "^8.41.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service/node_modules/@typescript-eslint/types": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.41.0.tgz", + "integrity": "sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==", + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", @@ -9975,6 +10601,22 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz", + "integrity": "sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==", + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, "node_modules/@typescript-eslint/type-utils": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", @@ -10002,111 +10644,266 @@ } } }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + }, + "node_modules/@vercel/functions": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vercel/functions/-/functions-1.6.0.tgz", + "integrity": "sha512-R6FKQrYT5MZs5IE1SqeCJWxMuBdHawFcCZboKKw8p7s+6/mcd55Gx6tWmyKnQTyrSEA04NH73Tc9CbqpEle8RA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "@aws-sdk/credential-provider-web-identity": "*" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-provider-web-identity": { + "optional": true + } + } + }, + "node_modules/@vitest/eslint-plugin": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.3.4.tgz", + "integrity": "sha512-EOg8d0jn3BAiKnR55WkFxmxfWA3nmzrbIIuOXyTe6A72duryNgyU+bdBEauA97Aab3ho9kLmAwgPX63Ckj4QEg==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.24.1" + }, + "peerDependencies": { + "eslint": ">= 8.57.0", + "typescript": ">= 5.0.0", + "vitest": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@vitest/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.41.0.tgz", + "integrity": "sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitest/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.41.0.tgz", + "integrity": "sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==", + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, + "node_modules/@vitest/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.41.0.tgz", + "integrity": "sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/project-service": "8.41.0", + "@typescript-eslint/tsconfig-utils": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, + "node_modules/@vitest/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.41.0.tgz", + "integrity": "sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==", + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, + "node_modules/@vitest/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.41.0.tgz", + "integrity": "sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "8.41.0", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "node_modules/@vitest/eslint-plugin/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/@vercel/functions": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vercel/functions/-/functions-1.6.0.tgz", - "integrity": "sha512-R6FKQrYT5MZs5IE1SqeCJWxMuBdHawFcCZboKKw8p7s+6/mcd55Gx6tWmyKnQTyrSEA04NH73Tc9CbqpEle8RA==", - "dev": true, + "node_modules/@vitest/eslint-plugin/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "license": "Apache-2.0", "engines": { - "node": ">= 16" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "@aws-sdk/credential-provider-web-identity": "*" + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@vitest/eslint-plugin/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" }, - "peerDependenciesMeta": { - "@aws-sdk/credential-provider-web-identity": { - "optional": true - } + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@vscode/test-electron": { @@ -10543,58 +11340,6 @@ "@vue/shared": "3.5.13" } }, - "node_modules/@vue/reactivity": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", - "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", - "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", - "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/runtime-core": "3.5.13", - "@vue/shared": "3.5.13", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", - "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13" - }, - "peerDependencies": { - "vue": "3.5.13" - } - }, "node_modules/@vue/shared": { "version": "3.5.13", "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", @@ -10822,6 +11567,14 @@ "dev": true, "license": "MIT" }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "license": "ISC", + "optional": true + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -10835,12 +11588,34 @@ } }, "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "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": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "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" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "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" }, "engines": { "node": ">= 0.6" @@ -10871,7 +11646,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -10910,13 +11684,10 @@ "license": "MIT" }, "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } @@ -10934,37 +11705,50 @@ } }, "node_modules/ai": { - "version": "4.3.15", - "resolved": "https://registry.npmjs.org/ai/-/ai-4.3.15.tgz", - "integrity": "sha512-TYKRzbWg6mx/pmTadlAEIhuQtzfHUV0BbLY72+zkovXwq/9xhcH24IlQmkyBpElK6/4ArS0dHdOOtR1jOPVwtg==", + "version": "5.0.0-beta.28", + "resolved": "https://registry.npmjs.org/ai/-/ai-5.0.0-beta.28.tgz", + "integrity": "sha512-RYAYmrM+mfS4DFT7Qq/WQF9OMEdxTqRffc8UISJ+GwwHtjT+tAcq08KBySJwGa/x+69T9AVKZKfWeVc3XzwcDg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@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" + "@ai-sdk/gateway": "1.0.0-beta.14", + "@ai-sdk/provider": "2.0.0-beta.1", + "@ai-sdk/provider-utils": "3.0.0-beta.6", + "@opentelemetry/api": "1.9.0" + }, + "bin": { + "ai": "dist/bin/ai.min.js" }, "engines": { "node": ">=18" }, "peerDependencies": { - "react": "^18 || ^19 || ^19.0.0-rc", - "zod": "^3.23.8" + "zod": "^3.25.76 || ^4" + } + }, + "node_modules/ai/node_modules/@ai-sdk/provider-utils": { + "version": "3.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.0-beta.6.tgz", + "integrity": "sha512-r8Nswwko+7nuLnLxprPgAxjGcpjq5fnFmfFwtkz4k9KfF1Z6Nkwvl8+Ee9BULBWXOqbtJGh9iCiJaTPBnhZrqw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "2.0.0-beta.1", + "@standard-schema/spec": "^1.0.0", + "eventsource-parser": "^3.0.3", + "zod-to-json-schema": "^3.24.1" }, - "peerDependenciesMeta": { - "react": { - "optional": true - } + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.25.76 || ^4" } }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -11029,6 +11813,57 @@ "node": ">= 8" } }, + "node_modules/aproba": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", + "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -11053,12 +11888,16 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11085,7 +11924,8 @@ "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" }, "node_modules/array-includes": { "version": "3.1.6", @@ -11171,6 +12011,27 @@ "get-intrinsic": "^1.1.3" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -11251,6 +12112,7 @@ "version": "0.13.4", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -11273,6 +12135,15 @@ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -11280,9 +12151,13 @@ "dev": true }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -11300,23 +12175,12 @@ "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, - "license": "Apache-2.0", + "license": "MIT", "peer": true, - "engines": { - "node": ">= 0.4" + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/azure-devops-node-api": { @@ -11418,6 +12282,7 @@ "version": "5.0.5", "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -11447,9 +12312,10 @@ } }, "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", "engines": { "node": ">=0.6" } @@ -11540,9 +12406,166 @@ "dev": true }, "node_modules/body-parser": { + "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", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/body-parser/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==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "optional": true + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "license": "MIT" + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/braintrust": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/braintrust/-/braintrust-0.2.4.tgz", + "integrity": "sha512-MxxKv+RUQz1oTYYC9Q9e5T1z6i0bIzeKfzrI2BbYv7w5nf1/a7dZyLVeYT9zYjYJdsjAfVP5Kt9KNAd5xeCNMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ai-sdk/provider": "^1.1.3", + "@braintrust/core": "0.0.93", + "@next/env": "^14.2.3", + "@vercel/functions": "^1.0.2", + "argparse": "^2.0.1", + "chalk": "^4.1.2", + "cli-progress": "^3.12.0", + "cors": "^2.8.5", + "dotenv": "^16.4.5", + "esbuild": "^0.25.8", + "eventsource-parser": "^1.1.2", + "express": "^4.21.2", + "graceful-fs": "^4.2.11", + "http-errors": "^2.0.0", + "minimatch": "^9.0.3", + "mustache": "^4.2.0", + "pluralize": "^8.0.0", + "simple-git": "^3.21.0", + "slugify": "^1.6.6", + "source-map": "^0.7.4", + "uuid": "^9.0.1", + "zod": "^3.25.34", + "zod-to-json-schema": "^3.22.5" + }, + "bin": { + "braintrust": "dist/cli.js" + }, + "peerDependencies": { + "zod": "^3.25.34" + } + }, + "node_modules/braintrust/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==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "json-schema": "^0.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/braintrust/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/braintrust/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/braintrust/node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -11563,315 +12586,317 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/body-parser/node_modules/debug": { + "node_modules/braintrust/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braintrust/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/braintrust/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/braintrust/node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/braintrust/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/body-parser/node_modules/ms": { + "node_modules/braintrust/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, "license": "MIT" }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "node_modules/braintrust/node_modules/eventsource-parser": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.1.2.tgz", + "integrity": "sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==", + "dev": true, "license": "MIT", - "optional": true + "engines": { + "node": ">=14.18" + } }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "license": "MIT" + "node_modules/braintrust/node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "node_modules/braintrust/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "license": "MIT", "dependencies": { - "big-integer": "^1.6.44" + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 5.10.0" + "node": ">= 0.8" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/braintrust/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, + "node_modules/braintrust/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/braintrust": { - "version": "0.0.193", - "resolved": "https://registry.npmjs.org/braintrust/-/braintrust-0.0.193.tgz", - "integrity": "sha512-D0q8W8018drjJLjlWfmBLyxlHwDvpsoZeAjPNcLJs5rAJCnBbd57RpQOBgtT4LrSyRl6uqDMy6LMghS1sWt1Wg==", + "node_modules/braintrust/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true, "license": "MIT", - "dependencies": { - "@ai-sdk/provider": "^1.0.1", - "@braintrust/core": "0.0.83", - "@next/env": "^14.2.3", - "@vercel/functions": "^1.0.2", - "ai": "^3.2.16", - "argparse": "^2.0.1", - "chalk": "^4.1.2", - "cli-progress": "^3.12.0", - "dotenv": "^16.4.5", - "esbuild": "^0.25.1", - "eventsource-parser": "^1.1.2", - "graceful-fs": "^4.2.11", - "minimatch": "^9.0.3", - "mustache": "^4.2.0", - "pluralize": "^8.0.0", - "simple-git": "^3.21.0", - "slugify": "^1.6.6", - "source-map": "^0.7.4", - "uuid": "^9.0.1", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.5" - }, - "bin": { - "braintrust": "dist/cli.js" - }, - "peerDependencies": { - "zod": "^3.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/braintrust/node_modules/@ai-sdk/provider-utils": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-1.0.22.tgz", - "integrity": "sha512-YHK2rpj++wnLVc9vPGzGFP3Pjeld2MwhKinetA0zKXOoHAT/Jit5O8kZsxcSlJPu9wvcGT1UGZEjZrtO7PfFOQ==", + "node_modules/braintrust/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "@ai-sdk/provider": "0.0.26", - "eventsource-parser": "^1.1.2", - "nanoid": "^3.3.7", - "secure-json-parse": "^2.7.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "zod": "^3.0.0" + "node": ">=16 || 14 >=14.17" }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/braintrust/node_modules/@ai-sdk/provider-utils/node_modules/@ai-sdk/provider": { - "version": "0.0.26", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.26.tgz", - "integrity": "sha512-dQkfBDs2lTYpKM8389oopPdQgIU007GQyCbuPPrV+K6MtSII3HBfE0stUIMXUb44L+LK1t6GXPP7wjSzjO6uKg==", + "node_modules/braintrust/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "json-schema": "^0.4.0" - }, + "license": "MIT", "engines": { - "node": ">=18" + "node": ">= 0.6" } }, - "node_modules/braintrust/node_modules/@ai-sdk/react": { - "version": "0.0.70", - "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-0.0.70.tgz", - "integrity": "sha512-GnwbtjW4/4z7MleLiW+TOZC2M29eCg1tOUpuEiYFMmFNZK8mkrqM0PFZMo6UsYeUYMWqEOOcPOU9OQVJMJh7IQ==", + "node_modules/braintrust/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/braintrust/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@ai-sdk/provider-utils": "1.0.22", - "@ai-sdk/ui-utils": "0.0.50", - "swr": "^2.2.5", - "throttleit": "2.1.0" + "side-channel": "^1.0.6" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "react": "^18 || ^19 || ^19.0.0-rc", - "zod": "^3.0.0" + "node": ">=0.6" }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "zod": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/braintrust/node_modules/@ai-sdk/ui-utils": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-0.0.50.tgz", - "integrity": "sha512-Z5QYJVW+5XpSaJ4jYCCAVG7zIAuKOOdikhgpksneNmKvx61ACFaf98pmOd+xnjahl0pIlc/QIe6O4yVaJ1sEaw==", + "node_modules/braintrust/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@ai-sdk/provider": "0.0.26", - "@ai-sdk/provider-utils": "1.0.22", - "json-schema": "^0.4.0", - "secure-json-parse": "^2.7.0", - "zod-to-json-schema": "^3.23.3" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "zod": "^3.0.0" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } + "node": ">= 0.8" } }, - "node_modules/braintrust/node_modules/@ai-sdk/ui-utils/node_modules/@ai-sdk/provider": { - "version": "0.0.26", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.26.tgz", - "integrity": "sha512-dQkfBDs2lTYpKM8389oopPdQgIU007GQyCbuPPrV+K6MtSII3HBfE0stUIMXUb44L+LK1t6GXPP7wjSzjO6uKg==", + "node_modules/braintrust/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "json-schema": "^0.4.0" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { - "node": ">=18" + "node": ">= 0.8.0" } }, - "node_modules/braintrust/node_modules/ai": { - "version": "3.4.33", - "resolved": "https://registry.npmjs.org/ai/-/ai-3.4.33.tgz", - "integrity": "sha512-plBlrVZKwPoRTmM8+D1sJac9Bq8eaa2jiZlHLZIWekKWI1yMWYZvCCEezY9ASPwRhULYDJB2VhKOBUUeg3S5JQ==", + "node_modules/braintrust/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider": "0.0.26", - "@ai-sdk/provider-utils": "1.0.22", - "@ai-sdk/react": "0.0.70", - "@ai-sdk/solid": "0.0.54", - "@ai-sdk/svelte": "0.0.57", - "@ai-sdk/ui-utils": "0.0.50", - "@ai-sdk/vue": "0.0.59", - "@opentelemetry/api": "1.9.0", - "eventsource-parser": "1.1.2", - "json-schema": "^0.4.0", - "jsondiffpatch": "0.6.0", - "secure-json-parse": "^2.7.0", - "zod-to-json-schema": "^3.23.3" - }, + "license": "MIT", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "openai": "^4.42.0", - "react": "^18 || ^19 || ^19.0.0-rc", - "sswr": "^2.1.0", - "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0", - "zod": "^3.0.0" - }, - "peerDependenciesMeta": { - "openai": { - "optional": true - }, - "react": { - "optional": true - }, - "sswr": { - "optional": true - }, - "svelte": { - "optional": true - }, - "zod": { - "optional": true - } + "node": ">= 0.8" } }, - "node_modules/braintrust/node_modules/ai/node_modules/@ai-sdk/provider": { - "version": "0.0.26", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.26.tgz", - "integrity": "sha512-dQkfBDs2lTYpKM8389oopPdQgIU007GQyCbuPPrV+K6MtSII3HBfE0stUIMXUb44L+LK1t6GXPP7wjSzjO6uKg==", + "node_modules/braintrust/node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "json-schema": "^0.4.0" + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" }, "engines": { - "node": ">=18" + "node": ">= 0.8.0" } }, - "node_modules/braintrust/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/braintrust/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "dev": true, - "license": "Python-2.0" + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } }, - "node_modules/braintrust/node_modules/brace-expansion": { + "node_modules/braintrust/node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">= 0.8" } }, - "node_modules/braintrust/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/braintrust/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/braintrust/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "license": "BSD-3-Clause", "engines": { - "node": ">= 8" + "node": ">= 0.6" } }, "node_modules/braintrust/node_modules/uuid": { @@ -12129,14 +13154,15 @@ "dev": true }, "node_modules/bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", "dependencies": { - "run-applescript": "^5.0.0" + "run-applescript": "^7.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12173,19 +13199,48 @@ "responselike": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/call-bind-apply-helpers": { + "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-define-property": "^1.0.0", "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "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" }, "engines": { "node": ">= 0.4" @@ -12323,6 +13378,64 @@ } ] }, + "node_modules/canvas": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/canvas/node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/canvas/node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/canvas/node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/chai": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", @@ -12670,6 +13783,17 @@ "simple-swizzle": "^0.2.2" } }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, "node_modules/color/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -12749,8 +13873,7 @@ "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 + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/console-browserify": { "version": "1.2.0", @@ -12758,6 +13881,14 @@ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true, + "license": "ISC", + "optional": true + }, "node_modules/console-table-printer": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/console-table-printer/-/console-table-printer-2.12.1.tgz", @@ -12775,9 +13906,10 @@ "dev": true }, "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "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" }, @@ -12801,18 +13933,22 @@ "license": "MIT" }, "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==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "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" + } }, "node_modules/core-js": { "version": "2.6.12", @@ -12827,6 +13963,19 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "node_modules/cors": { + "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" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -13054,6 +14203,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "license": "MIT", "engines": { "node": ">= 14" } @@ -13072,6 +14222,57 @@ "node": ">=18" } }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", @@ -13361,8 +14562,7 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/deepmerge": { "version": "4.3.1", @@ -13374,126 +14574,28 @@ } }, "node_modules/default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "license": "MIT", "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/execa": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", - "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/default-browser/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -13548,6 +14650,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -13556,10 +14659,12 @@ } }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -13574,6 +14679,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "license": "MIT", "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -13598,6 +14704,14 @@ "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", "license": "MIT" }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/depcheck": { "version": "1.4.7", "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-1.4.7.tgz", @@ -13695,6 +14809,7 @@ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -13753,13 +14868,6 @@ "node": ">=0.3.1" } }, - "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==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -13793,7 +14901,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -13901,6 +15008,20 @@ "node": ">=4" } }, + "node_modules/dunder-proto": { + "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", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -14082,9 +15203,9 @@ } }, "node_modules/electron": { - "version": "36.4.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-36.4.0.tgz", - "integrity": "sha512-LLOOZEuW5oqvnjC7HBQhIqjIIJAZCIFjQxltQGLfEC7XFsBoZgQ3u3iFj+Kzw68Xj97u1n57Jdt7P98qLvUibQ==", + "version": "37.3.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-37.3.1.tgz", + "integrity": "sha512-7DhktRLqhe6OJh/Bo75bTI0puUYEmIwSzMinocgO63mx3MVjtIn2tYMzLmAleNIlud2htkjpsMG2zT4PiTCloA==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -14105,9 +15226,9 @@ "integrity": "sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==" }, "node_modules/electron/node_modules/@types/node": { - "version": "22.15.32", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.32.tgz", - "integrity": "sha512-3jigKqgSjsH6gYZv2nEsqdXfZqIFGAV36XYYjf9KGZ3PSG+IhLecqPnI310RvjutyMwifE2hhhNEklOUrvx/wA==", + "version": "22.17.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.2.tgz", + "integrity": "sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -14204,6 +15325,13 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/enumify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/enumify/-/enumify-1.0.4.tgz", + "integrity": "sha512-5mwWXaVzJaqyUdOW/PDH5QySRgmQ8VvujmxmvXoXj9w0n+6omhVuyD56eI37FMqy/LxueJzsQ4DrHVQzuT/TXg==", + "dev": true, + "license": "MIT" + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -14243,45 +15371,65 @@ } }, "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -14291,12 +15439,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "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" } @@ -14339,15 +15485,28 @@ "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", "dev": true }, + "node_modules/es-object-atoms": { + "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" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, + "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": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -14363,14 +15522,14 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -14387,9 +15546,9 @@ "optional": 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==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -14400,31 +15559,32 @@ "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.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" } }, "node_modules/escalade": { @@ -14456,6 +15616,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -14476,6 +15637,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -14486,7 +15648,6 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -15129,7 +16290,6 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -15140,14 +16300,12 @@ "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -15163,7 +16321,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -15179,7 +16336,6 @@ "version": "13.20.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -15194,7 +16350,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -15206,7 +16361,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -15221,7 +16375,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -15236,7 +16389,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -15251,7 +16403,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -15259,19 +16410,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esm-env": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", - "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -15300,7 +16442,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -15308,22 +16449,10 @@ "node": ">=0.10" } }, - "node_modules/esrap": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.6.tgz", - "integrity": "sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -15386,14 +16515,25 @@ "node": ">=0.8.x" } }, + "node_modules/eventsource": { + "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" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/eventsource-parser": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.1.2.tgz", - "integrity": "sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==", - "dev": true, + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.5.tgz", + "integrity": "sha512-bSRG85ZrMdmWtm7qkF9He9TNRzc/Bm99gEJMaQoHJ9E6Kv9QBbsldh2oMj7iXmYNEAVvNgvv5vPorG6W+XtBhQ==", "license": "MIT", "engines": { - "node": ">=14.18" + "node": ">=20.0.0" } }, "node_modules/evp_bytestokey": { @@ -15407,23 +16547,23 @@ } }, "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" @@ -15441,34 +16581,43 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execa/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", + "node_modules/execa/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "license": "MIT", "engines": { - "node": ">=10.17.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execa/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==", + "node_modules/execa/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execa/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/execa/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/expand-template": { @@ -15506,63 +16655,82 @@ "license": "MIT" }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "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": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "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", + "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.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 18" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" + "node_modules/express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/express/node_modules/mime-db": { + "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" + } + }, + "node_modules/express/node_modules/mime-types": { + "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" + }, + "engines": { + "node": ">= 0.6" + } }, "node_modules/extend": { "version": "3.0.2", @@ -15638,20 +16806,19 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", - "dev": true, + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -15661,7 +16828,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -15672,14 +16838,12 @@ "node_modules/fast-json-stable-stringify": { "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 + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fast-uri": { "version": "3.0.6", @@ -15733,7 +16897,6 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -15799,7 +16962,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -15844,37 +17006,21 @@ } }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "engines": { + "node": ">= 0.8" + } }, "node_modules/find-root": { "version": "1.1.0", @@ -15922,7 +17068,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -15934,8 +17079,7 @@ "node_modules/flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, "node_modules/fn.name": { "version": "1.1.0", @@ -16002,11 +17146,18 @@ } }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/foreground-child": { @@ -16201,17 +17352,18 @@ "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" } }, "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "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.6" + "node": ">= 0.8" } }, "node_modules/front-matter": { @@ -16285,8 +17437,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", @@ -16311,15 +17462,17 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -16342,6 +17495,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/gaxios": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", @@ -16495,15 +17671,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "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", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -16512,6 +17694,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "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" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -16528,13 +17723,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -16544,51 +17740,19 @@ } }, "node_modules/get-uri": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", - "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4", - "fs-extra": "^11.2.0" + "debug": "^4.3.4" }, "engines": { "node": ">= 14" } }, - "node_modules/get-uri/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/get-uri/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/get-uri/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -16599,7 +17763,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -16619,7 +17782,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -16703,12 +17865,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "devOptional": true, + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -16790,11 +17953,12 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" + "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" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -16845,8 +18009,7 @@ "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, "node_modules/gray-matter": { "version": "4.0.3", @@ -16892,64 +18055,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hadron-app-registry": { - "version": "9.4.11", - "resolved": "https://registry.npmjs.org/hadron-app-registry/-/hadron-app-registry-9.4.11.tgz", - "integrity": "sha512-NYi+ZBH70eVWEYP9Ac1iBNJovuYf47PpbIStFmBk2Z8Z9iPpzq5sNLq8yguV9z5xVFQZ1Poc/m8mKJliRmEkyA==", - "license": "SSPL", - "dependencies": { - "eventemitter3": "^4.0.0", - "react": "^17.0.2", - "react-redux": "^8.1.3", - "redux": "^4.2.1", - "reflux": "^0.4.1" - } - }, - "node_modules/hadron-app-registry/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==", - "license": "MIT" - }, - "node_modules/hadron-app-registry/node_modules/react-redux": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz", - "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.1", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/use-sync-external-store": "^0.0.3", - "hoist-non-react-statics": "^3.3.2", - "react-is": "^18.0.0", - "use-sync-external-store": "^1.0.0" - }, - "peerDependencies": { - "@types/react": "^16.8 || ^17.0 || ^18.0", - "@types/react-dom": "^16.8 || ^17.0 || ^18.0", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0", - "react-native": ">=0.59", - "redux": "^4 || ^5.0.0-beta.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - }, - "redux": { - "optional": true - } - } - }, "node_modules/hadron-document": { "version": "8.8.12", "resolved": "https://registry.npmjs.org/hadron-document/-/hadron-document-8.8.12.tgz", @@ -16964,13 +18069,13 @@ } }, "node_modules/hadron-ipc": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/hadron-ipc/-/hadron-ipc-3.5.2.tgz", - "integrity": "sha512-Ma8DRqXUGnzAfU/RomfaTkFCSOsX+jDZLceb6RLfzCVueJy2MPoJp/814dFzwVkSbr5wxogVBOyto7mugCnY8g==", + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/hadron-ipc/-/hadron-ipc-3.5.10.tgz", + "integrity": "sha512-w8U8QhLzS2ivWAhI7TBFODxM/VJCQ68ienVQOJw2aXEze7rz5HtOA6Nin/OLHEdBRWW/KlVgKStf+eknO5bdbg==", "license": "SSPL", "dependencies": { "debug": "^4.3.4", - "electron": "^36.4.0", + "electron": "^37.2.6", "is-electron-renderer": "^2.0.1" } }, @@ -16998,6 +18103,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -17033,9 +18139,13 @@ } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -17044,9 +18154,10 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "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" }, @@ -17055,11 +18166,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "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.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -17068,6 +18180,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true, + "license": "ISC", + "optional": true + }, "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -17301,6 +18421,15 @@ "node": ">= 0.8" } }, + "node_modules/http-errors/node_modules/statuses": { + "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" + } + }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -17333,12 +18462,12 @@ "dev": true }, "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -17349,6 +18478,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "license": "Apache-2.0", "engines": { "node": ">=14.18.0" } @@ -17469,7 +18599,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -17519,7 +18648,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -17538,7 +18666,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -17776,13 +18903,14 @@ } }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -17844,13 +18972,17 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -17861,12 +18993,35 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -17885,12 +19040,13 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -17930,12 +19086,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -17986,25 +19161,56 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "devOptional": true, "engines": { - "node": ">=8" + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -18016,6 +19222,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", "dependencies": { "is-docker": "^3.0.0" }, @@ -18033,6 +19240,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -18053,9 +19261,13 @@ } }, "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -18068,10 +19280,10 @@ "license": "MIT" }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -18088,11 +19300,13 @@ } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -18105,7 +19319,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -18138,24 +19351,22 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "node_modules/is-reference": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", - "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/estree": "^1.0.6" - } + "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==", + "license": "MIT" }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -18165,19 +19376,27 @@ } }, "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -18194,11 +19413,13 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -18208,11 +19429,14 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -18222,15 +19446,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -18252,32 +19473,43 @@ } }, "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -18360,9 +19592,10 @@ "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==" }, "node_modules/jose": { - "version": "4.15.7", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.7.tgz", - "integrity": "sha512-L7ioP+JAuZe8v+T5+zVI9Tx8LtU8BL7NxkyDFVMv+Qr3JW0jSoYDedLtodaXwfqMpeCyx4WXFNyu9tJt4WvC1A==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.0.13.tgz", + "integrity": "sha512-Yms4GpbmdANamS51kKK6w4hRlKx8KTxbWyAAKT/MhUMtqbIqh5mb2HjhTNUbk7TFL8/MBB5zWSDohL7ed4k/UA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" } @@ -18510,14 +19743,12 @@ "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "node_modules/json-stringify-safe": { "version": "5.0.1", @@ -18543,37 +19774,6 @@ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, - "node_modules/jsondiffpatch": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.6.0.tgz", - "integrity": "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -18980,7 +20180,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -19068,14 +20267,6 @@ "node": ">=6.11.5" } }, - "node_modules/locate-character": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -19230,10 +20421,11 @@ } }, "node_modules/macos-export-certificate-and-key": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/macos-export-certificate-and-key/-/macos-export-certificate-and-key-1.2.3.tgz", - "integrity": "sha512-O7+9e2JSctV1ylyzx8nwHDaA/H5Tpoudtd8q/YfRp26hAjE32caMPAS2jPQ2azRRSuRqx8gD24Vnf9bo7hH5Dw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/macos-export-certificate-and-key/-/macos-export-certificate-and-key-1.2.4.tgz", + "integrity": "sha512-y5QZEywlBNKd+EhPZ1Hz1FmDbbeQKtuVHJaTlawdl7vXw9bi/4tJB2xSMwX4sMVcddy3gbQ8K0IqXAi2TpDo2g==", "hasInstallScript": true, + "license": "Apache-2.0", "optional": true, "os": [ "darwin" @@ -19333,6 +20525,15 @@ "node": ">=10" } }, + "node_modules/math-intrinsics": { + "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" + } + }, "node_modules/md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -19370,12 +20571,12 @@ "license": "MIT" }, "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "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.6" + "node": ">= 0.8" } }, "node_modules/memfs": { @@ -19475,11 +20676,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/meow/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "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" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -19493,7 +20707,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "engines": { "node": ">= 8" } @@ -19502,6 +20715,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -19616,7 +20830,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -19939,10 +21152,20 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/mongodb": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.18.0.tgz", - "integrity": "sha512-fO5ttN9VC8P0F5fqtQmclAkgXZxbIkYRTUi1j8JO6IYwvamkhtYDilJr35jOPELR49zqCJgXZWwCtW7B+TM8vQ==", + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.19.0.tgz", + "integrity": "sha512-H3GtYujOJdeKIMLKBT9PwlDhGrQfplABNF1G904w6r5ZXKWyv77aB0X9B+rhmaAwjtllHzaEkvi9mkGVZxs2Bw==", "license": "Apache-2.0", "dependencies": { "@mongodb-js/saslprep": "^1.1.9", @@ -19958,7 +21181,7 @@ "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", - "snappy": "^7.2.2", + "snappy": "^7.3.2", "socks": "^2.7.1" }, "peerDependenciesMeta": { @@ -19994,9 +21217,9 @@ } }, "node_modules/mongodb-client-encryption": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-6.4.0.tgz", - "integrity": "sha512-Un1W/5P4KjcUBPeJeSKFNaWH0/8PVsoSatDqyWM2bMK0Vu2Jjxy7ZTgDj1g+uChuqroB09s8LvppdsHpwxSTVA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-6.5.0.tgz", + "integrity": "sha512-Gj8EeyYKsssdko0NKhWRBGDif6uVFBbv+e+Nyn7E316UmRzApc4IP+p2NLm+av+fU+dFHVT5WqfzaQVDTh8i9w==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -20043,9 +21266,9 @@ } }, "node_modules/mongodb-cloud-info": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/mongodb-cloud-info/-/mongodb-cloud-info-2.2.0.tgz", - "integrity": "sha512-AhcPZhcwC2JfqC1xuQHzSOLsNAtmEmFDMoqbArdcQRUi/N5jwfteEnhCV2uhPhKeAuPmGOfBD+QcxVJ/QNAhQw==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/mongodb-cloud-info/-/mongodb-cloud-info-2.2.2.tgz", + "integrity": "sha512-5GmQlgsl8GwGiU0sBCQ7vBDwRDoZtQmOS3sVLu6iZLEc244mNLvRpZZ6a32P5pxpnLswghWiYwi53b6V0sitew==", "license": "Apache-2.0", "dependencies": { "cross-fetch": "^3.1.6", @@ -20086,18 +21309,18 @@ } }, "node_modules/mongodb-data-service": { - "version": "22.28.2", - "resolved": "https://registry.npmjs.org/mongodb-data-service/-/mongodb-data-service-22.28.2.tgz", - "integrity": "sha512-rZRmzYM30GwjLbGTDHsI2sh7W/fxmMfNv91kEHq+y/1esKy/dlHFAOlIWrZYaW6Tpufg4FrBHYHfab3IeFgoFQ==", + "version": "22.30.1", + "resolved": "https://registry.npmjs.org/mongodb-data-service/-/mongodb-data-service-22.30.1.tgz", + "integrity": "sha512-VMIYUBY3ImjwA8Q0T3tdTTy7bt4JbY09cuQt0ryPlpaeLceFXwO7muIVV9IKD6ZNJWoyw27hgcIMzl7AH42f1g==", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-logging": "^1.7.2", - "@mongodb-js/compass-utils": "^0.9.2", - "@mongodb-js/devtools-connect": "^3.7.2", - "@mongodb-js/devtools-proxy-support": "^0.4.4", - "bson": "^6.10.3", + "@mongodb-js/compass-logging": "^1.7.11", + "@mongodb-js/compass-utils": "^0.9.10", + "@mongodb-js/devtools-connect": "^3.9.3", + "@mongodb-js/devtools-proxy-support": "^0.5.2", + "bson": "^6.10.4", "lodash": "^4.17.21", - "mongodb": "^6.16.0", + "mongodb": "^6.17.0", "mongodb-build-info": "^1.7.2", "mongodb-connection-string-url": "^3.0.1", "mongodb-ns": "^2.4.2" @@ -20130,8 +21353,139 @@ "dependencies": { "heap-js": "^2.3.0" }, - "peerDependencies": { - "bson": "6.x" + "peerDependencies": { + "bson": "6.x" + } + }, + "node_modules/mongodb-mcp-server": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mongodb-mcp-server/-/mongodb-mcp-server-1.0.0.tgz", + "integrity": "sha512-0pPyYQd2ciwotlMPzvRUwx8suIY2HvVsUOyeR2NN9Zk3kM84hcVR1h2MBOMgMdESfte4jkpXeohtLatlTVd/Gg==", + "license": "Apache-2.0", + "dependencies": { + "@modelcontextprotocol/sdk": "^1.17.4", + "@mongodb-js/device-id": "^0.3.1", + "@mongodb-js/devtools-connect": "^3.9.3", + "@mongodb-js/devtools-proxy-support": "^0.5.2", + "@mongosh/arg-parser": "^3.14.0", + "@mongosh/service-provider-node-driver": "~3.12.0", + "@vitest/eslint-plugin": "^1.3.4", + "bson": "^6.10.4", + "express": "^5.1.0", + "lru-cache": "^11.1.0", + "mongodb": "^6.19.0", + "mongodb-connection-string-url": "^3.0.2", + "mongodb-log-writer": "^2.4.1", + "mongodb-redact": "^1.2.0", + "mongodb-schema": "^12.6.2", + "node-fetch": "^3.3.2", + "node-machine-id": "1.1.12", + "oauth4webapi": "^3.8.0", + "openapi-fetch": "^0.14.0", + "ts-levenshtein": "^1.0.7", + "yargs-parser": "^21.1.1", + "zod": "^3.25.76" + }, + "bin": { + "mongodb-mcp-server": "dist/esm/index.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >= 23.0.0" + }, + "optionalDependencies": { + "kerberos": "^2.2.2" + } + }, + "node_modules/mongodb-mcp-server/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/mongodb-mcp-server/node_modules/kerberos": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/kerberos/-/kerberos-2.2.2.tgz", + "integrity": "sha512-42O7+/1Zatsc3MkxaMPpXcIl/ukIrbQaGoArZEAr6GcEi2qhfprOBYOPhj+YvSMJkEkdpTjApUx+2DuWaKwRhg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.2" + }, + "engines": { + "node": ">=12.9.0" + } + }, + "node_modules/mongodb-mcp-server/node_modules/lru-cache": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.1.tgz", + "integrity": "sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/mongodb-mcp-server/node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT", + "optional": true + }, + "node_modules/mongodb-mcp-server/node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "license": "MIT", + "optional": true + }, + "node_modules/mongodb-mcp-server/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/mongodb-mcp-server/node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/mongodb-ns": { @@ -20140,12 +21494,12 @@ "integrity": "sha512-gYJjEYG4v4a1WSXgUf81OBoBRlj+Z1SlnQVO392fC/4a1CN7CLWDITajZWPFTPh/yRozYk6sHHtZwZmQhodBEA==" }, "node_modules/mongodb-query-parser": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/mongodb-query-parser/-/mongodb-query-parser-4.4.0.tgz", - "integrity": "sha512-cml9BAy+BIEiCIOsq8V/EhsRTJjA6iMpD+0/Nr30jBAF8ptLtJS91qv/Q6lD4diNODXvHQuUu3VDdPwXqbzN6w==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/mongodb-query-parser/-/mongodb-query-parser-4.4.2.tgz", + "integrity": "sha512-QHLojfyklUqzQz0eU0xWj6cJrbmOGLzkdErpoYa2X/UBrRWxuRT/BWY++m0sONku0HTzTFnYaOK84dB0T7hBCg==", "license": "Apache-2.0", "dependencies": { - "@mongodb-js/shell-bson-parser": "^1.3.0", + "@mongodb-js/shell-bson-parser": "^1.3.1", "debug": "^4.4.0", "javascript-stringify": "^2.1.0", "lodash": "^4.17.21" @@ -20155,24 +21509,25 @@ } }, "node_modules/mongodb-rag-core": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/mongodb-rag-core/-/mongodb-rag-core-0.7.0.tgz", - "integrity": "sha512-fjW67idOhsyAb5l6UiulxYZAltpcyHUjfeWhx6nWF9H/PnAnZaBQ6KwfHnXDRi0uQjIVNujeuSez2j5usU0pAg==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/mongodb-rag-core/-/mongodb-rag-core-0.7.1.tgz", + "integrity": "sha512-MM5wY1VWgtX5JO/qv3XiYQRST8YgJ5eacl98Ps99gqfM/naJnvWkmCUXj1YHO4Caz9V5TsZBeqbv4dq02+2cLQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@ai-sdk/azure": "^1.3.23", - "@ai-sdk/openai": "^1.3.22", + "@ai-sdk/azure": "2.0.0-beta.13", + "@ai-sdk/openai": "2.0.0-beta.13", "@apidevtools/swagger-parser": "^10.1.0", "@langchain/anthropic": "^0.3.6", "@langchain/community": "^0.3.10", "@langchain/core": "^0.3.15", "@langchain/openai": "^0.3.11", + "@opendocsg/pdf2md": "^0.2.1", "@supercharge/promise-pool": "^3.2.0", "acquit": "^1.3.0", "acquit-require": "^0.1.1", - "ai": "^4.3.15", - "braintrust": "^0.0.193", + "ai": "5.0.0-beta.28", + "braintrust": "^0.2.1", "common-tags": "^1", "deep-equal": "^2.2.3", "dotenv": "^16.3.1", @@ -20184,7 +21539,8 @@ "ignore": "^5.3.2", "langchain": "^0.3.5", "mongodb": "^6.3.0", - "openai": "^4.95.0", + "openai": "^5.9.1", + "pdfjs-dist": "^5.3.93", "rimraf": "^6.0.1", "simple-git": "^3.27.0", "toml": "^3.0.0", @@ -20859,16 +22215,6 @@ "node": ">=14.0.0" } }, - "node_modules/mongodb-rag-core/node_modules/@types/node": { - "version": "18.19.75", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.75.tgz", - "integrity": "sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, "node_modules/mongodb-rag-core/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -20950,20 +22296,11 @@ } }, "node_modules/mongodb-rag-core/node_modules/openai": { - "version": "4.96.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.96.0.tgz", - "integrity": "sha512-dKoW56i02Prv2XQolJ9Rl9Svqubqkzg3QpwEOBuSVZLk05Shelu7s+ErRTwFc1Bs3JZ2qBqBfVpXQiJhwOGG8A==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-5.15.0.tgz", + "integrity": "sha512-kcUdws8K/A8m02I+IqFBwO51gS+87GP89yWEufGbzEi8anBz4FB/bti2QxaJdGwwY4mwJGzx85XO7TuL/Tpu1w==", "dev": true, "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" }, @@ -21051,19 +22388,22 @@ } }, "node_modules/mongodb-redact": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/mongodb-redact/-/mongodb-redact-1.1.8.tgz", - "integrity": "sha512-EbZ+q7LsVz7q8n49mGIcXgP2UiBp6R6vHEVbmGnF21ThCnP6AIho7wqpHqyjqqGjg54DoXQJTCwHPSknsCHv6g==", - "license": "Apache-2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mongodb-redact/-/mongodb-redact-1.2.0.tgz", + "integrity": "sha512-UVJBlVNEF/8UhZ/SwR+KJXqf6pVY0b0M9aBa+1cwdRAoFFqH5NZUhMdzaXCCvhY2hoPtZ32Z7vYMoDl6Msmm/g==", + "license": "Apache-2.0", + "dependencies": { + "regexp.escape": "^2.0.1" + } }, "node_modules/mongodb-runner": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-5.9.0.tgz", - "integrity": "sha512-31oyYEmLvkuqDV9J9kuwwOE2SHV1LaPyqr+fZsgYT56ceynqq4ABUOXmmdZBXm3zdLM1QGUft5UJokkkhXGPCQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-5.9.2.tgz", + "integrity": "sha512-Pryl9atS+lXpKzL6Xy6gmLSfTfgzmUWfbcaQY3wJV6EjaAV14v0HrWajQNwmg//NQvoJ9zZU84izkFrG343vVg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@mongodb-js/mongodb-downloader": "^0.4.0", + "@mongodb-js/mongodb-downloader": "^0.4.2", "@mongodb-js/saslprep": "^1.3.0", "debug": "^4.4.0", "mongodb": "^6.9.0", @@ -21106,15 +22446,6 @@ "node": ">=12" } }, - "node_modules/mongodb-runner/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/mongodb-schema": { "version": "12.6.2", "resolved": "https://registry.npmjs.org/mongodb-schema/-/mongodb-schema-12.6.2.tgz", @@ -21188,15 +22519,6 @@ "node": ">=12" } }, - "node_modules/mongodb-schema/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "optional": true, - "engines": { - "node": ">=12" - } - }, "node_modules/mrmime": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", @@ -21296,8 +22618,7 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/natural-compare-lite": { "version": "1.4.0", @@ -21316,9 +22637,10 @@ } }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "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" } @@ -21333,6 +22655,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -21585,6 +22908,23 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -21797,15 +23137,45 @@ } }, "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" } }, "node_modules/nth-check": { @@ -21864,6 +23234,15 @@ "node": ">= 6" } }, + "node_modules/oauth4webapi": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.1.tgz", + "integrity": "sha512-olkZDELNycOWQf9LrsELFq8n05LwJgV8UkrS0cburk6FOwf8GvLam+YB+Uj5Qvryee+vwWOfQVeI5Vm0MVg7SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -21876,14 +23255,16 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "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" }, @@ -21915,13 +23296,16 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -21993,9 +23377,10 @@ } }, "node_modules/oidc-token-hash": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", - "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.1.1.tgz", + "integrity": "sha512-D7EmwxJV6DsEB6vOFLrBM2OzsVgQzgPWyHlV2OOAVj772n+WTXpudC9e9u5BVKQnYwaD30Ivhi9b+4UeBcGu9g==", + "license": "MIT", "engines": { "node": "^10.13.0 || >=12.0.0" } @@ -22044,17 +23429,18 @@ } }, "node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "license": "MIT", "dependencies": { - "default-browser": "^4.0.0", + "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" + "wsl-utils": "^0.1.0" }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -22095,6 +23481,15 @@ "undici-types": "~5.26.4" } }, + "node_modules/openapi-fetch": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/openapi-fetch/-/openapi-fetch-0.14.0.tgz", + "integrity": "sha512-PshIdm1NgdLvb05zp8LqRQMNSKzIlPkyMxYFxwyHR+UlKD4t2nUjkDhNxeRbhRSEd3x5EUNh2w5sJYwkhOH4fg==", + "license": "MIT", + "dependencies": { + "openapi-typescript-helpers": "^0.0.15" + } + }, "node_modules/openapi-types": { "version": "12.1.3", "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", @@ -22102,27 +23497,33 @@ "dev": true, "license": "MIT" }, + "node_modules/openapi-typescript-helpers": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/openapi-typescript-helpers/-/openapi-typescript-helpers-0.0.15.tgz", + "integrity": "sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==", + "license": "MIT" + }, "node_modules/openapi3-ts": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-4.4.0.tgz", - "integrity": "sha512-9asTNB9IkKEzWMcHmVZE7Ts3kC9G7AFHfs8i7caD8HbI76gEjdkId4z/AkP83xdZsH7PLAnnbl47qZkXuxpArw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-4.5.0.tgz", + "integrity": "sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==", "dev": true, "license": "MIT", "dependencies": { - "yaml": "^2.5.0" + "yaml": "^2.8.0" } }, "node_modules/openapi3-ts/node_modules/yaml": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", - "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" } }, "node_modules/opener": { @@ -22135,40 +23536,22 @@ } }, "node_modules/openid-client": { - "version": "5.6.5", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.6.5.tgz", - "integrity": "sha512-5P4qO9nGJzB5PI0LFlhj4Dzg3m4odt0qsJTfyEtZyOlkgpILwEioOhVVJOrS1iVH494S4Ee5OCjjg6Bf5WOj3w==", + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.6.4.tgz", + "integrity": "sha512-PLWVhRksRnNH05sqeuCX/PR+1J70NyZcAcPske+FeF732KKONd3v0p5Utx1ro1iLfCglH8B3/+dA1vqIHDoIiA==", + "license": "MIT", "dependencies": { - "jose": "^4.15.5", - "lru-cache": "^6.0.0", - "object-hash": "^2.2.0", - "oidc-token-hash": "^5.0.3" + "jose": "^6.0.12", + "oauth4webapi": "^3.7.0" }, "funding": { "url": "https://github.com/sponsors/panva" } }, - "node_modules/openid-client/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/openid-client/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -22290,6 +23673,23 @@ "node": ">=0.10.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", @@ -22389,18 +23789,19 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", - "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.5", + "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.4" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" @@ -22410,6 +23811,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "license": "MIT", "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" @@ -22542,7 +23944,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -22551,7 +23952,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -22610,10 +24010,13 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" + "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" + } }, "node_modules/path-type": { "version": "4.0.0", @@ -22648,6 +24051,19 @@ "node": ">=0.12" } }, + "node_modules/pdfjs-dist": { + "version": "5.4.54", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.4.54.tgz", + "integrity": "sha512-TBAiTfQw89gU/Z4LW98Vahzd2/LoCFprVGvGbTgFt+QCB1F+woyOPmNNVgLa6djX9Z9GGTnj7qE1UzpOVJiINw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=20.16.0 || >=22.3.0" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^0.1.74" + } + }, "node_modules/peek-readable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", @@ -22730,6 +24146,15 @@ "node": ">=0.10.0" } }, + "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/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -22807,6 +24232,15 @@ "node": ">=10" } }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", @@ -22866,7 +24300,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, "engines": { "node": ">= 0.8.0" } @@ -22966,6 +24399,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" @@ -22978,6 +24412,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" } @@ -23045,12 +24480,12 @@ } }, "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==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -23096,7 +24531,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -23158,20 +24592,32 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "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", - "iconv-lite": "0.4.24", + "iconv-lite": "0.6.3", "unpipe": "1.0.0" }, "engines": { "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==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -23508,6 +24954,28 @@ "@babel/runtime": "^7.9.2" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/reflux": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/reflux/-/reflux-0.4.1.tgz", @@ -23542,14 +25010,38 @@ "integrity": "sha512-DOFqA1MF46fmZl2xtzXR3MPCRsXqgoFqdXcrCVYM3JNnfUeHTm/fh/v/iU7gBFpwkuBmoJPAm5GuhdDfSEJMJA==", "license": "MIT" }, + "node_modules/regexp.escape": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexp.escape/-/regexp.escape-2.0.1.tgz", + "integrity": "sha512-JItRb4rmyTzmERBkAf6J87LjDPy/RscIwmaJQ3gsFlAzrmZbZU8LwBw5IydFZXW9hqpgbPlGbMhtpqtuAhMgtg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "for-each": "^0.3.3", + "safe-regex-test": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -23730,7 +25222,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -23755,7 +25246,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -23801,6 +25291,22 @@ "license": "BSD-3-Clause", "optional": true }, + "node_modules/router": { + "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", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/rrweb-cssom": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", @@ -23809,14 +25315,12 @@ "license": "MIT" }, "node_modules/run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", - "dependencies": { - "execa": "^5.0.0" - }, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -23835,7 +25339,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -23872,6 +25375,31 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -23891,15 +25419,40 @@ } ] }, - "node_modules/safe-regex-test": { + "node_modules/safe-push-apply": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -23969,13 +25522,6 @@ "node": ">=4" } }, - "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==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/seek-bzip": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", @@ -24022,51 +25568,46 @@ "devOptional": true }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/send/node_modules/mime-db": { + "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", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">= 0.6" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/send/node_modules/mime-types": { + "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" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, "node_modules/serialize-error": { @@ -24095,20 +25636,28 @@ } }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "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", - "parseurl": "~1.3.3", - "send": "0.19.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" } }, + "node_modules/set-blocking": { + "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, + "license": "ISC", + "optional": true + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -24126,13 +25675,29 @@ } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -24204,14 +25769,69 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "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": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "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", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "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", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -24271,15 +25891,15 @@ } }, "node_modules/simple-git": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.27.0.tgz", - "integrity": "sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==", + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.28.0.tgz", + "integrity": "sha512-Rs/vQRwsn1ILH1oBUy8NucJlXmnnLeLCfcvbSehkPzbv3wwoFWIdtfd6Ndo6ZPhlPsCZ60CPI4rxurnwAa+a2w==", "dev": true, "license": "MIT", "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.3.5" + "debug": "^4.4.0" }, "funding": { "type": "github", @@ -24498,11 +26118,12 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", + "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" }, @@ -24655,19 +26276,6 @@ "nan": "^2.18.0" } }, - "node_modules/sswr": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sswr/-/sswr-2.2.0.tgz", - "integrity": "sha512-clTszLPZkmycALTHD1mXGU+mOtA/MIoLgS1KGTTzFNVm9rytQVykgRaP+z1zl572cz0bTqj4rFVoC2N+IGK4Sg==", - "dev": true, - "license": "MIT", - "dependencies": { - "swrev": "^4.0.0" - }, - "peerDependencies": { - "svelte": "^4.0.0 || ^5.0.0" - } - }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -24696,9 +26304,9 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -24754,11 +26362,13 @@ } }, "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", "dependencies": { - "internal-slot": "^1.0.4" + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -24936,14 +26546,18 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -24953,28 +26567,35 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -24984,7 +26605,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -25028,6 +26648,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -25052,7 +26673,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "engines": { "node": ">=8" }, @@ -25119,65 +26739,16 @@ "engines": { "node": ">=8" } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svelte": { - "version": "5.28.2", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.28.2.tgz", - "integrity": "sha512-FbWBxgWOpQfhKvoGJv/TFwzqb4EhJbwCD17dB0tEpQiw1XyUEKZJtgm4nA4xq3LLsMo7hu5UY/BOFmroAxKTMg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@jridgewell/sourcemap-codec": "^1.5.0", - "@sveltejs/acorn-typescript": "^1.0.5", - "@types/estree": "^1.0.5", - "acorn": "^8.12.1", - "aria-query": "^5.3.1", - "axobject-query": "^4.1.0", - "clsx": "^2.1.1", - "esm-env": "^1.2.1", - "esrap": "^1.4.6", - "is-reference": "^3.0.3", - "locate-character": "^3.0.0", - "magic-string": "^0.30.11", - "zimmerframe": "^1.1.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/svelte/node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/svelte/node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "dev": true, - "license": "MIT", - "peer": true, + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/svg-pathdata": { @@ -25282,37 +26853,6 @@ "url": "https://github.com/fontello/svg2ttf?sponsor=1" } }, - "node_modules/swr": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.3.tgz", - "integrity": "sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==", - "dev": true, - "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/swrev": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/swrev/-/swrev-4.0.0.tgz", - "integrity": "sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/swrv": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/swrv/-/swrv-1.1.0.tgz", - "integrity": "sha512-pjllRDr2s0iTwiE5Isvip51dZGR7GjLH1gCSVyE8bQnbAx6xackXsFdojau+1O5u98yHF5V73HQGOFxKUXO9gQ==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "vue": ">=3.2.26 < 4" - } - }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -25323,6 +26863,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/system-ca/-/system-ca-2.0.1.tgz", "integrity": "sha512-9ZDV9yl8ph6Op67wDGPr4LykX86usE9x3le+XZSHfVMiiVJ5IRgmCWjLgxyz35ju9H3GDIJJZm4ogAeIfN5cQQ==", + "license": "Apache-2.0", "optionalDependencies": { "macos-export-certificate-and-key": "^1.2.0", "win-export-certificate-and-key": "^2.1.0" @@ -25685,21 +27226,7 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/throttleit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", - "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/through": { "version": "2.3.8", @@ -25755,6 +27282,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -25778,9 +27306,24 @@ "dev": true }, "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, @@ -25894,6 +27437,24 @@ "node": ">= 14.0.0" } }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-levenshtein": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ts-levenshtein/-/ts-levenshtein-1.0.7.tgz", + "integrity": "sha512-wautEf7gl2ITJuRTTYxnlrLjzUUcwFSdg46bcu4RlzoE/zQM++TJjBFRf2Xhil49GiHqKCqmpjf1lBkWnAHj0A==", + "license": "MIT" + }, "node_modules/ts-loader": { "version": "9.5.1", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", @@ -26097,7 +27658,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -26128,27 +27688,109 @@ } }, "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "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": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { "node": ">= 0.6" } }, - "node_modules/typed-array-length": { + "node_modules/type-is/node_modules/mime-db": { + "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" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "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" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -26166,16 +27808,16 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/uc.micro": { @@ -26186,15 +27828,18 @@ "license": "MIT" }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -26263,6 +27908,16 @@ "node": ">= 4.0.0" } }, + "node_modules/unpdf": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/unpdf/-/unpdf-0.12.2.tgz", + "integrity": "sha512-3eyDFfayk+Sf5+inJ4OyhecR2BtRFEeZqUfGPdq2O8aBLau9MYL9lAP+GEcSAaVd2JWqde8Dnz38z0x7KRglaA==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "canvas": "^2.11.2" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -26276,6 +27931,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "license": "MIT", "engines": { "node": ">=8" } @@ -26313,7 +27969,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -26354,9 +28009,9 @@ "dev": true }, "node_modules/use-sync-external-store": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", - "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", + "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" @@ -26386,6 +28041,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -26434,6 +28090,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" } @@ -26514,29 +28171,6 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" }, - "node_modules/vue": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", - "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-sfc": "3.5.13", - "@vue/runtime-dom": "3.5.13", - "@vue/server-renderer": "3.5.13", - "@vue/shared": "3.5.13" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/w3c-keyname": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", @@ -26962,44 +28596,88 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -27008,6 +28686,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", @@ -27019,6 +28708,7 @@ "resolved": "https://registry.npmjs.org/win-export-certificate-and-key/-/win-export-certificate-and-key-2.1.0.tgz", "integrity": "sha512-WeMLa/2uNZcS/HWGKU2G1Gzeh3vHpV/UFvwLhJLKxPHYFAbubxxVcJbqmPXaqySWK1Ymymh16zKK5WYIJ3zgzA==", "hasInstallScript": true, + "license": "Apache-2.0", "optional": true, "os": [ "win32" @@ -27032,6 +28722,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "license": "MIT", "optional": true }, "node_modules/winston": { @@ -27244,6 +28935,36 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", @@ -27379,12 +29100,12 @@ } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-unparser": { @@ -27411,6 +29132,16 @@ "node": ">=8" } }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -27442,7 +29173,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "engines": { "node": ">=10" }, @@ -27450,19 +29180,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/zimmerframe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", - "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/zod": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", - "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==", - "dev": true, + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -27472,7 +29193,6 @@ "version": "3.24.1", "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.1.tgz", "integrity": "sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==", - "dev": true, "license": "ISC", "peerDependencies": { "zod": "^3.24.1" diff --git a/package.json b/package.json index f99cc2621..f9a7c2308 100644 --- a/package.json +++ b/package.json @@ -72,8 +72,8 @@ "precommit": "ts-node ./scripts/precommit.ts" }, "engines": { - "vscode": "^1.94.2", - "node": ">=20.9.0", + "vscode": "^1.101.1", + "node": "^20.19.0 || ^22.12.0 || >= 23.0.0", "npm": ">=10.1.0" }, "activationEvents": [ @@ -521,6 +521,18 @@ { "command": "mdb.dropStreamProcessor", "title": "Drop Stream Processor..." + }, + { + "command": "mdb.startMCPServer", + "title": "MongoDB: Start MCP Server" + }, + { + "command": "mdb.stopMCPServer", + "title": "MongoDB: Stop MCP Server" + }, + { + "command": "mdb.getMCPServerConfig", + "title": "MongoDB: Get MCP Server Config" } ], "menus": { @@ -1282,6 +1294,64 @@ "type": "boolean", "default": true, "description": "Specify whether to show the overview page immediately after installing the extension." + }, + "mdb.mcp.apiBaseUrl": { + "type": "string", + "default": "https://cloud.mongodb.com/", + "description": "API URL of MongoDB Atlas to be used by MongoDB MCP server for enabling Atlas tools. When empty, it defaults to 'https://cloud.mongodb.com/'. Only change this if you're using a custom Atlas deployment." + }, + "mdb.mcp.apiClientId": { + "type": "string", + "default": "", + "description": "Atlas API client ID for authenticating against Atlas API. Use a Service Account (https://www.mongodb.com/docs/atlas/configure-api-access/#grant-programmatic-access-to-an-organization) for programmatic access to Atlas APIs. Required for enabling Atlas tools in MongoDB MCP server. Store this securely and do not commit to version control." + }, + "mdb.mcp.apiClientSecret": { + "type": "string", + "default": "", + "description": "Atlas API client secret for authenticating against Atlas API. Use a Service Account (https://www.mongodb.com/docs/atlas/configure-api-access/#grant-programmatic-access-to-an-organization) for programmatic access to Atlas APIs. Required for enabling Atlas tools in MongoDB MCP server. Store this securely and do not commit to version control." + }, + "mdb.mcp.disabledTools": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "Tool names, operation types (create, update, delete, read, metadata), and/or categories (atlas, mongodb) to disable in MongoDB MCP server." + }, + "mdb.mcp.readOnly": { + "type": "boolean", + "default": false, + "description": "When set to true, MongoDB MCP server will only allow read, connect, and metadata operation types, disabling create/update/delete operations." + }, + "mdb.mcp.indexCheck": { + "type": "boolean", + "default": false, + "description": "When set to true, MongoDB MCP server enforces that query operations must use an index, rejecting queries that perform a collection scan. This helps prevent performance issues in production environments." + }, + "mdb.mcp.server": { + "type": "string", + "enum": [ + "ask", + "enabled", + "disabled" + ], + "default": "ask", + "description": "Controls whether MongoDB MCP server starts automatically with the extension and connects to the active connection. If automatic startup is disabled, the server can still be started using the 'MongoDB: Start MCP Server' command." + }, + "mdb.mcp.exportsPath": { + "type": "string", + "default": "", + "description": "The directory where the MongoDB MCP server will export the data to when using the export tool. Ensure the path is writable or leave empty to use the default path." + }, + "mdb.mcp.exportTimeoutMs": { + "type": "number", + "default": 300000, + "description": "The time in milliseconds after which the MongoDB MCP server will expire the export. Default is 5 minutes (300000ms)." + }, + "mdb.mcp.exportCleanupIntervalMs": { + "type": "number", + "default": 120000, + "description": "Controls how often the MongoDB MCP server runs the export cleanup process to remove expired files (in milliseconds). Default is 2 minutes (120000ms)." } } }, @@ -1314,21 +1384,27 @@ "fontCharacter": "\\ea04" } } - } + }, + "mcpServerDefinitionProviders": [ + { + "id": "mongodb", + "label": "MongoDB MCP Server Definition Provider" + } + ] }, "dependencies": { "@babel/core": "^7.25.8", "@babel/parser": "^7.25.8", "@babel/traverse": "^7.25.7", "@mongodb-js/compass-components": "^1.38.1", - "@mongodb-js/connection-form": "1.52.3", - "@mongodb-js/connection-info": "^0.15.0", - "@mongodb-js/device-id": "^0.3.0", - "@mongodb-js/mongodb-constants": "^0.11.1", + "@mongodb-js/connection-form": "^1.52.3", + "@mongodb-js/connection-info": "^0.17.1", + "@mongodb-js/device-id": "^0.3.1", + "@mongodb-js/mongodb-constants": "^0.14.0", "@mongosh/browser-runtime-electron": "^3.18.0", "@mongosh/i18n": "^2.13.1", "@mongosh/service-provider-node-driver": "^3.12.0", - "@mongosh/shell-api": "^3.13.0", + "@mongosh/shell-api": "^3.18.0", "@segment/analytics-node": "^1.3.0", "bson": "^6.10.4", "debug": "^4.3.7", @@ -1336,13 +1412,14 @@ "ejson-shell-parser": "^2.0.1", "lodash": "^4.17.21", "micromatch": "^4.0.8", - "mongodb": "^6.18.0", + "mongodb": "^6.19.0", "mongodb-build-info": "^1.7.2", - "mongodb-cloud-info": "^2.2.0", + "mongodb-cloud-info": "^2.2.2", "mongodb-connection-string-url": "^3.0.2", - "mongodb-data-service": "^22.25.5", + "mongodb-data-service": "^22.30.1", "mongodb-log-writer": "^2.4.1", - "mongodb-query-parser": "^4.4.0", + "mongodb-mcp-server": "^1.0.0", + "mongodb-query-parser": "^4.4.2", "mongodb-schema": "^12.6.2", "node-machine-id": "1.1.12", "numeral": "^2.0.6", @@ -1358,30 +1435,30 @@ "devDependencies": { "@babel/preset-typescript": "^7.25.7", "@babel/types": "^7.25.8", - "@mongodb-js/oidc-mock-provider": "^0.11.0", - "@mongodb-js/oidc-plugin": "^1.1.8", + "@mongodb-js/oidc-mock-provider": "^0.11.3", + "@mongodb-js/oidc-plugin": "^2.0.3", "@mongodb-js/prettier-config-devtools": "^1.0.2", "@mongodb-js/sbom-tools": "^0.8.1", "@mongodb-js/signing-utils": "^0.4.0", - "@mongosh/service-provider-core": "^3.3.3", + "@mongosh/service-provider-core": "^3.3.5", "@testing-library/react": "^14.3.1", "@testing-library/user-event": "^14.5.2", "@types/babel__traverse": "^7.20.6", "@types/chai": "^4.3.20", + "@types/chai-as-promised": "^8.0.2", "@types/debug": "^4.1.12", "@types/glob": "^7.2.0", "@types/lodash": "^4.17.14", "@types/micromatch": "^4.0.9", - "@types/mkdirp": "^2.0.0", "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", + "@types/node": "^20.19.0", "@types/prettier": "^2.7.3", "@types/react": "^17.0.83", "@types/react-dom": "^17.0.25", "@types/sinon": "^9.0.11", "@types/sinon-chai": "^3.2.12", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.94.0", + "@types/vscode": "^1.101.1", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "@vscode/test-electron": "^2.4.1", @@ -1404,9 +1481,9 @@ "mocha": "^10.7.3", "mocha-junit-reporter": "^2.2.1", "mocha-multi": "^1.1.7", - "mongodb-client-encryption": "^6.4.0", - "mongodb-rag-core": "^0.7.0", - "mongodb-runner": "^5.9.0", + "mongodb-client-encryption": "^6.5.0", + "mongodb-rag-core": "^0.7.1", + "mongodb-runner": "^5.9.2", "node-fetch": "^2.7.0", "node-loader": "^0.6.0", "npm-run-all": "^4.1.5", @@ -1423,7 +1500,7 @@ "terser-webpack-plugin": "^5.3.10", "ts-loader": "^9.5.1", "ts-node": "^10.9.2", - "typescript": "^4.9.5", + "typescript": "^5.9.2", "webfont": "^11.2.26", "webpack": "^5.95.0", "webpack-bundle-analyzer": "^4.10.2", diff --git a/src/commands/index.ts b/src/commands/index.ts index 348189649..6d0439853 100644 --- a/src/commands/index.ts +++ b/src/commands/index.ts @@ -84,6 +84,11 @@ enum EXTENSION_COMMANDS { SELECT_COLLECTION_WITH_PARTICIPANT = 'mdb.selectCollectionWithParticipant', PARTICIPANT_OPEN_RAW_SCHEMA_OUTPUT = 'mdb.participantViewRawSchemaOutput', SHOW_EXPORT_TO_LANGUAGE_RESULT = 'mdb.showExportToLanguageResult', + + // MCP Server commands. + START_MCP_SERVER = 'mdb.startMCPServer', + STOP_MCP_SERVER = 'mdb.stopMCPServer', + GET_MCP_SERVER_CONFIG = 'mdb.getMCPServerConfig', } export type ExtensionCommand = EXTENSION_COMMANDS; diff --git a/src/connectionController.ts b/src/connectionController.ts index e103ae516..e0f7a58ba 100644 --- a/src/connectionController.ts +++ b/src/connectionController.ts @@ -39,9 +39,9 @@ const log = createLogger('connection controller'); const MAX_CONNECTION_NAME_LENGTH = 512; -export enum DataServiceEventTypes { - CONNECTIONS_DID_CHANGE = 'CONNECTIONS_DID_CHANGE', - ACTIVE_CONNECTION_CHANGED = 'ACTIVE_CONNECTION_CHANGED', +interface DataServiceEventTypes { + CONNECTIONS_DID_CHANGE: []; + ACTIVE_CONNECTION_CHANGED: []; } export enum ConnectionTypes { @@ -79,6 +79,8 @@ interface NewConnectionParams { reuseExisting?: boolean; } +export const DEFAULT_TELEMETRY_APP_NAME = `${packageJSON.name} ${packageJSON.version}`; + function isOIDCAuth(connectionString: string): boolean { const authMechanismString = ( new ConnectionString(connectionString).searchParams.get('authMechanism') || @@ -156,7 +158,8 @@ export default class ConnectionController { private _statusView: StatusView; // Used by other parts of the extension that respond to changes in the connections. - private eventEmitter: EventEmitter = new EventEmitter(); + private eventEmitter: EventEmitter = + new EventEmitter(); constructor({ statusView, @@ -231,7 +234,7 @@ export default class ConnectionController { } if (loadedConnections.length) { - this.eventEmitter.emit(DataServiceEventTypes.CONNECTIONS_DID_CHANGE); + this.eventEmitter.emit('CONNECTIONS_DID_CHANGE'); } // TODO: re-enable with fewer 'Saved Connections Loaded' events @@ -439,7 +442,7 @@ export default class ConnectionController { }); this._connectionAttempt = connectionAttempt; this._connectingConnectionId = connectionId; - this.eventEmitter.emit(DataServiceEventTypes.CONNECTIONS_DID_CHANGE); + this.eventEmitter.emit('CONNECTIONS_DID_CHANGE'); if (this._activeDataService) { log.info('Disconnecting from the previous connection...', { @@ -480,7 +483,7 @@ export default class ConnectionController { const connectionOptions = adjustConnectionOptionsBeforeConnect({ connectionOptions: connectionInfo.connectionOptions, connectionId, - defaultAppName: `${packageJSON.name} ${packageJSON.version}`, + defaultAppName: DEFAULT_TELEMETRY_APP_NAME, notifyDeviceFlow, preferences: { forceConnectionOptions: [], @@ -531,7 +534,7 @@ export default class ConnectionController { this._connectingConnectionId = null; } - this.eventEmitter.emit(DataServiceEventTypes.CONNECTIONS_DID_CHANGE); + this.eventEmitter.emit('CONNECTIONS_DID_CHANGE'); } log.info('Successfully connected', { connectionId }); @@ -547,7 +550,7 @@ export default class ConnectionController { this._connectingConnectionId = null; this._connections[connectionId].lastUsed = new Date(); - this.eventEmitter.emit(DataServiceEventTypes.ACTIVE_CONNECTION_CHANGED); + this.eventEmitter.emit('ACTIVE_CONNECTION_CHANGED'); await this._connectionStorage.saveConnection( this._connections[connectionId], ); @@ -721,8 +724,8 @@ export default class ConnectionController { this._disconnecting = true; this._statusView.showMessage('Disconnecting from current connection...'); - this.eventEmitter.emit(DataServiceEventTypes.CONNECTIONS_DID_CHANGE); - this.eventEmitter.emit(DataServiceEventTypes.ACTIVE_CONNECTION_CHANGED); + this.eventEmitter.emit('CONNECTIONS_DID_CHANGE'); + this.eventEmitter.emit('ACTIVE_CONNECTION_CHANGED'); if (!this._activeDataService) { log.error('Unable to disconnect: no active connection'); @@ -766,7 +769,7 @@ export default class ConnectionController { delete this._connections[connectionId]; await this._connectionStorage.removeConnection(connectionId); - this.eventEmitter.emit(DataServiceEventTypes.CONNECTIONS_DID_CHANGE); + this.eventEmitter.emit('CONNECTIONS_DID_CHANGE'); } // Prompts the user to remove the connection then removes it on affirmation. @@ -957,8 +960,8 @@ export default class ConnectionController { } this._connections[connectionId].name = inputtedConnectionName; - this.eventEmitter.emit(DataServiceEventTypes.CONNECTIONS_DID_CHANGE); - this.eventEmitter.emit(DataServiceEventTypes.ACTIVE_CONNECTION_CHANGED); + this.eventEmitter.emit('CONNECTIONS_DID_CHANGE'); + this.eventEmitter.emit('ACTIVE_CONNECTION_CHANGED'); await this._connectionStorage.saveConnection( this._connections[connectionId], @@ -969,14 +972,14 @@ export default class ConnectionController { } addEventListener( - eventType: DataServiceEventTypes, + eventType: keyof DataServiceEventTypes, listener: () => void, ): void { this.eventEmitter.addListener(eventType, listener); } removeEventListener( - eventType: DataServiceEventTypes, + eventType: keyof DataServiceEventTypes, listener: () => void, ): void { this.eventEmitter.removeListener(eventType, listener); diff --git a/src/editors/activeConnectionCodeLensProvider.ts b/src/editors/activeConnectionCodeLensProvider.ts index 5a99af594..f22c5db15 100644 --- a/src/editors/activeConnectionCodeLensProvider.ts +++ b/src/editors/activeConnectionCodeLensProvider.ts @@ -4,7 +4,6 @@ import EXTENSION_COMMANDS from '../commands'; import type ConnectionController from '../connectionController'; import { isPlayground } from '../utils/playground'; import { getDBFromConnectionString } from '../utils/connection-string-db'; -import { DataServiceEventTypes } from '../connectionController'; export default class ActiveConnectionCodeLensProvider implements vscode.CodeLensProvider @@ -28,7 +27,7 @@ export default class ActiveConnectionCodeLensProvider this._onDidChangeCodeLenses.fire(); }; this._connectionController.addEventListener( - DataServiceEventTypes.ACTIVE_CONNECTION_CHANGED, + 'ACTIVE_CONNECTION_CHANGED', this._activeConnectionChangedHandler, ); } @@ -67,7 +66,7 @@ export default class ActiveConnectionCodeLensProvider deactivate(): void { this._connectionController.removeEventListener( - DataServiceEventTypes.ACTIVE_CONNECTION_CHANGED, + 'ACTIVE_CONNECTION_CHANGED', this._activeConnectionChangedHandler, ); } diff --git a/src/editors/memoryFileSystemProvider.ts b/src/editors/memoryFileSystemProvider.ts index 1f44457fc..b9ae00403 100644 --- a/src/editors/memoryFileSystemProvider.ts +++ b/src/editors/memoryFileSystemProvider.ts @@ -219,7 +219,7 @@ export class MemoryFileSystemProvider implements vscode.FileSystemProvider { _emitter = new vscode.EventEmitter(); _bufferedEvents: vscode.FileChangeEvent[] = []; - _fireSoonHandle?: NodeJS.Timer; + _fireSoonHandle?: NodeJS.Timeout; readonly onDidChangeFile: vscode.Event = this._emitter.event; diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index 643934280..e83dc743d 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -5,7 +5,6 @@ import os from 'os'; import type PlaygroundSelectionCodeActionProvider from './playgroundSelectionCodeActionProvider'; import type ConnectionController from '../connectionController'; -import { DataServiceEventTypes } from '../connectionController'; import { createLogger } from '../logging'; import type { ConnectionTreeItem } from '../explorer'; import { CollectionTreeItem } from '../explorer'; @@ -103,7 +102,7 @@ export default class PlaygroundController { void this._activeConnectionChanged(); }; this._connectionController.addEventListener( - DataServiceEventTypes.ACTIVE_CONNECTION_CHANGED, + 'ACTIVE_CONNECTION_CHANGED', this._activeConnectionChangedHandler, ); @@ -684,7 +683,7 @@ export default class PlaygroundController { deactivate(): void { this._connectionController.removeEventListener( - DataServiceEventTypes.ACTIVE_CONNECTION_CHANGED, + 'ACTIVE_CONNECTION_CHANGED', this._activeConnectionChangedHandler, ); } diff --git a/src/explorer/collectionTreeItem.ts b/src/explorer/collectionTreeItem.ts index cae8a3995..72993bce9 100644 --- a/src/explorer/collectionTreeItem.ts +++ b/src/explorer/collectionTreeItem.ts @@ -15,30 +15,30 @@ import SchemaTreeItem from './schemaTreeItem'; function getIconPath( type: string, isExpanded: boolean, -): { light: string; dark: string } { +): { light: vscode.Uri; dark: vscode.Uri } { const LIGHT = path.join(getImagesPath(), 'light'); const DARK = path.join(getImagesPath(), 'dark'); if (type === CollectionTypes.timeseries) { return { - light: path.join(LIGHT, 'collection-timeseries.svg'), - dark: path.join(DARK, 'collection-timeseries.svg'), + light: vscode.Uri.file(path.join(LIGHT, 'collection-timeseries.svg')), + dark: vscode.Uri.file(path.join(DARK, 'collection-timeseries.svg')), }; } else if (type === CollectionTypes.collection) { if (isExpanded) { return { - light: path.join(LIGHT, 'collection-folder-open.svg'), - dark: path.join(DARK, 'collection-folder-open.svg'), + light: vscode.Uri.file(path.join(LIGHT, 'collection-folder-open.svg')), + dark: vscode.Uri.file(path.join(DARK, 'collection-folder-open.svg')), }; } return { - light: path.join(LIGHT, 'collection-folder-closed.svg'), - dark: path.join(DARK, 'collection-folder-closed.svg'), + light: vscode.Uri.file(path.join(LIGHT, 'collection-folder-closed.svg')), + dark: vscode.Uri.file(path.join(DARK, 'collection-folder-closed.svg')), }; } return { - light: path.join(LIGHT, 'view-folder.svg'), - dark: path.join(DARK, 'view-folder.svg'), + light: vscode.Uri.file(path.join(LIGHT, 'view-folder.svg')), + dark: vscode.Uri.file(path.join(DARK, 'view-folder.svg')), }; } @@ -81,7 +81,7 @@ export default class CollectionTreeItem isDropped = false; - iconPath: { light: string; dark: string }; + iconPath: { light: vscode.Uri; dark: vscode.Uri }; constructor({ collection, diff --git a/src/explorer/connectionTreeItem.ts b/src/explorer/connectionTreeItem.ts index f56dc4ea4..ea2d1f2a8 100644 --- a/src/explorer/connectionTreeItem.ts +++ b/src/explorer/connectionTreeItem.ts @@ -18,20 +18,20 @@ export type ConnectionItemContextValue = `${'disconnected' | 'connected'}${ | 'Preset'}ConnectionTreeItem`; function getIconPath(isActiveConnection: boolean): { - light: string; - dark: string; + light: vscode.Uri; + dark: vscode.Uri; } { const LIGHT = path.join(getImagesPath(), 'light'); const DARK = path.join(getImagesPath(), 'dark'); return isActiveConnection ? { - light: path.join(LIGHT, 'connection-active.svg'), - dark: path.join(DARK, 'connection-active.svg'), + light: vscode.Uri.file(path.join(LIGHT, 'connection-active.svg')), + dark: vscode.Uri.file(path.join(DARK, 'connection-active.svg')), } : { - light: path.join(LIGHT, 'connection-inactive.svg'), - dark: path.join(DARK, 'connection-inactive.svg'), + light: vscode.Uri.file(path.join(LIGHT, 'connection-inactive.svg')), + dark: vscode.Uri.file(path.join(DARK, 'connection-inactive.svg')), }; } diff --git a/src/explorer/databaseTreeItem.ts b/src/explorer/databaseTreeItem.ts index c1585300c..c747c1e07 100644 --- a/src/explorer/databaseTreeItem.ts +++ b/src/explorer/databaseTreeItem.ts @@ -8,13 +8,13 @@ import formatError from '../utils/formatError'; import { getImagesPath } from '../extensionConstants'; import type TreeItemParent from './treeItemParentInterface'; -function getIconPath(): { light: string; dark: string } { +function getIconPath(): { light: vscode.Uri; dark: vscode.Uri } { const LIGHT = path.join(getImagesPath(), 'light'); const DARK = path.join(getImagesPath(), 'dark'); return { - light: path.join(LIGHT, 'database.svg'), - dark: path.join(DARK, 'database.svg'), + light: vscode.Uri.file(path.join(LIGHT, 'database.svg')), + dark: vscode.Uri.file(path.join(DARK, 'database.svg')), }; } diff --git a/src/explorer/documentListTreeItem.ts b/src/explorer/documentListTreeItem.ts index 43719261f..d9d511620 100644 --- a/src/explorer/documentListTreeItem.ts +++ b/src/explorer/documentListTreeItem.ts @@ -67,13 +67,13 @@ export const formatDocCount = (count: number): string => { return `${numeral(count).format('0a')}`.toUpperCase(); }; -function getIconPath(): { light: string; dark: string } { +function getIconPath(): { light: vscode.Uri; dark: vscode.Uri } { const LIGHT = path.join(getImagesPath(), 'light'); const DARK = path.join(getImagesPath(), 'dark'); return { - light: path.join(LIGHT, 'documents.svg'), - dark: path.join(DARK, 'documents.svg'), + light: vscode.Uri.file(path.join(LIGHT, 'documents.svg')), + dark: vscode.Uri.file(path.join(DARK, 'documents.svg')), }; } @@ -113,7 +113,7 @@ export default class DocumentListTreeItem isExpanded: boolean; - iconPath: { light: string; dark: string }; + iconPath: { light: vscode.Uri; dark: vscode.Uri }; constructor({ collectionName, diff --git a/src/explorer/explorerController.ts b/src/explorer/explorerController.ts index ca4f659b3..f29154d92 100644 --- a/src/explorer/explorerController.ts +++ b/src/explorer/explorerController.ts @@ -1,7 +1,6 @@ import type * as vscode from 'vscode'; import type ConnectionController from '../connectionController'; -import { DataServiceEventTypes } from '../connectionController'; import ExplorerTreeController from './explorerTreeController'; import { createTrackedTreeView } from '../utils/treeViewHelper'; import type { TelemetryService } from '../telemetry'; @@ -23,7 +22,7 @@ export default class ExplorerController { private createTreeView = (): void => { // Remove the listener that called this function. this._connectionController.removeEventListener( - DataServiceEventTypes.CONNECTIONS_DID_CHANGE, + 'CONNECTIONS_DID_CHANGE', this.createTreeView, ); @@ -41,7 +40,7 @@ export default class ExplorerController { // Listen for a change in connections to occur before we create the tree // so that we show the `viewsWelcome` before any connections are added. this._connectionController.addEventListener( - DataServiceEventTypes.CONNECTIONS_DID_CHANGE, + 'CONNECTIONS_DID_CHANGE', this.createTreeView, ); } diff --git a/src/explorer/explorerTreeController.ts b/src/explorer/explorerTreeController.ts index 387e1eede..135e9a923 100644 --- a/src/explorer/explorerTreeController.ts +++ b/src/explorer/explorerTreeController.ts @@ -1,7 +1,6 @@ import * as vscode from 'vscode'; import type ConnectionController from '../connectionController'; -import { DataServiceEventTypes } from '../connectionController'; import ConnectionTreeItem from './connectionTreeItem'; import { createLogger } from '../logging'; import { DOCUMENT_ITEM } from './documentTreeItem'; @@ -31,7 +30,7 @@ export default class ExplorerTreeController // Subscribe to changes in the connections. this._connectionController.addEventListener( - DataServiceEventTypes.CONNECTIONS_DID_CHANGE, + 'CONNECTIONS_DID_CHANGE', () => { this.refresh(); }, @@ -42,7 +41,7 @@ export default class ExplorerTreeController removeListeners(): void { this._connectionController.removeEventListener( - DataServiceEventTypes.CONNECTIONS_DID_CHANGE, + 'CONNECTIONS_DID_CHANGE', () => { this.refresh(); }, diff --git a/src/explorer/fieldTreeItem.ts b/src/explorer/fieldTreeItem.ts index 61a9a541c..392c5af26 100644 --- a/src/explorer/fieldTreeItem.ts +++ b/src/explorer/fieldTreeItem.ts @@ -135,7 +135,7 @@ function getFieldTypeString(field: SchemaFieldType): string { function getIconPath( field: SchemaFieldType, -): string | { light: string; dark: string } { +): string | { light: vscode.Uri; dark: vscode.Uri } { const LIGHT = path.join(getImagesPath(), 'light'); const DARK = path.join(getImagesPath(), 'dark'); @@ -147,8 +147,8 @@ function getIconPath( } return { - light: path.join(LIGHT, 'schema', `${iconFileName}.svg`), - dark: path.join(DARK, 'schema', `${iconFileName}.svg`), + light: vscode.Uri.file(path.join(LIGHT, 'schema', `${iconFileName}.svg`)), + dark: vscode.Uri.file(path.join(DARK, 'schema', `${iconFileName}.svg`)), }; } @@ -173,7 +173,7 @@ export default class FieldTreeItem isExpanded: boolean; - iconPath: string | { light: string; dark: string }; + iconPath: string | { light: vscode.Uri; dark: vscode.Uri }; constructor({ field, diff --git a/src/explorer/helpTree.ts b/src/explorer/helpTree.ts index ec51ad9d6..5c6d795e2 100644 --- a/src/explorer/helpTree.ts +++ b/src/explorer/helpTree.ts @@ -10,7 +10,7 @@ const HELP_LINK_CONTEXT_VALUE = 'HELP_LINK'; function getIconPath( iconName?: string, -): string | { light: string; dark: string } { +): string | { light: vscode.Uri; dark: vscode.Uri } { if (!iconName || iconName === '') { return ''; } @@ -19,8 +19,8 @@ function getIconPath( const DARK = path.join(getImagesPath(), 'dark'); return { - light: path.join(LIGHT, 'help', `${iconName}.svg`), - dark: path.join(DARK, 'help', `${iconName}.svg`), + light: vscode.Uri.file(path.join(LIGHT, 'help', `${iconName}.svg`)), + dark: vscode.Uri.file(path.join(DARK, 'help', `${iconName}.svg`)), }; } diff --git a/src/explorer/indexListTreeItem.ts b/src/explorer/indexListTreeItem.ts index 1fa1d72ec..7a41ec2aa 100644 --- a/src/explorer/indexListTreeItem.ts +++ b/src/explorer/indexListTreeItem.ts @@ -11,13 +11,13 @@ import type TreeItemParent from './treeItemParentInterface'; const ITEM_LABEL = 'Indexes'; -function getIconPath(): { light: string; dark: string } { +function getIconPath(): { light: vscode.Uri; dark: vscode.Uri } { const LIGHT = path.join(getImagesPath(), 'light'); const DARK = path.join(getImagesPath(), 'dark'); return { - light: path.join(LIGHT, 'indexes.svg'), - dark: path.join(DARK, 'indexes.svg'), + light: vscode.Uri.file(path.join(LIGHT, 'indexes.svg')), + dark: vscode.Uri.file(path.join(DARK, 'indexes.svg')), }; } diff --git a/src/explorer/indexTreeItem.ts b/src/explorer/indexTreeItem.ts index b45c16142..a4a2c6b5b 100644 --- a/src/explorer/indexTreeItem.ts +++ b/src/explorer/indexTreeItem.ts @@ -52,8 +52,8 @@ function getIconNameForIndexKeyType(indexKeyType: IndexKeyType): string { } function getIndexFieldIconPath(indexKeyType: IndexKeyType): { - light: string; - dark: string; + light: vscode.Uri; + dark: vscode.Uri; } { const LIGHT = path.join(getImagesPath(), 'light'); const DARK = path.join(getImagesPath(), 'dark'); @@ -61,8 +61,8 @@ function getIndexFieldIconPath(indexKeyType: IndexKeyType): { const iconName = getIconNameForIndexKeyType(indexKeyType); return { - light: path.join(LIGHT, 'index', `${iconName}.svg`), - dark: path.join(DARK, 'index', `${iconName}.svg`), + light: vscode.Uri.file(path.join(LIGHT, 'index', `${iconName}.svg`)), + dark: vscode.Uri.file(path.join(DARK, 'index', `${iconName}.svg`)), }; } diff --git a/src/explorer/playgroundsTreeItem.ts b/src/explorer/playgroundsTreeItem.ts index cd6afea37..23d305b3b 100644 --- a/src/explorer/playgroundsTreeItem.ts +++ b/src/explorer/playgroundsTreeItem.ts @@ -4,13 +4,13 @@ import { getImagesPath } from '../extensionConstants'; export const PLAYGROUND_ITEM = 'playgroundsTreeItem'; -function getIconPath(): { light: string; dark: string } { +function getIconPath(): { light: vscode.Uri; dark: vscode.Uri } { const LIGHT = path.join(getImagesPath(), 'light'); const DARK = path.join(getImagesPath(), 'dark'); return { - light: path.join(LIGHT, 'file-light.svg'), - dark: path.join(DARK, 'file-light.svg'), + light: vscode.Uri.file(path.join(LIGHT, 'file-light.svg')), + dark: vscode.Uri.file(path.join(DARK, 'file-light.svg')), }; } diff --git a/src/explorer/schemaTreeItem.ts b/src/explorer/schemaTreeItem.ts index 95d2de419..7cad1ed51 100644 --- a/src/explorer/schemaTreeItem.ts +++ b/src/explorer/schemaTreeItem.ts @@ -30,13 +30,13 @@ class ShowAllFieldsTreeItem extends vscode.TreeItem { } } -function getIconPath(): { light: string; dark: string } { +function getIconPath(): { light: vscode.Uri; dark: vscode.Uri } { const LIGHT = path.join(getImagesPath(), 'light'); const DARK = path.join(getImagesPath(), 'dark'); return { - light: path.join(LIGHT, 'schema.svg'), - dark: path.join(DARK, 'schema.svg'), + light: vscode.Uri.file(path.join(LIGHT, 'schema.svg')), + dark: vscode.Uri.file(path.join(DARK, 'schema.svg')), }; } @@ -59,7 +59,7 @@ export default class SchemaTreeItem hasClickedShowMoreFields: boolean; hasMoreFieldsToShow: boolean; - iconPath: { light: string; dark: string }; + iconPath: { light: vscode.Uri; dark: vscode.Uri }; constructor({ collectionName, diff --git a/src/explorer/streamProcessorTreeItem.ts b/src/explorer/streamProcessorTreeItem.ts index d5c058c1d..6983c81fb 100644 --- a/src/explorer/streamProcessorTreeItem.ts +++ b/src/explorer/streamProcessorTreeItem.ts @@ -6,13 +6,13 @@ import formatError from '../utils/formatError'; import { getImagesPath } from '../extensionConstants'; import type TreeItemParent from './treeItemParentInterface'; -function getIconPath(): { light: string; dark: string } { +function getIconPath(): { light: vscode.Uri; dark: vscode.Uri } { const LIGHT = path.join(getImagesPath(), 'light'); const DARK = path.join(getImagesPath(), 'dark'); return { - light: path.join(LIGHT, 'stream-processor.svg'), - dark: path.join(DARK, 'stream-processor.svg'), + light: vscode.Uri.file(path.join(LIGHT, 'stream-processor.svg')), + dark: vscode.Uri.file(path.join(DARK, 'stream-processor.svg')), }; } diff --git a/src/logging.ts b/src/logging.ts index be3295862..37ac5a30c 100644 --- a/src/logging.ts +++ b/src/logging.ts @@ -15,53 +15,33 @@ class Logger implements ILogger { this.name = name; } + private formatMessage(message?: any, ...optionalParams: any[]): string { + return `[${this.name}] ${message} ${optionalParams.length ? util.inspect(optionalParams) : ''}`; + } + public trace(message?: any, ...optionalParams: any[]): void { - this.append( - 'TRACE', - `${message} ${optionalParams ? util.inspect(optionalParams) : ''}`, - ); + Logger.channel.trace(this.formatMessage(message, ...optionalParams)); } public debug(message?: any, ...optionalParams: any[]): void { - this.append( - 'DEBUG', - `${message} ${optionalParams ? util.inspect(optionalParams) : ''}`, - ); + Logger.channel.debug(this.formatMessage(message, ...optionalParams)); } public info(message?: any, ...optionalParams: any[]): void { - this.append( - 'INFO ', - `${message} ${optionalParams ? util.inspect(optionalParams) : ''}`, - ); + Logger.channel.info(this.formatMessage(message, ...optionalParams)); } public warn(message?: any, ...optionalParams: any[]): void { - this.append( - 'WARN ', - `${message} ${optionalParams ? util.inspect(optionalParams) : ''}`, - ); + Logger.channel.warn(this.formatMessage(message, ...optionalParams)); } public error(message?: any, ...optionalParams: any[]): void { - this.append( - 'ERROR', - `${message} ${optionalParams ? util.inspect(optionalParams) : ''}`, - ); + Logger.channel.error(this.formatMessage(message, ...optionalParams)); } public fatal(message?: any, ...optionalParams: any[]): void { - this.append( - 'FATAL', - `${message} ${optionalParams ? util.inspect(optionalParams) : ''}`, - ); - } - - private append(type: string, message: string): void { - // https://code.visualstudio.com/api/references/vscode-api#window.createOutputChannel - - Logger.channel.appendLine( - `${new Date().toISOString()} ${this.name} ${type} ${message}\n`, + Logger.channel.error( + `FATAL: ${this.formatMessage(message, ...optionalParams)}`, ); } } diff --git a/src/mcp/mcpConfig.ts b/src/mcp/mcpConfig.ts new file mode 100644 index 000000000..3de49bd72 --- /dev/null +++ b/src/mcp/mcpConfig.ts @@ -0,0 +1,72 @@ +import { + type UserConfig, + configurableProperties, + defaultUserConfig, +} from 'mongodb-mcp-server'; +import * as vscode from 'vscode'; +import { createLogger } from '../logging'; +// eslint-disable-next-line @typescript-eslint/no-var-requires +const { contributes } = require('../../package.json'); + +const logger = createLogger('mcp-config'); + +export function getMCPConfigFromVSCodeSettings( + packageJsonConfiguredProperties: Record = contributes + ?.configuration?.properties ?? {}, + retrieveMCPConfiguration: () => vscode.WorkspaceConfiguration = (): vscode.WorkspaceConfiguration => + vscode.workspace.getConfiguration('mdb.mcp'), +): Partial { + // We're attempting to: + // 1. Use only the config values for MCP server exposed by VSCode config + // 2. Use only the config values that are relevant for MCP server (all mcp + // config exposed by VSCode does contain some irrelevant config as well, + // such as `server`) + const vscConfiguredProperties = Object.keys(packageJsonConfiguredProperties) + .filter((key) => key.startsWith('mdb.mcp')) + .map((key) => key.replace(/^mdb\.mcp\./, '')) + .filter((property) => configurableProperties.has(property)); + + logger.debug('Will retrieve MCP config for the following properties', { + vscConfiguredProperties, + }); + + const mcpConfiguration = retrieveMCPConfiguration(); + return Object.fromEntries( + vscConfiguredProperties.map((property) => { + const configuredValue = mcpConfiguration.get(property); + return [ + property, + // Most of the MCP config, if not all, consists of non-null configs and it is + // possible for a VSCode config to have a null value edited directly in the + // settings file which is why to safeguard against incorrect values we map + // them at-least to the expected defaults. + mcpConfigValues(property, configuredValue), + ]; + }), + ); +} + +// eslint-disable-next-line complexity +function mcpConfigValues(property: string, configuredValue: unknown): unknown { + switch (property) { + case 'apiBaseUrl': + case 'apiClientId': + case 'apiClientSecret': + case 'exportsPath': { + const trimmedValue = String(configuredValue).trim(); + return typeof configuredValue === 'string' && !!trimmedValue + ? trimmedValue + : defaultUserConfig[property]; + } + case 'disabledTools': + return Array.isArray(configuredValue) + ? configuredValue + : defaultUserConfig.disabledTools; + case 'readOnly': + case 'indexCheck': + case 'exportTimeoutMs': + case 'exportCleanupIntervalMs': + default: + return configuredValue ?? defaultUserConfig[property]; + } +} diff --git a/src/mcp/mcpConnectionErrorHandler.ts b/src/mcp/mcpConnectionErrorHandler.ts new file mode 100644 index 000000000..0844f7a76 --- /dev/null +++ b/src/mcp/mcpConnectionErrorHandler.ts @@ -0,0 +1,68 @@ +import { ErrorCodes, type ConnectionErrorHandler } from 'mongodb-mcp-server'; +import type ConnectionController from '../connectionController'; + +export const createMCPConnectionErrorHandler = ( + connectionController: Pick< + ConnectionController, + 'getSavedConnections' | 'getActiveConnectionName' + >, +): ConnectionErrorHandler => { + return (error) => { + const activeConnectionName = connectionController.getActiveConnectionName(); + const availableConnections = connectionController + .getSavedConnections() + .map(({ name }) => ({ name })); + + const connectionGuidance: string[] = availableConnections.length + ? [ + `Following connections are available in the Sidebar for the user to connect to: ${JSON.stringify(availableConnections)}. Note to LLM: Provide user with the list of connections available and ask them to select a connection in the Sidebar.`, + 'Note to LLM: Alternatively, if the user wish to establish a new MongoDB connection, then ask them to follow our official guide on the following link: https://www.mongodb.com/docs/mongodb-vscode/connect/#create-a-connection', + ] + : [ + 'The user has no connections saved in their MongoDB Extension sidebar.', + 'Note to LLM: Ask the user to follow our official guide on the following link: https://www.mongodb.com/docs/mongodb-vscode/connect/#create-a-connection to connect to a MongoDB cluster.', + ]; + + switch (error.code) { + case ErrorCodes.NotConnectedToMongoDB: + return { + errorHandled: true, + result: { + content: [ + { + type: 'text', + text: 'You need to connect to a MongoDB instance before you can access its data.', + }, + ...connectionGuidance.map<{ type: 'text'; text: string }>( + (text) => ({ type: 'text', text }), + ), + ], + }, + }; + case ErrorCodes.MisconfiguredConnectionString: { + const resolutionGuidance: string[] = [ + 'Note to LLM: Ask the user to reconnect to the desired connection. If the problem persists even after that then advice them to raise an issue on the VSCode project board - https://github.com/mongodb-js/vscode/issues', + ...connectionGuidance, + ]; + return { + errorHandled: true, + result: { + content: [ + { + type: 'text', + text: `MCP server is having trouble connecting to ${activeConnectionName ? activeConnectionName : 'the selected connection in the MongoDB VSCode extension'}.`, + }, + ...resolutionGuidance.map<{ type: 'text'; text: string }>( + (text) => ({ type: 'text', text }), + ), + ], + }, + }; + } + default: + return { + errorHandled: false, + }; + } + }; +}; diff --git a/src/mcp/mcpConnectionManager.ts b/src/mcp/mcpConnectionManager.ts new file mode 100644 index 000000000..91e37afa2 --- /dev/null +++ b/src/mcp/mcpConnectionManager.ts @@ -0,0 +1,166 @@ +import { + ConnectionManager, + type AnyConnectionState, + type ConnectionStateDisconnected, + type LoggerBase, +} from 'mongodb-mcp-server'; +import { + NodeDriverServiceProvider, + type DevtoolsConnectOptions, +} from '@mongosh/service-provider-node-driver'; +import type { ServiceProvider } from '@mongosh/service-provider-core'; +import { isAtlas, isAtlasStream } from 'mongodb-build-info'; +import { MCPLogIds } from './mcpLogIds'; +import ConnectionString from 'mongodb-connection-string-url'; +import { DEFAULT_TELEMETRY_APP_NAME } from '../connectionController'; + +export interface MCPConnectParams { + connectionId: string; + connectionString: string; + connectOptions: DevtoolsConnectOptions; +} + +export const MCP_SERVER_TELEMETRY_APP_NAME_SUFFIX = 'MongoDB MCP Server'; + +type MCPConnectionManagerConfig = { + logger: LoggerBase; + getTelemetryAnonymousId: () => string; +}; + +export class MCPConnectionManager extends ConnectionManager { + private logger: LoggerBase; + private getTelemetryAnonymousId: () => string; + private activeConnection: { + id: string; + provider: ServiceProvider; + } | null = null; + + constructor({ logger, getTelemetryAnonymousId }: MCPConnectionManagerConfig) { + super(); + this.logger = logger; + this.getTelemetryAnonymousId = getTelemetryAnonymousId; + } + + connect(): Promise { + return Promise.reject( + new Error( + // eslint-disable-next-line no-multi-str + "MongoDB MCP Server in MongoDB VSCode extension makes use of the connection that the MongoDB VSCode extension is connected to. \ +To connect, choose a connection from MongoDB VSCode extensions's sidepanel - https://www.mongodb.com/docs/mongodb-vscode/connect/#connect-to-your-mongodb-deployment", + ), + ); + } + + async connectToVSCodeConnection( + connectParams: MCPConnectParams, + ): Promise { + try { + const { connectionId, connectOptions, connectionString } = + this.overridePresetAppName(connectParams); + const serviceProvider = await NodeDriverServiceProvider.connect( + connectionString, + connectOptions, + ); + await serviceProvider.runCommand('admin', { hello: 1 }); + this.activeConnection = { + id: connectionId, + provider: serviceProvider, + }; + return this.changeState('connection-success', { + tag: 'connected', + serviceProvider, + }); + } catch (error) { + this.logger.error({ + id: MCPLogIds.ConnectError, + context: 'vscode-mcp-connection-manager', + message: `Error connecting to VSCode connection - ${error instanceof Error ? error.message : String(error)}`, + }); + return this.changeState('connection-error', { + tag: 'errored', + errorReason: error instanceof Error ? error.message : String(error), + }); + } + } + + async disconnect(): Promise { + try { + await this.activeConnection?.provider?.close(true); + } catch (error) { + this.logger.error({ + id: MCPLogIds.DisconnectError, + context: 'vscode-mcp-connection-manager', + message: `Error disconnecting from VSCode connection - ${error instanceof Error ? error.message : String(error)}`, + }); + } + + this.activeConnection = null; + return this.changeState('connection-close', { + tag: 'disconnected', + }); + } + + async updateConnection( + connectParams: MCPConnectParams | undefined, + ): Promise { + if (connectParams?.connectionId === this.activeConnection?.id) { + return; + } + + await this.disconnect(); + + if (!connectParams) { + return; + } + + if (isAtlasStream(connectParams.connectionString)) { + this.logger.warning({ + id: MCPLogIds.UpdateConnectionError, + context: 'vscode-mcp-connection-manager', + message: 'Attempting a connection to an AtlasStreams.', + }); + this.changeState('connection-error', { + tag: 'errored', + errorReason: + 'MongoDB MCP server does not support connecting to Atlas Streams', + }); + return; + } + + await this.connectToVSCodeConnection(connectParams); + } + + overridePresetAppName(connectParams: MCPConnectParams): MCPConnectParams { + const connectionURL = new ConnectionString(connectParams.connectionString); + const connectOptions: DevtoolsConnectOptions = { + ...connectParams.connectOptions, + }; + const searchParams = + connectionURL.typedSearchParams(); + const appName = searchParams.get('appName'); + + if ( + !appName || + (appName.startsWith(DEFAULT_TELEMETRY_APP_NAME) && + !appName.includes(MCP_SERVER_TELEMETRY_APP_NAME_SUFFIX)) + ) { + const defaultAppName = `${DEFAULT_TELEMETRY_APP_NAME} ${MCP_SERVER_TELEMETRY_APP_NAME_SUFFIX}`; + const telemetryAnonymousId = this.getTelemetryAnonymousId(); + const connectionId = connectParams.connectionId; + const newAppName = isAtlas(connectParams.connectionString) + ? `${defaultAppName}${ + telemetryAnonymousId ? `--${telemetryAnonymousId}` : '' + }--${connectionId}` + : defaultAppName; + + searchParams.set('appName', newAppName); + connectOptions.appName = newAppName; + } + + return { + connectionId: connectParams.connectionId, + connectionString: connectionURL.toString(), + connectOptions, + }; + } +} diff --git a/src/mcp/mcpController.ts b/src/mcp/mcpController.ts new file mode 100644 index 000000000..da1105e9f --- /dev/null +++ b/src/mcp/mcpController.ts @@ -0,0 +1,341 @@ +import * as vscode from 'vscode'; +import type { + LoggerType, + LogLevel, + LogPayload, + UserConfig, + ConnectionManagerFactoryFn, +} from 'mongodb-mcp-server'; +import { + defaultUserConfig, + LoggerBase, + StreamableHttpRunner, + Keychain, + registerGlobalSecretToRedact, +} from 'mongodb-mcp-server'; +import type ConnectionController from '../connectionController'; +import { createLogger } from '../logging'; +import type { MCPConnectParams } from './mcpConnectionManager'; +import { MCPConnectionManager } from './mcpConnectionManager'; +import { createMCPConnectionErrorHandler } from './mcpConnectionErrorHandler'; +import { getMCPConfigFromVSCodeSettings } from './mcpConfig'; + +export type McpServerStartupConfig = 'enabled' | 'disabled'; + +class VSCodeMCPLogger extends LoggerBase { + private readonly _logger = createLogger('mcp-server'); + protected type: LoggerType = 'console'; + protected logCore(level: LogLevel, payload: LogPayload): void { + const logMethod = this.mapToMongoDBLogLevel(level); + + this._logger[logMethod]( + `${payload.id.__value} - ${payload.context}: ${payload.message}`, + ...(payload.attributes ? [payload.attributes] : []), + ); + } +} + +const logger = createLogger('mcp-controller'); + +export type MCPServerInfo = { + runner: StreamableHttpRunner; + headers: Record; +}; + +type MCPControllerConfig = { + context: vscode.ExtensionContext; + connectionController: ConnectionController; + getTelemetryAnonymousId: () => string; +}; + +export class MCPController { + private context: vscode.ExtensionContext; + private connectionController: ConnectionController; + private getTelemetryAnonymousId: () => string; + + private didChangeEmitter = new vscode.EventEmitter(); + private server?: MCPServerInfo; + private mcpConnectionManager?: MCPConnectionManager; + + constructor({ + context, + connectionController, + getTelemetryAnonymousId, + }: MCPControllerConfig) { + this.context = context; + this.connectionController = connectionController; + this.getTelemetryAnonymousId = getTelemetryAnonymousId; + } + + public async activate(): Promise { + this.context.subscriptions.push( + vscode.lm.registerMcpServerDefinitionProvider('mongodb', { + onDidChangeMcpServerDefinitions: this.didChangeEmitter.event, + provideMcpServerDefinitions: () => { + return [this.getServerConfig()].filter((d) => d !== undefined); + }, + resolveMcpServerDefinition: (server: vscode.McpServerDefinition) => { + return server; + }, + }), + ); + + this.connectionController.addEventListener( + 'ACTIVE_CONNECTION_CHANGED', + () => { + void this.onActiveConnectionChanged(); + }, + ); + + if (this.shouldStartMCPServer()) { + await this.startServer(); + void this.notifyOnFirstStart(); + } + } + + public async startServer(): Promise { + try { + // Stop an already running server if any + await this.stopServer(); + + const token = crypto.randomUUID(); + const headers: Record = { + authorization: `Bearer ${token}`, + }; + registerGlobalSecretToRedact(token, 'password'); + + const vscodeConfiguredMCPConfig = getMCPConfigFromVSCodeSettings(); + + const mcpConfig: UserConfig = { + ...defaultUserConfig, + ...vscodeConfiguredMCPConfig, + transport: 'http', + httpPort: 0, + httpHeaders: headers, + disabledTools: Array.from( + new Set([ + 'connect', + ...(vscodeConfiguredMCPConfig.disabledTools ?? []), + ]), + ), + loggers: Array.from( + new Set(['mcp', ...(vscodeConfiguredMCPConfig.loggers ?? [])]), + ), + }; + + logger.info('Starting MCP server with config', { + ...mcpConfig, + httpHeaders: '', + apiClientId: '', + apiClientSecret: '', + }); + + const createConnectionManager: ConnectionManagerFactoryFn = async ({ + logger, + }) => { + const connectionManager = (this.mcpConnectionManager = + new MCPConnectionManager({ + logger, + getTelemetryAnonymousId: this.getTelemetryAnonymousId, + })); + await this.switchConnectionManagerToCurrentConnection(); + return connectionManager; + }; + + const runner = new StreamableHttpRunner({ + userConfig: mcpConfig, + createConnectionManager, + connectionErrorHandler: createMCPConnectionErrorHandler( + this.connectionController, + ), + additionalLoggers: [new VSCodeMCPLogger(Keychain.root)], + }); + await runner.start(); + + this.server = { + runner, + headers, + }; + this.didChangeEmitter.fire(); + } catch (error) { + // In case of errors we don't want VSCode extension process to crash so we + // silence MCP start errors and instead log them for debugging. + logger.error('Error when attempting to start MCP server', error); + } + } + + public async stopServer(): Promise { + try { + await this.server?.runner.close(); + this.server = undefined; + this.didChangeEmitter.fire(); + } catch (error) { + logger.error('Error when attempting to close the MCP server', error); + } + } + + private async notifyOnFirstStart(): Promise { + try { + if (!this.server) { + // Server was never started so no need to notify + return; + } + + const serverStartConfig = this.getMCPAutoStartConfig(); + + // If the config value is one of the following values means they are + // intentional (either set by user or by this function itself) and we + // should not notify in that case. + const shouldNotNotify = + serverStartConfig === 'enabled' || serverStartConfig === 'disabled'; + + if (shouldNotNotify) { + return; + } + + // We set the auto start already to enabled to not prompt user again for + // this on the next boot. We do it this way because chances are that the + // user might not act on the notification in which case the final update + // will never happen. + await this.setMCPAutoStartConfig('enabled'); + let selectedServerStartConfig: McpServerStartupConfig = 'enabled'; + + const prompt = await vscode.window.showInformationMessage( + 'MongoDB MCP server started automatically and will connect to your active connection. Would you like to keep or disable automatic startup?', + 'Keep', + 'Disable', + ); + + switch (prompt) { + case 'Keep': + default: + // The default happens only when users explicity dismiss the + // notification. + selectedServerStartConfig = 'enabled'; + break; + case 'Disable': { + selectedServerStartConfig = 'disabled'; + await this.stopServer(); + } + } + + await this.setMCPAutoStartConfig(selectedServerStartConfig); + } catch (error) { + logger.error( + 'Error while attempting to emit MCP server started notification', + error, + ); + } + } + + public async openServerConfig(): Promise { + const config = this.getServerConfig(); + if (!config) { + void vscode.window.showErrorMessage( + 'MongoDB MCP Server is not running. Start the server by running "MDB: Start MCP Server" in the command palette.', + ); + return false; + } + + try { + // Does not create a physical file, it only creates a URI from specified component parts. + // An untitled file URI: untitled:/extensionPath/mongodb-mcp-config.json + const documentUri = vscode.Uri.from({ + path: 'mongodb-mcp-config.json', + scheme: 'untitled', + }); + + // Fill in the content + const jsonConfig = JSON.stringify( + { + mcpServers: { + [config.label]: { + url: config.uri.toString(), + headers: config.headers, + }, + }, + }, + null, + 2, + ); + + const edit = new vscode.WorkspaceEdit(); + edit.insert( + documentUri, + new vscode.Position(0, 0), + `// Example config - refer to your IDE's docs for exact configuration details +// Note that the server generates a new authorization header and port every +// time it restarts, so this config will change if vscode or the MCP server +// is restarted. +${jsonConfig}`, + ); + await vscode.workspace.applyEdit(edit); + + // Actually show the editor. + // We open playgrounds by URI to use the secondary `mongodb` extension + // as an identifier that distinguishes them from regular JS files. + const document = await vscode.workspace.openTextDocument(documentUri); + await vscode.languages.setTextDocumentLanguage(document, 'json'); + await vscode.window.showTextDocument(document); + return true; + } catch (error) { + void vscode.window.showErrorMessage( + `Unable to create a config document: ${error}`, + ); + return false; + } + } + + private getServerConfig(): vscode.McpHttpServerDefinition | undefined { + if (!this.server) { + return undefined; + } + + return new vscode.McpHttpServerDefinition( + 'MongoDB MCP Server', + vscode.Uri.parse(`${this.server.runner.serverAddress}/mcp`), + this.server.headers, + ); + } + + private async onActiveConnectionChanged(): Promise { + if (!this.server) { + return; + } + await this.switchConnectionManagerToCurrentConnection(); + } + + private async switchConnectionManagerToCurrentConnection(): Promise { + const connectionId = this.connectionController.getActiveConnectionId(); + const mongoClientOptions = + this.connectionController.getMongoClientConnectionOptions(); + + const connectParams: MCPConnectParams | undefined = + connectionId && mongoClientOptions + ? { + connectionId: connectionId, + connectionString: mongoClientOptions.url, + connectOptions: mongoClientOptions.options, + } + : undefined; + await this.mcpConnectionManager?.updateConnection(connectParams); + } + + private shouldStartMCPServer(): boolean { + return this.getMCPAutoStartConfig() !== 'disabled'; + } + + private getMCPAutoStartConfig(): McpServerStartupConfig | undefined { + return vscode.workspace + .getConfiguration('mdb') + .get('mcp.server'); + } + + private async setMCPAutoStartConfig( + config: McpServerStartupConfig, + ): Promise { + await vscode.workspace + .getConfiguration('mdb') + .update('mcp.server', config, true); + } +} diff --git a/src/mcp/mcpLogIds.ts b/src/mcp/mcpLogIds.ts new file mode 100644 index 000000000..93357c0e4 --- /dev/null +++ b/src/mcp/mcpLogIds.ts @@ -0,0 +1,7 @@ +import { mongoLogId } from 'mongodb-log-writer'; + +export const MCPLogIds = { + ConnectError: mongoLogId(2_000_001), + DisconnectError: mongoLogId(2_000_002), + UpdateConnectionError: mongoLogId(2_000_003), +} as const; diff --git a/src/mdbExtensionController.ts b/src/mdbExtensionController.ts index cebcce663..d633f7eb6 100644 --- a/src/mdbExtensionController.ts +++ b/src/mdbExtensionController.ts @@ -57,6 +57,7 @@ import { } from './telemetry'; import * as queryString from 'query-string'; +import { MCPController } from './mcp/mcpController'; // This class is the top-level controller for our extension. // Commands which the extensions handles are defined in the function `activate`. @@ -82,6 +83,7 @@ export default class MDBExtensionController implements vscode.Disposable { _editDocumentCodeLensProvider: EditDocumentCodeLensProvider; _exportToLanguageCodeLensProvider: ExportToLanguageCodeLensProvider; _participantController: ParticipantController; + _mcpController: MCPController; constructor( context: vscode.ExtensionContext, @@ -165,6 +167,12 @@ export default class MDBExtensionController implements vscode.Disposable { telemetryService: this._telemetryService, }); this._editorsController.registerProviders(); + this._mcpController = new MCPController({ + context, + connectionController: this._connectionController, + getTelemetryAnonymousId: (): string => + this._connectionStorage.getUserAnonymousId(), + }); } subscribeToConfigurationChanges(): void { @@ -185,6 +193,7 @@ export default class MDBExtensionController implements vscode.Disposable { await this._connectionController.loadSavedConnections(); await this._languageServerController.startLanguageServer(); + await this._mcpController.activate(); this.registerCommands(); this.showOverviewPageIfRecentlyInstalled(); @@ -927,6 +936,29 @@ export default class MDBExtensionController implements vscode.Disposable { }, ); this.registerAtlasStreamsTreeViewCommands(); + + this.registerCommand( + EXTENSION_COMMANDS.START_MCP_SERVER, + async (): Promise => { + await this._mcpController.startServer(); + return true; + }, + ); + + this.registerCommand( + EXTENSION_COMMANDS.STOP_MCP_SERVER, + async (): Promise => { + await this._mcpController.stopServer(); + return true; + }, + ); + + this.registerCommand( + EXTENSION_COMMANDS.GET_MCP_SERVER_CONFIG, + (): Promise => { + return this._mcpController.openServerConfig(); + }, + ); } registerAtlasStreamsTreeViewCommands(): void { diff --git a/src/test/ai-accuracy-tests/ai-accuracy-tests.ts b/src/test/ai-accuracy-tests/ai-accuracy-tests.ts index e0d72f1a9..a78c9d165 100644 --- a/src/test/ai-accuracy-tests/ai-accuracy-tests.ts +++ b/src/test/ai-accuracy-tests/ai-accuracy-tests.ts @@ -564,6 +564,11 @@ async function runTest({ const chatCompletion = await aiBackend.runAIChatCompletionGeneration({ messages: messages.map((message) => ({ ...message, + content: message.content + .map((c) => + c instanceof vscode.LanguageModelTextPart ? c.value : c.toString(), + ) + .join(''), role: message.role === vscode.LanguageModelChatMessageRole.User ? 'user' diff --git a/src/test/suite/connectionController.test.ts b/src/test/suite/connectionController.test.ts index 29144d39a..8a443fef2 100644 --- a/src/test/suite/connectionController.test.ts +++ b/src/test/suite/connectionController.test.ts @@ -9,7 +9,6 @@ import ConnectionString from 'mongodb-connection-string-url'; import ConnectionController, { ConnectionTypes, - DataServiceEventTypes, getNotifyDeviceFlowForConnectionAttempt, } from '../../connectionController'; import formatError from '../../utils/formatError'; @@ -230,9 +229,9 @@ suite('Connection Controller Test Suite', function () { options: { autoEncryption: undefined, monitorCommands: true, - applyProxyToOIDC: false, + applyProxyToOIDC: {}, authMechanismProperties: {}, - oidc: { customHttpOptions: {} }, + oidc: {}, productDocsLink: 'https://docs.mongodb.com/mongodb-vscode/?utm_source=vscode&utm_medium=product', productName: 'mongodb-vscode', @@ -499,19 +498,16 @@ suite('Connection Controller Test Suite', function () { const expectedTimesToFire = 2; let connectionsDidChangeEventFiredCount = 0; - testConnectionController.addEventListener( - DataServiceEventTypes.CONNECTIONS_DID_CHANGE, - () => { - connectionsDidChangeEventFiredCount++; - }, - ); + testConnectionController.addEventListener('CONNECTIONS_DID_CHANGE', () => { + connectionsDidChangeEventFiredCount++; + }); await testConnectionController.addNewConnectionStringAndConnect({ connectionString: TEST_DATABASE_URI, }); testConnectionController.removeEventListener( - DataServiceEventTypes.CONNECTIONS_DID_CHANGE, + 'CONNECTIONS_DID_CHANGE', () => {}, ); @@ -526,12 +522,9 @@ suite('Connection Controller Test Suite', function () { const expectedTimesToFire = 3; let connectionsDidChangeEventFiredCount = 0; - testConnectionController.addEventListener( - DataServiceEventTypes.CONNECTIONS_DID_CHANGE, - () => { - connectionsDidChangeEventFiredCount++; - }, - ); + testConnectionController.addEventListener('CONNECTIONS_DID_CHANGE', () => { + connectionsDidChangeEventFiredCount++; + }); await testConnectionController.addNewConnectionStringAndConnect({ connectionString: TEST_DATABASE_URI, @@ -539,7 +532,7 @@ suite('Connection Controller Test Suite', function () { await testConnectionController.disconnect(); testConnectionController.removeEventListener( - DataServiceEventTypes.CONNECTIONS_DID_CHANGE, + 'CONNECTIONS_DID_CHANGE', () => {}, ); @@ -1255,9 +1248,9 @@ suite('Connection Controller Test Suite', function () { options: { autoEncryption: undefined, monitorCommands: true, - applyProxyToOIDC: false, + applyProxyToOIDC: {}, authMechanismProperties: {}, - oidc: { customHttpOptions: {} }, + oidc: {}, productDocsLink: 'https://docs.mongodb.com/mongodb-vscode/?utm_source=vscode&utm_medium=product', productName: 'mongodb-vscode', @@ -1343,7 +1336,7 @@ suite('Connection Controller Test Suite', function () { let isConnectionChanged = false; testConnectionController.addEventListener( - DataServiceEventTypes.CONNECTIONS_DID_CHANGE, + 'CONNECTIONS_DID_CHANGE', () => { isConnectionChanged = true; }, @@ -1352,7 +1345,7 @@ suite('Connection Controller Test Suite', function () { await testConnectionController.loadSavedConnections(); testConnectionController.removeEventListener( - DataServiceEventTypes.CONNECTIONS_DID_CHANGE, + 'CONNECTIONS_DID_CHANGE', () => {}, ); diff --git a/src/test/suite/editors/collectionDocumentsProvider.test.ts b/src/test/suite/editors/collectionDocumentsProvider.test.ts index 665b130d5..a4a2e0d03 100644 --- a/src/test/suite/editors/collectionDocumentsProvider.test.ts +++ b/src/test/suite/editors/collectionDocumentsProvider.test.ts @@ -173,8 +173,9 @@ suite('Collection Documents Provider Test Suite', () => { await testCollectionViewProvider.provideTextDocumentContent(uri); - assert( - testQueryStore.operations[operationId].hasMoreDocumentsToShow === false, + assert.strictEqual( + testQueryStore.operations[operationId].hasMoreDocumentsToShow, + false, 'Expected not to have more documents to show.', ); diff --git a/src/test/suite/explorer/collectionTreeItem.test.ts b/src/test/suite/explorer/collectionTreeItem.test.ts index c391f0316..b90d5caa8 100644 --- a/src/test/suite/explorer/collectionTreeItem.test.ts +++ b/src/test/suite/explorer/collectionTreeItem.test.ts @@ -86,8 +86,14 @@ suite('CollectionTreeItem Test Suite', () => { }); const viewIconPath = testCollectionViewTreeItem.iconPath; - assert.strictEqual(viewIconPath.light.includes('view-folder.svg'), true); - assert.strictEqual(viewIconPath.dark.includes('view-folder.svg'), true); + assert.strictEqual( + viewIconPath.light.toString().includes('view-folder.svg'), + true, + ); + assert.strictEqual( + viewIconPath.dark.toString().includes('view-folder.svg'), + true, + ); const testCollectionCollectionTreeItem = getTestCollectionTreeItem({ collection: { @@ -97,11 +103,15 @@ suite('CollectionTreeItem Test Suite', () => { }); const collectionIconPath = testCollectionCollectionTreeItem.iconPath; assert.strictEqual( - collectionIconPath.light.includes('collection-folder-closed.svg'), + collectionIconPath.light + .toString() + .includes('collection-folder-closed.svg'), true, ); assert.strictEqual( - collectionIconPath.dark.includes('collection-folder-closed.svg'), + collectionIconPath.dark + .toString() + .includes('collection-folder-closed.svg'), true, ); }); @@ -115,11 +125,11 @@ suite('CollectionTreeItem Test Suite', () => { }); const viewIconPath = testCollectionTimeSeriesTreeItem.iconPath; assert.strictEqual( - viewIconPath.light.includes('collection-timeseries.svg'), + viewIconPath.light.toString().includes('collection-timeseries.svg'), true, ); assert.strictEqual( - viewIconPath.dark.includes('collection-timeseries.svg'), + viewIconPath.dark.toString().includes('collection-timeseries.svg'), true, ); @@ -131,11 +141,15 @@ suite('CollectionTreeItem Test Suite', () => { }); const collectionIconPath = testCollectionCollectionTreeItem.iconPath; assert.strictEqual( - collectionIconPath.light.includes('collection-folder-closed.svg'), + collectionIconPath.light + .toString() + .includes('collection-folder-closed.svg'), true, ); assert.strictEqual( - collectionIconPath.dark.includes('collection-folder-closed.svg'), + collectionIconPath.dark + .toString() + .includes('collection-folder-closed.svg'), true, ); }); diff --git a/src/test/suite/explorer/documentListTreeItem.test.ts b/src/test/suite/explorer/documentListTreeItem.test.ts index 72ad2c25d..f60e6396f 100644 --- a/src/test/suite/explorer/documentListTreeItem.test.ts +++ b/src/test/suite/explorer/documentListTreeItem.test.ts @@ -186,7 +186,7 @@ suite('DocumentListTreeItem Test Suite', () => { const viewIconPath = testCollectionViewTreeItem.iconPath; assert( - viewIconPath.dark.includes('documents.svg'), + viewIconPath.dark.toString().includes('documents.svg'), 'Expected icon path to point to an svg by the name "documents" a dark mode', ); @@ -197,7 +197,7 @@ suite('DocumentListTreeItem Test Suite', () => { const collectionIconPath = testDocumentListTreeItem.iconPath; assert( - collectionIconPath.dark.includes('documents.svg'), + collectionIconPath.dark.toString().includes('documents.svg'), 'Expected icon path to point to an svg by the name "documents" with a light mode', ); }); diff --git a/src/test/suite/explorer/fieldTreeItem.test.ts b/src/test/suite/explorer/fieldTreeItem.test.ts index 8233ba366..ccbdda60a 100644 --- a/src/test/suite/explorer/fieldTreeItem.test.ts +++ b/src/test/suite/explorer/fieldTreeItem.test.ts @@ -1,6 +1,7 @@ import { after, afterEach, before } from 'mocha'; import assert from 'assert'; import type { DataService } from 'mongodb-data-service'; +import type * as vscode from 'vscode'; import { ext } from '../../../extensionConstants'; import FieldTreeItem, { @@ -76,9 +77,12 @@ suite('FieldTreeItem Test Suite', function () { const stringField = getTestFieldTreeItem(); - const iconPath = stringField.iconPath as { light: string; dark: string }; - assert(iconPath.dark.includes('string.svg')); - assert(iconPath.light.includes('string.svg')); + const iconPath = stringField.iconPath as { + light: vscode.Uri; + dark: vscode.Uri; + }; + assert(iconPath.dark.toString().includes('string.svg')); + assert(iconPath.light.toString().includes('string.svg')); const numberField = getTestFieldTreeItem({ field: { @@ -89,9 +93,12 @@ suite('FieldTreeItem Test Suite', function () { }, }); - const numberIcon = numberField.iconPath as { light: string; dark: string }; - assert(numberIcon.dark.includes('number.svg')); - assert(numberIcon.light.includes('number.svg')); + const numberIcon = numberField.iconPath as { + light: vscode.Uri; + dark: vscode.Uri; + }; + assert(numberIcon.dark.toString().includes('number.svg')); + assert(numberIcon.light.toString().includes('number.svg')); }); test('getIconFileNameForField should return "mixed-type" for a polymorphic type field', () => { diff --git a/src/test/suite/explorer/indexListTreeItem.test.ts b/src/test/suite/explorer/indexListTreeItem.test.ts index d5e86e3b6..b59f35cea 100644 --- a/src/test/suite/explorer/indexListTreeItem.test.ts +++ b/src/test/suite/explorer/indexListTreeItem.test.ts @@ -113,11 +113,11 @@ suite('IndexListTreeItem Test Suite', () => { }); const indexesIconPath = testIndexListTreeItem.iconPath as { - light: string; - dark: string; + light: vscode.Uri; + dark: vscode.Uri; }; assert( - indexesIconPath.dark.includes('indexes.svg'), + indexesIconPath.dark.toString().includes('indexes.svg'), 'Expected icon path to point to an svg by the name "indexes" with a dark mode', ); }); diff --git a/src/test/suite/explorer/indexTreeItem.test.ts b/src/test/suite/explorer/indexTreeItem.test.ts index 04b2d6373..c440ca33e 100644 --- a/src/test/suite/explorer/indexTreeItem.test.ts +++ b/src/test/suite/explorer/indexTreeItem.test.ts @@ -4,6 +4,7 @@ import IndexTreeItem, { IndexFieldTreeItem, IndexKeyType, } from '../../../explorer/indexTreeItem'; +import type * as vscode from 'vscode'; suite('IndexTreeItem Test Suite', () => { test('it has tree items for each key in the index', async () => { @@ -36,12 +37,12 @@ suite('IndexTreeItem Test Suite', () => { }); const iconPath = testIndexFieldTreeItem.iconPath as { - light: string; - dark: string; + light: vscode.Uri; + dark: vscode.Uri; }; assert( - iconPath.dark.includes('index') && - iconPath.dark.includes('geospatial.svg'), + iconPath.dark.toString().includes('index') && + iconPath.dark.toString().includes('geospatial.svg'), 'Expected icon path to point to an svg by the name "geospatial" in the index folder', ); }); diff --git a/src/test/suite/explorer/schemaTreeItem.test.ts b/src/test/suite/explorer/schemaTreeItem.test.ts index edaf6a3c1..66e964b75 100644 --- a/src/test/suite/explorer/schemaTreeItem.test.ts +++ b/src/test/suite/explorer/schemaTreeItem.test.ts @@ -296,11 +296,11 @@ suite('SchemaTreeItem Test Suite', function () { const schemaIconPath = testSchemaTreeItem.iconPath; assert( - schemaIconPath.light.includes('schema.svg'), + schemaIconPath.light.toString().includes('schema.svg'), 'Expected icon path to point to an svg by the name "schema" with a light mode', ); assert( - schemaIconPath.dark.includes('schema.svg'), + schemaIconPath.dark.toString().includes('schema.svg'), 'Expected icon path to point to an svg by the name "schema" with a light mode', ); }); diff --git a/src/test/suite/mcp/mcpConfig.test.ts b/src/test/suite/mcp/mcpConfig.test.ts new file mode 100644 index 000000000..72e15a8c5 --- /dev/null +++ b/src/test/suite/mcp/mcpConfig.test.ts @@ -0,0 +1,156 @@ +import type * as vscode from 'vscode'; +import { expect } from 'chai'; +import { getMCPConfigFromVSCodeSettings } from '../../../mcp/mcpConfig'; + +const vscMCPConfig = { + 'mdb.mcp.apiBaseUrl': 'https://cloud.mongodb.com/', + 'mdb.mcp.apiClientId': '', + 'mdb.mcp.apiClientSecret': '', + 'mdb.mcp.disabledTools': ['connect'], + 'mdb.mcp.readOnly': true, // note that we changed it to true + 'mdb.mcp.indexCheck': null, // note that this is null + 'mdb.mcp.server': 'ask', + 'mdb.mcp.exportsPath': '', // note that this is not modified + 'mdb.mcp.exportTimeoutMs': null, // note that this is set to null + 'mdb.mcp.exportCleanupIntervalMs': 0, // not that this is set to 0 +} as const; + +const getDefaultVSCodeConfigForMCP = (): vscode.WorkspaceConfiguration => + ({ + get(key: string) { + return vscMCPConfig[`mdb.mcp.${key}`]; + }, + has(key: string) { + return `mdb.mcp.${key}` in vscMCPConfig; + }, + }) as unknown as vscode.WorkspaceConfiguration; + +suite('MCPConfig test suite', () => { + test('normal calls with package.json properties should return expected MCP config from the configured VSCode config', () => { + const output = getMCPConfigFromVSCodeSettings( + undefined, + getDefaultVSCodeConfigForMCP, + ); + expect(Object.keys(output)).to.not.contain('server'); + expect(output.apiBaseUrl).to.equal('https://cloud.mongodb.com/'); + expect(output.apiClientId).to.be.undefined; + expect(output.apiClientSecret).to.be.undefined; + expect(output.disabledTools).to.deep.equal(['connect']); + expect(output.exportCleanupIntervalMs).to.equal(0); + expect(output.exportTimeoutMs).to.equal(300000); + expect(output.exportsPath?.endsWith('exports')).to.be.true; + expect(output.indexCheck).to.be.false; + expect(output.readOnly).to.be.true; + }); + + test('should return empty object if packageJsonConfiguredProperties resolves to empty object', () => { + expect( + getMCPConfigFromVSCodeSettings({}, getDefaultVSCodeConfigForMCP), + ).to.deep.equal({}); + }); + + suite('mcpConfigValues edge cases', () => { + test('should handle non-string values for string properties', () => { + const mockConfig = { + 'mdb.mcp.apiBaseUrl': 42, + 'mdb.mcp.apiClientId': true, + 'mdb.mcp.apiClientSecret': {}, + 'mdb.mcp.exportsPath': [], + }; + + const getMockConfig = (): vscode.WorkspaceConfiguration => + ({ + get(key: string) { + return mockConfig[`mdb.mcp.${key}`]; + }, + has(key: string) { + return `mdb.mcp.${key}` in mockConfig; + }, + }) as unknown as vscode.WorkspaceConfiguration; + + const output = getMCPConfigFromVSCodeSettings(undefined, getMockConfig); + + // All should fall back to defaults since they're not valid strings + expect(output.apiBaseUrl).to.equal('https://cloud.mongodb.com/'); + expect(output.apiClientId).to.be.undefined; + expect(output.apiClientSecret).to.be.undefined; + expect(output.exportsPath?.endsWith('exports')).to.be.true; + }); + + test('should handle whitespace-only string values', () => { + const mockConfig = { + 'mdb.mcp.apiBaseUrl': ' ', + 'mdb.mcp.apiClientId': '\t\t', + 'mdb.mcp.apiClientSecret': '\n\n', + 'mdb.mcp.exportsPath': '', + }; + + const getMockConfig = (): vscode.WorkspaceConfiguration => + ({ + get(key: string) { + return mockConfig[`mdb.mcp.${key}`]; + }, + has(key: string) { + return `mdb.mcp.${key}` in mockConfig; + }, + }) as unknown as vscode.WorkspaceConfiguration; + + const output = getMCPConfigFromVSCodeSettings(undefined, getMockConfig); + + // All should fall back to defaults since trimmed values are empty + expect(output.apiBaseUrl).to.equal('https://cloud.mongodb.com/'); + expect(output.apiClientId).to.be.undefined; + expect(output.apiClientSecret).to.be.undefined; + expect(output.exportsPath?.endsWith('exports')).to.be.true; + }); + + test('should properly trim and return valid string values', () => { + const mockConfig = { + 'mdb.mcp.apiBaseUrl': ' https://custom.mongodb.com ', + 'mdb.mcp.apiClientId': '\tcustom-client-id\t', + 'mdb.mcp.apiClientSecret': '\ncustom-secret\n', + 'mdb.mcp.exportsPath': ' /custom/path ', + }; + + const getMockConfig = (): vscode.WorkspaceConfiguration => + ({ + get(key: string) { + return mockConfig[`mdb.mcp.${key}`]; + }, + has(key: string) { + return `mdb.mcp.${key}` in mockConfig; + }, + }) as unknown as vscode.WorkspaceConfiguration; + + const output = getMCPConfigFromVSCodeSettings(undefined, getMockConfig); + + // Should return the trimmed original values + expect(output.apiBaseUrl).to.equal('https://custom.mongodb.com'); + expect(output.apiClientId).to.equal('custom-client-id'); + expect(output.apiClientSecret).to.equal('custom-secret'); + expect(output.exportsPath).to.equal('/custom/path'); + }); + + test('should handle non-array values for disabledTools', () => { + const mockConfig = { + 'mdb.mcp.disabledTools': 'not-an-array', + }; + + const getMockConfig = (): vscode.WorkspaceConfiguration => + ({ + get(key: string) { + return mockConfig[`mdb.mcp.${key}`]; + }, + has(key: string) { + return `mdb.mcp.${key}` in mockConfig; + }, + }) as unknown as vscode.WorkspaceConfiguration; + + const output = getMCPConfigFromVSCodeSettings(undefined, getMockConfig); + + // Should fall back to default disabledTools array + expect(output.disabledTools).to.be.an('array'); + expect(output.disabledTools).to.deep.equal([]); + }); + }); +}); diff --git a/src/test/suite/mcp/mcpConnectionErrorHandler.test.ts b/src/test/suite/mcp/mcpConnectionErrorHandler.test.ts new file mode 100644 index 000000000..95ff3ac57 --- /dev/null +++ b/src/test/suite/mcp/mcpConnectionErrorHandler.test.ts @@ -0,0 +1,90 @@ +import { expect } from 'chai'; +import { beforeEach } from 'mocha'; +import { createMCPConnectionErrorHandler } from '../../../mcp/mcpConnectionErrorHandler'; +import ConnectionController from '../../../connectionController'; +import { ExtensionContextStub } from '../stubs'; +import { StorageController } from '../../../storage'; +import { TelemetryService } from '../../../telemetry'; +import { StatusView } from '../../../views'; +import type { + ConnectionErrorHandled, + ConnectionErrorHandlerContext, +} from 'mongodb-mcp-server'; +import { ErrorCodes } from 'mongodb-mcp-server'; + +class MongoDBError extends Error { + constructor( + public code: + | ErrorCodes.NotConnectedToMongoDB + | ErrorCodes.MisconfiguredConnectionString, + message: string, + ) { + super(message); + } +} + +suite('mcpConnectionErrorHandler suite', () => { + let connectionController: ConnectionController; + beforeEach(() => { + const extensionContext = new ExtensionContextStub(); + const testStorageController = new StorageController(extensionContext); + const testTelemetryService = new TelemetryService( + testStorageController, + extensionContext, + ); + connectionController = new ConnectionController({ + statusView: new StatusView(extensionContext), + storageController: testStorageController, + telemetryService: testTelemetryService, + }); + }); + + test('should handle NotConnectedToMongoDB error', () => { + const handler = createMCPConnectionErrorHandler(connectionController); + const result = handler( + new MongoDBError( + ErrorCodes.NotConnectedToMongoDB, + 'Not connected to MongoDB', + ), + {} as ConnectionErrorHandlerContext, + ) as ConnectionErrorHandled; + + expect(result.errorHandled).to.be.true; + expect(result.result.content).to.deep.contain({ + type: 'text', + text: 'You need to connect to a MongoDB instance before you can access its data.', + }); + }); + + test('should handle MisconfiguredConnectionString error', () => { + const handler = createMCPConnectionErrorHandler(connectionController); + const result = handler( + new MongoDBError( + ErrorCodes.MisconfiguredConnectionString, + 'Misconfigured MongoDB string', + ), + {} as ConnectionErrorHandlerContext, + ) as ConnectionErrorHandled; + + expect(result.errorHandled).to.be.true; + expect(result.result.content).to.deep.contain({ + type: 'text', + text: 'MCP server is having trouble connecting to the selected connection in the MongoDB VSCode extension.', + }); + }); + + test('should not handle any other errors', () => { + const handler = createMCPConnectionErrorHandler(connectionController); + expect( + handler( + new MongoDBError(ErrorCodes.ForbiddenCollscan as any, 'Some error'), + {} as any, + ), + ).to.deep.equal({ + errorHandled: false, + }); + expect(handler(new Error('Some error') as any, {} as any)).to.deep.equal({ + errorHandled: false, + }); + }); +}); diff --git a/src/test/suite/mcp/mcpConnectionManager.test.ts b/src/test/suite/mcp/mcpConnectionManager.test.ts new file mode 100644 index 000000000..e531eb2df --- /dev/null +++ b/src/test/suite/mcp/mcpConnectionManager.test.ts @@ -0,0 +1,438 @@ +import sinon from 'sinon'; +import { afterEach, beforeEach } from 'mocha'; +import chai, { expect } from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import ConnectionString from 'mongodb-connection-string-url'; +import type { LoggerBase } from 'mongodb-mcp-server'; +import type { ConnectionStateErrored } from 'mongodb-mcp-server'; +import type { DevtoolsConnectOptions } from '@mongosh/service-provider-node-driver'; +import { NodeDriverServiceProvider } from '@mongosh/service-provider-node-driver'; +import type { MCPConnectParams } from '../../../mcp/mcpConnectionManager'; +import { + MCP_SERVER_TELEMETRY_APP_NAME_SUFFIX, + MCPConnectionManager, +} from '../../../mcp/mcpConnectionManager'; +import { DEFAULT_TELEMETRY_APP_NAME } from '../../../connectionController'; + +chai.use(chaiAsPromised); + +const sandbox = sinon.createSandbox(); +suite('MCPConnectionManager Test Suite', function () { + let mcpConnectionManager: MCPConnectionManager; + let fakeServiceProvider: NodeDriverServiceProvider; + + beforeEach(() => { + mcpConnectionManager = new MCPConnectionManager({ + logger: { error: () => {}, warning: () => {} } as unknown as LoggerBase, + getTelemetryAnonymousId: (): string => '1FOO', + }); + fakeServiceProvider = { + runCommand: (() => + Promise.resolve({})) as NodeDriverServiceProvider['runCommand'], + close: (() => Promise.resolve()) as NodeDriverServiceProvider['close'], + } as NodeDriverServiceProvider; + sandbox + .stub(NodeDriverServiceProvider, 'connect') + .resolves(fakeServiceProvider); + }); + + afterEach(() => { + sandbox.restore(); + sandbox.reset(); + }); + + suite('#connect', function () { + test('should throw an error', async function () { + await expect(mcpConnectionManager.connect()).to.be.rejected; + }); + }); + + suite('#connectToVSCodeConnection', function () { + test('should connect successfully and update the state', async function () { + const newState = await mcpConnectionManager.connectToVSCodeConnection({ + connectionId: '1', + connectionString: 'mongodb://localhost:27017', + connectOptions: {} as unknown as DevtoolsConnectOptions, + }); + + expect(newState.tag).to.equal('connected'); + expect(mcpConnectionManager.currentConnectionState.tag).to.equal( + 'connected', + ); + }); + + test('should update the state when there is an error', async function () { + fakeServiceProvider.runCommand = (() => + Promise.reject( + new Error('Bad error'), + )) as NodeDriverServiceProvider['runCommand']; + const newState = (await mcpConnectionManager.connectToVSCodeConnection({ + connectionId: '1', + connectionString: 'mongodb://localhost:27017', + connectOptions: {} as unknown as DevtoolsConnectOptions, + })) as ConnectionStateErrored; + + expect(newState.tag).to.equal('errored'); + expect(newState.errorReason).to.equal('Bad error'); + expect(mcpConnectionManager.currentConnectionState.tag).to.equal( + 'errored', + ); + expect( + (mcpConnectionManager.currentConnectionState as ConnectionStateErrored) + .errorReason, + ).to.equal('Bad error'); + }); + }); + + suite('#disconnect', function () { + test('should disconnect successfully and update the state', async function () { + const newState = await mcpConnectionManager.connectToVSCodeConnection({ + connectionId: '1', + connectionString: 'mongodb://localhost:27017', + connectOptions: {} as unknown as DevtoolsConnectOptions, + }); + + expect(newState.tag).to.equal('connected'); + + const nextState = await mcpConnectionManager.disconnect(); + expect(nextState.tag).to.equal('disconnected'); + expect(mcpConnectionManager.currentConnectionState.tag).to.equal( + 'disconnected', + ); + expect((mcpConnectionManager as any).activeConnection).to.be.null; + }); + + test('should attempt to disconnect and on failure clear out the state', async function () { + fakeServiceProvider.close = (() => + Promise.reject( + new Error('Bad close error'), + )) as NodeDriverServiceProvider['close']; + const newState = await mcpConnectionManager.connectToVSCodeConnection({ + connectionId: '1', + connectionString: 'mongodb://localhost:27017', + connectOptions: {} as unknown as DevtoolsConnectOptions, + }); + + expect(newState.tag).to.equal('connected'); + + const nextState = await mcpConnectionManager.disconnect(); + expect(nextState.tag).to.equal('disconnected'); + expect(mcpConnectionManager.currentConnectionState.tag).to.equal( + 'disconnected', + ); + expect((mcpConnectionManager as any).activeConnection).to.be.null; + }); + }); + + suite('#updateConnection', function () { + suite('when not connected to any connection', function () { + test('should do nothing when invoked for a disconnected connection', async function () { + const connectSpy = sandbox.spy( + mcpConnectionManager, + 'connectToVSCodeConnection', + ); + const disconnectSpy = sandbox.spy(mcpConnectionManager, 'disconnect'); + await mcpConnectionManager.updateConnection(undefined); + + expect(connectSpy).to.not.be.called; + expect(disconnectSpy).to.not.be.called; + }); + + test('should switch to error state when invoked for an Atlas streams connection', async function () { + const connectSpy = sandbox.spy( + mcpConnectionManager, + 'connectToVSCodeConnection', + ); + const disconnectSpy = sandbox.spy(mcpConnectionManager, 'disconnect'); + await mcpConnectionManager.updateConnection({ + connectionId: '1', + connectionString: + 'mongodb://admin:catscatscats@atlas-stream-64ba1372b2a9f1545031f34d-gkumd.virginia-usa.a.query.mongodb.net/', + connectOptions: {} as DevtoolsConnectOptions, + }); + + expect(connectSpy).to.not.be.called; + expect(disconnectSpy).to.be.called; + expect(mcpConnectionManager.currentConnectionState.tag).to.equal( + 'errored', + ); + expect( + ( + mcpConnectionManager.currentConnectionState as ConnectionStateErrored + ).errorReason, + ).to.equal( + 'MongoDB MCP server does not support connecting to Atlas Streams', + ); + }); + + test('should connect to the connection when invoked for a newly connected connection', async function () { + const connectSpy = sandbox.spy( + mcpConnectionManager, + 'connectToVSCodeConnection', + ); + const disconnectSpy = sandbox.spy(mcpConnectionManager, 'disconnect'); + await mcpConnectionManager.updateConnection({ + connectionId: '1', + connectionString: 'mongodb://localhost:27017', + connectOptions: {} as unknown as DevtoolsConnectOptions, + }); + + expect(disconnectSpy).to.be.called; + expect(connectSpy).to.be.calledWithExactly({ + connectionId: '1', + connectionString: 'mongodb://localhost:27017', + connectOptions: {} as unknown as DevtoolsConnectOptions, + }); + }); + }); + + suite('when already connected to a connection', function () { + test('should do nothing when invoked for the already connected connection', async function () { + await mcpConnectionManager.connectToVSCodeConnection({ + connectionId: '1', + connectionString: 'mongodb://localhost:27017', + connectOptions: {} as unknown as DevtoolsConnectOptions, + }); + + // now we setup spies + const connectSpy = sandbox.spy( + mcpConnectionManager, + 'connectToVSCodeConnection', + ); + const disconnectSpy = sandbox.spy(mcpConnectionManager, 'disconnect'); + await mcpConnectionManager.updateConnection({ + connectionId: '1', + connectionString: 'mongodb://localhost:27017', + connectOptions: {} as unknown as DevtoolsConnectOptions, + }); + + expect(connectSpy).to.not.be.called; + expect(disconnectSpy).to.not.be.called; + }); + + test('should disconnect and return early when invoked for a disconnected connection', async function () { + await mcpConnectionManager.connectToVSCodeConnection({ + connectionId: '1', + connectionString: 'mongodb://localhost:27017', + connectOptions: {} as unknown as DevtoolsConnectOptions, + }); + + // now we setup spies + const connectSpy = sandbox.spy( + mcpConnectionManager, + 'connectToVSCodeConnection', + ); + const disconnectSpy = sandbox.spy(mcpConnectionManager, 'disconnect'); + await mcpConnectionManager.updateConnection(undefined); + + expect(connectSpy).to.not.be.called; + expect(disconnectSpy).to.be.called; + }); + + test('should switch to error state when invoked for an Atlas streams connection', async function () { + await mcpConnectionManager.connectToVSCodeConnection({ + connectionId: '1', + connectionString: 'mongodb://localhost:27017', + connectOptions: {} as unknown as DevtoolsConnectOptions, + }); + + // now we setup spies + const connectSpy = sandbox.spy( + mcpConnectionManager, + 'connectToVSCodeConnection', + ); + const disconnectSpy = sandbox.spy(mcpConnectionManager, 'disconnect'); + + // update connection + await mcpConnectionManager.updateConnection({ + connectionId: '2', + connectionString: + 'mongodb://admin:catscatscats@atlas-stream-64ba1372b2a9f1545031f34d-gkumd.virginia-usa.a.query.mongodb.net/', + connectOptions: {} as DevtoolsConnectOptions, + }); + + expect(disconnectSpy).to.be.called; + expect(connectSpy).to.not.be.called; + expect(mcpConnectionManager.currentConnectionState.tag).to.equal( + 'errored', + ); + expect( + ( + mcpConnectionManager.currentConnectionState as ConnectionStateErrored + ).errorReason, + ).to.equal( + 'MongoDB MCP server does not support connecting to Atlas Streams', + ); + }); + + test('should disconnect and attempt to connect to the new connection when invoked for a different connection', async function () { + await mcpConnectionManager.connectToVSCodeConnection({ + connectionId: '1', + connectionString: 'mongodb://localhost:27017', + connectOptions: {} as unknown as DevtoolsConnectOptions, + }); + + // now we setup spies + const connectSpy = sandbox.spy( + mcpConnectionManager, + 'connectToVSCodeConnection', + ); + const disconnectSpy = sandbox.spy(mcpConnectionManager, 'disconnect'); + await mcpConnectionManager.updateConnection({ + connectionId: '2', + connectionString: 'mongodb://localhost:27017', + connectOptions: {} as unknown as DevtoolsConnectOptions, + }); + + expect(disconnectSpy).to.be.called; + expect(connectSpy).to.be.calledWithExactly({ + connectionId: '2', + connectionString: 'mongodb://localhost:27017', + connectOptions: {} as unknown as DevtoolsConnectOptions, + }); + }); + }); + }); + + suite('#overrideAppNameIfContainsVSCode', function () { + let localConnectionURL: ConnectionString; + let atlasConnectionURL: ConnectionString; + beforeEach(() => { + localConnectionURL = new ConnectionString( + `mongodb://localhost:27017/?appName=${DEFAULT_TELEMETRY_APP_NAME}`, + ); + atlasConnectionURL = new ConnectionString( + 'mongodb://cat-data-sets.cats.mongodb.net/admin', + ); + }); + + for (const { + suiteName, + getConnectionURL, + getConnectionManager, + expectedAppName, + expectedString, + } of [ + { + suiteName: 'when connection string is not atlas', + getConnectionURL: (): ConnectionString => localConnectionURL.clone(), + getConnectionManager: (): MCPConnectionManager => mcpConnectionManager, + expectedAppName: `${DEFAULT_TELEMETRY_APP_NAME} ${MCP_SERVER_TELEMETRY_APP_NAME_SUFFIX}`, + expectedString: (): string => { + const url = localConnectionURL.clone(); + const expectedAppName = `${DEFAULT_TELEMETRY_APP_NAME} ${MCP_SERVER_TELEMETRY_APP_NAME_SUFFIX}`; + url.searchParams.set('appName', expectedAppName); + return url.toString(); + }, + }, + { + suiteName: 'when connection string is atlas', + getConnectionURL: (): ConnectionString => atlasConnectionURL.clone(), + getConnectionManager: (): MCPConnectionManager => mcpConnectionManager, + expectedAppName: `${DEFAULT_TELEMETRY_APP_NAME} ${MCP_SERVER_TELEMETRY_APP_NAME_SUFFIX}--1FOO--1`, + expectedString: (): string => { + const url = atlasConnectionURL.clone(); + const expectedAppName = `${DEFAULT_TELEMETRY_APP_NAME} ${MCP_SERVER_TELEMETRY_APP_NAME_SUFFIX}--1FOO--1`; + url.searchParams.set('appName', expectedAppName); + return url.toString(); + }, + }, + ]) { + suite(suiteName, function () { + suite('and appName is not set', function () { + test('should set appName attribute both in connection string and connection options', function () { + const url = getConnectionURL(); + url.searchParams.delete('appName'); + const connectParams: MCPConnectParams = { + connectionId: '1', + connectionString: url.toString(), + connectOptions: { + productName: 'VSCode', + productDocsLink: 'https://mongodb.com', + appName: DEFAULT_TELEMETRY_APP_NAME, + }, + }; + + expect( + getConnectionManager().overridePresetAppName(connectParams), + ).to.deep.equal({ + connectionId: '1', + connectionString: expectedString(), + connectOptions: { + productName: 'VSCode', + productDocsLink: 'https://mongodb.com', + appName: expectedAppName, + }, + }); + }); + }); + + suite('if appName is set to default vscode app name', function () { + test('should set appName attribute both in connection string and connection options', function () { + const url = getConnectionURL(); + const connectParams: MCPConnectParams = { + connectionId: '1', + connectionString: url.toString(), + connectOptions: { + productName: 'VSCode', + productDocsLink: 'https://mongodb.com', + appName: DEFAULT_TELEMETRY_APP_NAME, + }, + }; + + expect( + getConnectionManager().overridePresetAppName(connectParams), + ).to.deep.equal({ + connectionId: '1', + connectionString: expectedString(), + connectOptions: { + productName: 'VSCode', + productDocsLink: 'https://mongodb.com', + appName: expectedAppName, + }, + }); + }); + }); + + suite('if appName is set to something else', function () { + test('should not override appName attribute both in connection string and connection options', function () { + const url = getConnectionURL(); + url.searchParams.set('appName', 'MongoDB MCP Server 0.0.0'); + const connectParams: MCPConnectParams = { + connectionId: '1', + connectionString: url.toString(), + connectOptions: { + productName: 'VSCode', + productDocsLink: 'https://mongodb.com', + appName: DEFAULT_TELEMETRY_APP_NAME, + }, + }; + + expect( + getConnectionManager().overridePresetAppName(connectParams), + ).to.deep.equal(connectParams); + + // Now for the case when appName is already set to expected MCP server appname + url.searchParams.set( + 'appName', + `${DEFAULT_TELEMETRY_APP_NAME} ${MCP_SERVER_TELEMETRY_APP_NAME_SUFFIX}`, + ); + const nextConnectParams: MCPConnectParams = { + connectionId: '1', + connectionString: url.toString(), + connectOptions: { + productName: 'VSCode', + productDocsLink: 'https://mongodb.com', + appName: DEFAULT_TELEMETRY_APP_NAME, + }, + }; + + expect( + getConnectionManager().overridePresetAppName(nextConnectParams), + ).to.deep.equal(nextConnectParams); + }); + }); + }); + } + }); +}); diff --git a/src/test/suite/mcp/mcpController.test.ts b/src/test/suite/mcp/mcpController.test.ts new file mode 100644 index 000000000..98ca74a12 --- /dev/null +++ b/src/test/suite/mcp/mcpController.test.ts @@ -0,0 +1,336 @@ +import type { SinonStub } from 'sinon'; +import sinon from 'sinon'; +import { expect } from 'chai'; +import { afterEach, beforeEach } from 'mocha'; +import * as vscode from 'vscode'; +import type { ExtensionContext } from 'vscode'; +import * as MCPServer from 'mongodb-mcp-server'; +import { ExtensionContextStub } from '../stubs'; +import type { MCPServerInfo } from '../../../mcp/mcpController'; +import { MCPController } from '../../../mcp/mcpController'; +import ConnectionController from '../../../connectionController'; +import { StatusView } from '../../../views'; +import { StorageController } from '../../../storage'; +import { TelemetryService } from '../../../telemetry'; +import { TEST_DATABASE_URI } from '../dbTestHelper'; + +const sandbox = sinon.createSandbox(); +suite('MCPController test suite', function () { + let extensionContext: ExtensionContext; + let connectionController: ConnectionController; + let mcpController: MCPController; + + beforeEach(() => { + extensionContext = new ExtensionContextStub(); + const testStorageController = new StorageController(extensionContext); + const testTelemetryService = new TelemetryService( + testStorageController, + extensionContext, + ); + connectionController = new ConnectionController({ + statusView: new StatusView(extensionContext), + storageController: testStorageController, + telemetryService: testTelemetryService, + }); + + mcpController = new MCPController({ + context: extensionContext, + connectionController: connectionController, + getTelemetryAnonymousId: (): string => '1FOO', + }); + }); + + afterEach(async () => { + sandbox.restore(); + sandbox.reset(); + connectionController.clearAllConnections(); + await vscode.workspace.getConfiguration('mdb').update('mcp.server', null); + }); + + test('should register mcp server definition provider', function () { + // At-least one from our mcp controller + expect(extensionContext.subscriptions.length).to.be.greaterThanOrEqual(1); + }); + + suite('#activate', function () { + test('should subscribe to ACTIVE_CONNECTION_CHANGED event', async function () { + const addEventListenerSpy = sandbox.spy( + connectionController, + 'addEventListener', + ); + await mcpController.activate(); + expect(addEventListenerSpy).to.be.called; + expect(addEventListenerSpy.args[0]).to.contain( + 'ACTIVE_CONNECTION_CHANGED', + ); + }); + }); + + suite('#startServer', function () { + test('should initialize HTTP transport and start it', async function () { + await mcpController.startServer(); + const serverInfo = (mcpController as any).server as + | MCPServerInfo + | undefined; + expect(serverInfo).to.not.be.undefined; + expect(serverInfo?.runner).to.be.instanceOf( + MCPServer.StreamableHttpRunner, + ); + expect(serverInfo?.headers?.authorization).to.not.be.undefined; + }); + }); + + suite('when mcp server auto start is enabled in the config', function () { + test('it should start mcp server without any notification', async function () { + await vscode.workspace + .getConfiguration('mdb') + .update('mcp.server', 'enabled'); + + const showInformationSpy = sandbox.spy( + vscode.window, + 'showInformationMessage', + ); + const startServerSpy = sandbox.spy(mcpController, 'startServer'); + await mcpController.activate(); + + expect(showInformationSpy).to.not.be.called; + expect(startServerSpy).to.be.calledOnce; + }); + }); + + suite('when mcp server auto start is disabled from config', function () { + test('it should not start mcp server and show no notification', async function () { + await vscode.workspace + .getConfiguration('mdb') + .update('mcp.server', 'disabled'); + + const showInformationSpy = sandbox.spy( + vscode.window, + 'showInformationMessage', + ); + const startServerSpy = sandbox.spy(mcpController, 'startServer'); + await mcpController.activate(); + + expect(showInformationSpy).to.not.be.called; + expect(startServerSpy).to.not.be.called; + }); + }); + + suite('when mcp server auto start is not configured', function () { + let showInformationStub: SinonStub; + let informationStubCalledNotification: Promise; + let informationStubResolvedValue: any; + beforeEach(() => { + informationStubResolvedValue = undefined; + let notifyInformationStubCalled: () => void; + informationStubCalledNotification = new Promise((resolve) => { + notifyInformationStubCalled = resolve; + }); + showInformationStub = sandbox + .stub(vscode.window, 'showInformationMessage') + .callsFake(() => { + notifyInformationStubCalled(); + return Promise.resolve(informationStubResolvedValue); + }); + }); + test('it start the mcp server, set auto start to enabled and, notify the user with an information message', async function () { + const updateStub = sandbox.stub(); + const fakeGetConfiguration = sandbox.fake.returns({ + get: () => null, + update: updateStub, + }); + sandbox.replace( + vscode.workspace, + 'getConfiguration', + fakeGetConfiguration, + ); + + // Equivalent to dismissing the popup + informationStubResolvedValue = undefined; + + const startServerSpy = sandbox.spy(mcpController, 'startServer'); + await mcpController.activate(); + + await informationStubCalledNotification; + expect(showInformationStub).to.be.calledOnce; + expect(updateStub).to.be.calledWith('mcp.server', 'enabled', true); + expect(startServerSpy).to.be.called; + }); + + suite( + 'on the notification popup, if user selects to keep auto starting', + function () { + test('it should keep the config set to auto start and continue running the MCP server', async function () { + const updateStub = sandbox.stub(); + const fakeGetConfiguration = sandbox.fake.returns({ + get: () => null, + update: updateStub, + }); + sandbox.replace( + vscode.workspace, + 'getConfiguration', + fakeGetConfiguration, + ); + + informationStubResolvedValue = 'Keep'; + const startServerSpy = sandbox.spy(mcpController, 'startServer'); + await mcpController.activate(); + + await informationStubCalledNotification; + expect(showInformationStub).to.be.calledOnce; + expect(updateStub).to.be.calledWith('mcp.server', 'enabled', true); + expect(startServerSpy).to.be.called; + }); + }, + ); + + suite( + 'on the notification popup, if user selects to disable auto starting', + function () { + test('it should set the config to disable auto start and stop the MCP server', async function () { + let notifyUpdateCalled: () => void; + const updateCalledNotification = new Promise((resolve) => { + notifyUpdateCalled = resolve; + }); + + // There will be two calls to update, one which we do by default and + // second to update the config to disabled. + let callCount = 0; + const updateStub = sandbox.stub().callsFake(() => { + if (++callCount === 2) { + notifyUpdateCalled(); + } + }); + const fakeGetConfiguration = sandbox.fake.returns({ + get: () => null, + update: updateStub, + }); + sandbox.replace( + vscode.workspace, + 'getConfiguration', + fakeGetConfiguration, + ); + + informationStubResolvedValue = 'Disable'; + const startServerSpy = sandbox.spy(mcpController, 'startServer'); + const stopServerSpy = sandbox.spy(mcpController, 'stopServer'); + await mcpController.activate(); + + await informationStubCalledNotification; + expect(showInformationStub).to.be.calledOnce; + + await updateCalledNotification; + expect(updateStub.lastCall).to.be.calledWith( + 'mcp.server', + 'disabled', + true, + ); + expect(startServerSpy).to.be.called; + expect(stopServerSpy).to.be.called; + }); + }, + ); + }); + + suite('when an MCP server is already running', function () { + test('it should notify the connection manager of the connection changed event', async function () { + // We want to connect as soon as connection changes + await vscode.workspace + .getConfiguration('mdb') + .update('mcp.server', 'enabled'); + + // Start the controller and list to events + await mcpController.activate(); + + // Add a connection + await connectionController.addNewConnectionStringAndConnect({ + connectionString: TEST_DATABASE_URI, + }); + + const switchConnectionManagerSpy = sandbox.spy( + mcpController as any, + 'switchConnectionManagerToCurrentConnection', + ); + + await connectionController.disconnect(); + expect(switchConnectionManagerSpy).to.be.calledOnce; + }); + }); + + suite('when an MCP server is not running', function () { + test('it should not notify the connection manager of the connection changed event', async function () { + // Disable connecting + await vscode.workspace + .getConfiguration('mdb') + .update('mcp.server', 'disabled'); + + // Start the controller and list to events + await mcpController.activate(); + + // Add a connection + await connectionController.addNewConnectionStringAndConnect({ + connectionString: TEST_DATABASE_URI, + }); + + const switchConnectionManagerSpy = sandbox.spy( + mcpController as any, + 'switchConnectionManagerToCurrentConnection', + ); + + await connectionController.disconnect(); + expect(switchConnectionManagerSpy).not.to.be.called; + }); + }); + + suite('#openServerConfig', function () { + suite('when the server is not running', function () { + test('should notify that server is not running', async function () { + const showErrorMessageSpy = sandbox.spy( + vscode.window, + 'showErrorMessage', + ); + expect(await mcpController.openServerConfig()).to.equal(false); + expect(showErrorMessageSpy).to.be.calledWith( + 'MongoDB MCP Server is not running. Start the server by running "MDB: Start MCP Server" in the command palette.', + ); + }); + }); + + suite('when the server is running', function () { + test('should open the document with the server config', async function () { + const startServer = mcpController.startServer.bind(mcpController); + let notifyStartServerCalled: () => void = () => {}; + const startServerCalled: Promise = new Promise( + (resolve) => { + notifyStartServerCalled = resolve; + }, + ); + sandbox.replace(mcpController, 'startServer', async () => { + await startServer(); + notifyStartServerCalled(); + }); + + const showTextDocumentStub = sandbox.spy( + vscode.window, + 'showTextDocument', + ); + + // We want to connect as soon as connection changes + await vscode.workspace + .getConfiguration('mdb') + .update('mcp.server', 'enabled'); + + // Start the controller and listen to events + await mcpController.activate(); + + // Add a connection + await connectionController.addNewConnectionStringAndConnect({ + connectionString: TEST_DATABASE_URI, + }); + await startServerCalled; + expect(await mcpController.openServerConfig()).to.equal(true); + expect(showTextDocumentStub).to.be.called; + }); + }); + }); +}); diff --git a/src/test/suite/participant/participant.test.ts b/src/test/suite/participant/participant.test.ts index f02b8c401..3ecafbfa5 100644 --- a/src/test/suite/participant/participant.test.ts +++ b/src/test/suite/participant/participant.test.ts @@ -71,28 +71,46 @@ const encodeStringify = (obj: Record): string => { const getMessageContent = ( message: vscode.LanguageModelChatMessage, ): string => { - const content = message.content as any; - if (typeof content === 'string') { - return content; - } - - if (Array.isArray(content)) { - return content.reduce((agg: string, element) => { - const value = element?.value ?? element?.content?.value; - if (typeof value === 'string') { - return agg + value; - } - - return agg; - }, ''); - } - - return ''; + const content = message.content; + return content.reduce((agg: string, element) => { + const value: string = + element instanceof vscode.LanguageModelTextPart + ? element.value + : element.toString(); + + return agg + value; + }, ''); }; suite('Participant Controller Test Suite', function () { const extensionContextStub = new ExtensionContextStub(); + const createChatRequestMock = ({ + prompt, + command, + }: { + prompt: string; + command: 'query' | 'schema' | 'docs' | undefined; + }): vscode.ChatRequest => { + return { + prompt, + command, + references: [], + model: { + name: 'Fake Model', + id: 'fake-model-id', + family: 'fake-family', + vendor: 'fake-vendor', + version: 'fake-version', + maxInputTokens: MAX_TOTAL_PROMPT_LENGTH_MOCK, + countTokens: sinon.stub(), + sendRequest: sinon.stub(), + }, + toolReferences: [], + toolInvocationToken: {} as never, + }; + }; + // The test extension runner. extensionContextStub.extensionPath = '../../'; @@ -309,11 +327,10 @@ suite('Participant Controller Test Suite', function () { test('asks to connect', async function () { getSavedConnectionsStub.returns([loadedConnection]); - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'find all docs by a name example', command: 'query', - references: [], - }; + }); const chatResult = await invokeChatHandler(chatRequestMock); const connectMessage = chatStreamStub.markdown.getCall(0).args[0]; expect(connectMessage).to.include( @@ -350,11 +367,10 @@ suite('Participant Controller Test Suite', function () { }); } getSavedConnectionsStub.returns(connections); - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'find all docs by a name example', command: 'query', - references: [], - }; + }); const chatResult = await invokeChatHandler(chatRequestMock); const connectMessage = chatStreamStub.markdown.getCall(0).args[0]; expect(connectMessage).to.include( @@ -384,14 +400,13 @@ suite('Participant Controller Test Suite', function () { test('handles empty connection name', async function () { getSavedConnectionsStub.returns([loadedConnection]); - const chatRequestMock = { + let chatRequestMock = createChatRequestMock({ prompt: 'find all docs by a name example', command: 'query', - references: [], - }; + }); const chatResult = await invokeChatHandler(chatRequestMock); - chatRequestMock.prompt = ''; + chatRequestMock = createChatRequestMock({ prompt: '', command: 'query' }); await invokeChatHandler(chatRequestMock); const emptyMessage = chatStreamStub.markdown.getCall(3).args[0]; @@ -505,11 +520,10 @@ suite('Participant Controller Test Suite', function () { }); test('prints a welcome message to chat', async function () { - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'find all docs by a name example', command: 'query', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); const welcomeMessage = chatStreamStub.markdown.firstCall.args[0]; expect(welcomeMessage).to.include('Welcome to MongoDB Participant!'); @@ -576,12 +590,11 @@ suite('Participant Controller Test Suite', function () { }); test('routes to the appropriate handler', async function () { - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'what is the shape of the documents in the pineapple collection?', command: undefined, - references: [], - }; + }); const res = await invokeChatHandler(chatRequestMock); expect(sendRequestStub).to.have.been.calledTwice; @@ -609,11 +622,10 @@ suite('Participant Controller Test Suite', function () { }); test('default handler asks for intent and shows code run actions', async function () { - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'how to find documents in my collection?', command: undefined, - references: [], - }; + }); const res = await invokeChatHandler(chatRequestMock); expect(sendRequestStub).to.have.been.calledTwice; @@ -684,11 +696,10 @@ suite('Participant Controller Test Suite', function () { }); test('generates a query', async function () { - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'find all docs by a name example', command: 'query', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); expect(chatStreamStub?.button.getCall(0).args[0]).to.deep.equal({ command: 'mdb.runParticipantCode', @@ -728,11 +739,10 @@ suite('Participant Controller Test Suite', function () { }, }, ]); - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'find all docs by a name example', command: 'query', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); const messages = sendRequestStub.secondCall .args[0] as vscode.LanguageModelChatMessage[]; @@ -793,11 +803,10 @@ suite('Participant Controller Test Suite', function () { }, }, ]); - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'find all docs by a name example', command: 'query', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); const messages = sendRequestStub.secondCall .args[0] as vscode.LanguageModelChatMessage[]; @@ -877,11 +886,10 @@ suite('Participant Controller Test Suite', function () { sampleStub.resolves(sampleDocs); - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'find all docs by a name example', command: 'query', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); const messages = sendRequestStub.secondCall @@ -956,11 +964,10 @@ suite('Participant Controller Test Suite', function () { sampleStub.resolves(sampleDocs); - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'find all docs by a name example', command: 'query', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); const messages = sendRequestStub.secondCall @@ -1030,11 +1037,10 @@ suite('Participant Controller Test Suite', function () { sampleStub.resolves(sampleDocs); - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'find all docs by a name example', command: 'query', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); const messages = sendRequestStub.secondCall @@ -1062,11 +1068,10 @@ suite('Participant Controller Test Suite', function () { suite('useSampleDocsInCopilot setting is false', function () { test('does not include sample documents', async function () { - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'find all docs by a name example', command: 'query', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); const messages = sendRequestStub.secondCall .args[0] as vscode.LanguageModelChatMessage[]; @@ -1094,11 +1099,10 @@ suite('Participant Controller Test Suite', function () { suite('no namespace provided', function () { test('asks for a namespace and generates a query', async function () { - const chatRequestMock = { + let chatRequestMock = createChatRequestMock({ prompt: 'find all docs by a name example', command: 'query', - references: [], - }; + }); const chatResult = await invokeChatHandler(chatRequestMock); const askForDBMessage = chatStreamStub.markdown.getCall(0).args[0]; expect(askForDBMessage).to.include( @@ -1135,7 +1139,10 @@ suite('Participant Controller Test Suite', function () { chatId: undefined, }); - chatRequestMock.prompt = 'dbOne'; + chatRequestMock = createChatRequestMock({ + prompt: 'dbOne', + command: 'query', + }); sendRequestStub.onCall(1).resolves({ text: ['DATABASE_NAME: dbOne\n'], }); @@ -1202,7 +1209,10 @@ suite('Participant Controller Test Suite', function () { chatId: undefined, }); - chatRequestMock.prompt = 'collOne'; + chatRequestMock = createChatRequestMock({ + prompt: 'collOne', + command: 'query', + }); sendRequestStub.onCall(2).resolves({ text: ['DATABASE_NAME: dbOne\n', 'COLLECTION_NAME: collOne\n`'], }); @@ -1266,11 +1276,10 @@ suite('Participant Controller Test Suite', function () { }); test('asks for the empty database name again if the last prompt was doing so', async function () { - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: '', command: 'query', - references: [], - }; + }); chatContextStub = { history: [ createChatRequestTurn( @@ -1350,11 +1359,10 @@ suite('Participant Controller Test Suite', function () { }); test('without a prompt it asks for the database name without pinging ai', async function () { - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: '', command: 'schema', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); expect(sendRequestStub.called).to.be.false; @@ -1365,11 +1373,10 @@ suite('Participant Controller Test Suite', function () { }); test('with a prompt it asks the ai for the namespace', async function () { - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'pineapple', command: 'schema', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); expect(sendRequestStub.calledOnce).to.be.true; @@ -1386,11 +1393,10 @@ suite('Participant Controller Test Suite', function () { }); test('with history, and a blank prompt, it sets a message so it does not cause model error (VSCODE-626)', async function () { - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: '', command: 'schema', - references: [], - }; + }); chatContextStub = { history: [ createChatRequestTurn( @@ -1432,11 +1438,10 @@ suite('Participant Controller Test Suite', function () { }); test('shows a button to view the json output', async function () { - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'what is my schema', command: 'schema', - references: [], - }; + }); sampleStub.resolves([ { _id: new ObjectId('63ed1d522d8573fa5c203660'), @@ -1513,11 +1518,10 @@ suite('Participant Controller Test Suite', function () { }, }, ]); - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'what is my schema', command: 'schema', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); const messages = sendRequestStub.secondCall .args[0] as vscode.LanguageModelChatMessage[]; @@ -1557,11 +1561,10 @@ Schema: test('prints a message when no documents are found', async function () { sampleStub.resolves([]); - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'what is my schema', command: 'schema', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); expect(chatStreamStub?.markdown.getCall(0).args[0]).to.include( 'Unable to generate a schema from the collection, no documents found.', @@ -1611,11 +1614,10 @@ Schema: ], }; - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'docs request', command: 'docs', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); @@ -1643,11 +1645,10 @@ Schema: ], }; - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'docs request', command: 'docs', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); @@ -1677,11 +1678,10 @@ Schema: test('shows a message and docs link on empty prompt', async function () { fetchStub = sinon.stub().resolves(); global.fetch = fetchStub; - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: '', command: 'docs', - references: [], - }; + }); const res = await invokeChatHandler(chatRequestMock); expect(fetchStub).to.not.have.been.called; expect(sendRequestStub).to.have.not.been.called; @@ -1706,11 +1706,10 @@ Schema: }), }); global.fetch = fetchStub; - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'how to connect to mongodb', command: 'docs', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); expect(fetchStub).to.have.been.called; expect(sendRequestStub).to.have.not.been.called; @@ -1734,11 +1733,10 @@ Schema: json: () => Promise.reject(new Error('invalid json')), }); global.fetch = fetchStub; - const chatRequestMock = { + const chatRequestMock = createChatRequestMock({ prompt: 'how to connect to mongodb', command: 'docs', - references: [], - }; + }); await invokeChatHandler(chatRequestMock); expect(sendRequestStub).to.have.been.called; @@ -1985,7 +1983,8 @@ Schema: }); suite('determining the namespace', function () { - ['query', 'schema'].forEach(function (command) { + const testCases = ['query', 'schema'] as const; + testCases.forEach(function (command) { suite(`${command} command`, function () { beforeEach(function () { sendRequestStub.resolves({ @@ -2014,11 +2013,12 @@ Schema: let caughtError: Error | undefined; try { - await invokeChatHandler({ - prompt: 'find all docs by a name example', - command, - references: [], - }); + await invokeChatHandler( + createChatRequestMock({ + prompt: 'find all docs by a name example', + command, + }), + ); } catch (error) { caughtError = error as Error; } @@ -2034,11 +2034,12 @@ Schema: let caughtError: Error | undefined; try { - await invokeChatHandler({ - prompt: 'find all docs by a name example', - command, - references: [], - }); + await invokeChatHandler( + createChatRequestMock({ + prompt: 'find all docs by a name example', + command, + }), + ); } catch (error) { caughtError = error as Error; } @@ -2058,11 +2059,12 @@ Schema: 'renderCollectionsTree', ); - const chatResult = await invokeChatHandler({ - prompt: 'what is this', - command, - references: [], - }); + const chatResult = await invokeChatHandler( + createChatRequestMock({ + prompt: 'what is this', + command, + }), + ); expect(renderDatabasesTreeSpy.called).to.be.false; expect(renderCollectionsTreeSpy.calledOnce).to.be.true; @@ -2085,11 +2087,12 @@ Schema: 'renderDatabasesTree', ); - const chatResult = await invokeChatHandler({ - prompt: 'dbOne', - command, - references: [], - }); + const chatResult = await invokeChatHandler( + createChatRequestMock({ + prompt: 'dbOne', + command, + }), + ); expect(renderDatabasesTreeSpy.calledOnce).to.be.true; expect(renderCollectionsTreeSpy.called).to.be.false; @@ -2120,11 +2123,12 @@ Schema: let caughtError: Error | undefined; try { - await invokeChatHandler({ - prompt: 'find all docs by a name example', - command, - references: [], - }); + await invokeChatHandler( + createChatRequestMock({ + prompt: 'find all docs by a name example', + command, + }), + ); } catch (error) { caughtError = error as Error; } @@ -2138,11 +2142,12 @@ Schema: listCollectionsStub.resolves([]); let caughtError: Error | undefined; try { - await invokeChatHandler({ - prompt: 'find all docs by a name example', - command, - references: [], - }); + await invokeChatHandler( + createChatRequestMock({ + prompt: 'find all docs by a name example', + command, + }), + ); } catch (error) { caughtError = error as Error; } @@ -2163,11 +2168,12 @@ Schema: '_fetchCollectionSchemaAndSampleDocuments', ); - const chatResult = await invokeChatHandler({ - prompt: 'dbOne', - command, - references: [], - }); + const chatResult = await invokeChatHandler( + createChatRequestMock({ + prompt: 'dbOne', + command, + }), + ); expect(renderCollectionsTreeSpy.called).to.be.false; @@ -2193,11 +2199,12 @@ Schema: '_fetchCollectionSchemaAndSampleDocuments', ); - const chatResult = await invokeChatHandler({ - prompt: 'dbOne', - command, - references: [], - }); + const chatResult = await invokeChatHandler( + createChatRequestMock({ + prompt: 'dbOne', + command, + }), + ); expect(renderCollectionsTreeSpy.calledOnce).to.be.true; expect(fetchCollectionSchemaAndSampleDocumentsSpy.called).to.be @@ -2649,9 +2656,13 @@ Schema: const messageContents = messages.map((message) => { // There may be different types for the messages' content - const content = Array.isArray(message.content) - ? message.content.map((sub) => sub.value).join('') - : message.content; + const content = message.content + .map((sub) => + sub instanceof vscode.LanguageModelTextPart + ? sub.value + : sub.toString(), + ) + .join(''); return content; }); diff --git a/src/test/suite/stubs.ts b/src/test/suite/stubs.ts index b80ea604b..5391b40c0 100644 --- a/src/test/suite/stubs.ts +++ b/src/test/suite/stubs.ts @@ -233,6 +233,7 @@ const mockVSCodeTextDocument = { validateRange: (/* range: vscode.Range */): vscode.Range => mockRange, validatePosition: (/* position: vscode.Position */): vscode.Position => mockPosition, + encoding: 'utf8', }; const mockSelection = new vscode.Selection( diff --git a/syntaxes/mongodbInjection.tmLanguage.json b/syntaxes/mongodbInjection.tmLanguage.json index 8d2add5c7..0921df896 100644 --- a/syntaxes/mongodbInjection.tmLanguage.json +++ b/syntaxes/mongodbInjection.tmLanguage.json @@ -1917,6 +1917,15 @@ } } }, + { + "name": "meta.object.member.mongodb", + "match": "\\$rankFusion\\b", + "captures": { + "0": { + "name": "keyword.other.$rankFusion.mongodb" + } + } + }, { "name": "meta.object.member.mongodb", "match": "\\$redact\\b",