diff --git a/package.json b/package.json index 9b5fbab..26d8056 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "chai": "^6.2.2", "eslint": "^10.5.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-unicorn": "^78.0.0", + "eslint-plugin-unicorn": "^79.0.0", "husky": "^9.1.7", "mocha": "^12.0.0", "prettier": "^3.8.4", @@ -96,7 +96,8 @@ "minimatch@<3.1.4": "3.1.4", "minimatch@>=5.0.0 <5.1.8": "5.1.8", "minimatch@>=9.0.0 <9.0.7": "9.0.7", - "minimatch@>=10.0.0 <10.2.3": "10.2.3", + "minimatch@>=10.0.0 <11.0.1": "11.0.1", + "glob@>=9.0.0 <14.0.2": "14.0.2", "picomatch@<2.3.2": "2.3.2", "picomatch@>=4.0.0 <4.0.4": "4.0.4", "serialize-javascript": ">=7.0.5", @@ -108,7 +109,7 @@ "brace-expansion@>=3.0.0 <5.0.12": "5.0.12", "ws@>=8.0.0 <8.21.0": "8.21.0", "esbuild@<0.28.1": ">=0.28.1", - "qs@<6.16.0": "6.16.0", + "qs@<6.16.1": "6.16.1", "fast-uri@>=3.0.0 <3.1.9": "3.1.9", "hono@>=4.0.0 <4.13.11": "4.13.11", "source-map-js@<1.2.2": "1.2.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9e4e3fe..5e22f9a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,7 +17,8 @@ overrides: minimatch@<3.1.4: 3.1.4 minimatch@>=5.0.0 <5.1.8: 5.1.8 minimatch@>=9.0.0 <9.0.7: 9.0.7 - minimatch@>=10.0.0 <10.2.3: 10.2.3 + minimatch@>=10.0.0 <11.0.1: 11.0.1 + glob@>=9.0.0 <14.0.2: 14.0.2 picomatch@<2.3.2: 2.3.2 picomatch@>=4.0.0 <4.0.4: 4.0.4 serialize-javascript: '>=7.0.5' @@ -29,7 +30,7 @@ overrides: brace-expansion@>=3.0.0 <5.0.12: 5.0.12 ws@>=8.0.0 <8.21.0: 8.21.0 esbuild@<0.28.1: '>=0.28.1' - qs@<6.16.0: 6.16.0 + qs@<6.16.1: 6.16.1 fast-uri@>=3.0.0 <3.1.9: 3.1.9 hono@>=4.0.0 <4.13.11: 4.13.11 source-map-js@<1.2.2: 1.2.2 @@ -45,7 +46,7 @@ importers: version: 1.8.1 '@modelcontextprotocol/sdk': specifier: ^1.31.0 - version: 1.32.1(zod@4.6.7) + version: 1.32.2(zod@4.6.7) '@supabase/supabase-js': specifier: ^2.108.2 version: 2.118.0 @@ -82,7 +83,7 @@ importers: devDependencies: '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.13.0) + version: 10.0.1(eslint@10.14.0) '@types/chai': specifier: ^5.2.3 version: 5.2.3 @@ -94,7 +95,7 @@ importers: version: 10.0.10 '@types/node': specifier: ^26.0.0 - version: 26.6.5 + version: 26.6.6 '@types/yazl': specifier: ^3.3.1 version: 3.3.1 @@ -103,13 +104,13 @@ importers: version: 6.3.0 eslint: specifier: ^10.5.0 - version: 10.13.0 + version: 10.14.0 eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.13.0) + version: 10.1.8(eslint@10.14.0) eslint-plugin-unicorn: - specifier: ^78.0.0 - version: 78.0.0(eslint@10.13.0)(typescript@6.0.3) + specifier: ^79.0.0 + version: 79.0.0(eslint@10.14.0)(typescript@6.0.3) husky: specifier: ^9.1.7 version: 9.1.7 @@ -130,7 +131,7 @@ importers: version: 6.0.3 typescript-eslint: specifier: ^8.61.1 - version: 8.72.0(eslint@10.13.0)(typescript@6.0.3) + version: 8.72.1(eslint@10.14.0)(typescript@6.0.3) packages: @@ -347,8 +348,8 @@ packages: resolution: {integrity: sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@hono/node-server@2.1.4': - resolution: {integrity: sha512-2g1qeHl4BduwDn6L8nkAvDrPUWPMlkQ//a5NhP/zIyaXKMjZNRV+cG9Csu+BiJFf6+68pqzjf4Hi5sJGKHuS1g==} + '@hono/node-server@2.1.5': + resolution: {integrity: sha512-MgP/I06GdvsilDspMk/qmRzpk8LOUStP6jFAbSRi40W09DhoyUn+Mj7eyKICPqeYKybOjVFLVIAQzvu1bfIa7Q==} engines: {node: '>=20'} peerDependencies: hono: 4.13.11 @@ -377,6 +378,9 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} + '@isaacs/nonrecursive-glob-match@1.0.3': + resolution: {integrity: sha512-SI7kyKHq4XXDRozw+r9GlRZkia1ZkFrpLW98r2IC2Bpr8YkFGE3fvjzmxCG0x78A++69HmDNrDvSMYBZmHGpKA==} + '@keyv/bigmap@1.3.1': resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==} engines: {node: '>= 18'} @@ -386,8 +390,8 @@ packages: '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - '@modelcontextprotocol/sdk@1.32.1': - resolution: {integrity: sha512-2DdE+SJDtzLEEWzY1ZjY7Q+VcPhcV1KisD3zI4u0XZyktsjHum1mwbMI+JaulUBi2OZk+KJAi2uPXzxichPkdw==} + '@modelcontextprotocol/sdk@1.32.2': + resolution: {integrity: sha512-SWsVtH/0vULSQStoZ6xxH2K09Li8fXYTMC64ZeogCdpZ3XSi1eCPOByV1OpuJxuI3OcmHhosDWYyii07tpPsLw==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 @@ -452,8 +456,8 @@ packages: '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} - '@types/estree@1.0.9': - resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/estree@1.0.10': + resolution: {integrity: sha512-lTyOMnOcmRBzdCv6/4zUZCrEhV0xrqQiUZBZtVcbmLHBXKLnN8q89v/wKRF/Q0HbwVsqbIG3o5HDoFl9sduM+g==} '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} @@ -467,69 +471,69 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@26.6.5': - resolution: {integrity: sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==} + '@types/node@26.6.6': + resolution: {integrity: sha512-MzQj+8Kx3XI40OmUAE6Qoh58ZMNstNNMwn2nfd3qWsfe7nDNSqJNzes4njhz6AHwrSHOffSLwXU6yb474Q4aog==} '@types/yazl@3.3.1': resolution: {integrity: sha512-DIWfCKpsTp6hE5BDBHV3+fIL/bLUF9Bv13iDrWnMlmhQpH67buNvI291ZauQ1xcccxK3FqQ9honnXpq4R8NMuQ==} - '@typescript-eslint/eslint-plugin@8.72.0': - resolution: {integrity: sha512-aysKgysPX9XOv/dk95UkvUDe++Q3n3dJPG9CEWT3RUccxfkPJ+Qn6nhKPDhZXU6Ofo9kgwGWwKyQCnZIXTgngg==} + '@typescript-eslint/eslint-plugin@8.72.1': + resolution: {integrity: sha512-5CokTWXpmbylfFabsbvHC0CAw3XLaGnoa+nFJX5FR592h/LoZsENUE6p/rg5xvkKrFEXz6pYmgI29AgXc2N3BQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.72.0 + '@typescript-eslint/parser': ^8.72.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.72.0': - resolution: {integrity: sha512-0O+x3ynciD6zuXb1CKSu165haQV6ey53DKhHHUnujP7U+XlltJG+/keT0Xhd1HXCze+IHf7Tvt39ovyepX/LNw==} + '@typescript-eslint/parser@8.72.1': + resolution: {integrity: sha512-ZGwZP4OCfyA0AQTpEAMWz+rtX01DRhQWW5hB0ucKDEIX5U7jdmPSaMx94rQfaPAQzIYz2BimOgKOJtjfpRFQ9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.72.0': - resolution: {integrity: sha512-bzHngBbmIgzj6TsTjVUCntGx6FFLgE7mPjpO0PzHycOaZHXqS43XnrkFIHRS16LLr/xO6FHSXG3GJFo/F4bSBQ==} + '@typescript-eslint/project-service@8.72.1': + resolution: {integrity: sha512-fAuVMkwdO/huI8nyo/WKnNKf6Gag93S56Rh3Ts5mGcavwSdaN8tRg1gCeIGX8PF+nzp1BjGfO4gHhGzW1J6jTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.72.0': - resolution: {integrity: sha512-JewPyJOYcXBSAS7PIgufscHOwZqhTGyBRiQJhhuDln66tMchxvvt7nJ90JKKIoOelmdHA3kAQbm9cEUHc4JSEA==} + '@typescript-eslint/scope-manager@8.72.1': + resolution: {integrity: sha512-lC/t6eMCZZQAAKZEYGL6RDVSuFehpdmMT6h+nJIjIa6oylN/PwDgDVtEIbB7O9xFfZYtZAYLoLlDNWKJhtF+uQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.72.0': - resolution: {integrity: sha512-0vbxCf7xLVPSjcOdm6eQbgViH8EDJ8xnl1laLT9yoqSz2YmcSfSg5Vdl0JUvZf6rcuJ0ZivJIuMD4edTg8obaA==} + '@typescript-eslint/tsconfig-utils@8.72.1': + resolution: {integrity: sha512-e4D5R5vpeAEPBxT2BAzsFQL3sbwyeeeo5+aczgNSRK1V734jE7pTqaGFU+fXapWEQwnZbpFaTn32+Z8DwS6OTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.72.0': - resolution: {integrity: sha512-gEXxmmbSTSOVTC37IYYvremOM31v+UN2W772bJxmVYPhAOPSUxtacyb7wkm1EhkYKU6KzFJsdU44DCV4to0LWw==} + '@typescript-eslint/type-utils@8.72.1': + resolution: {integrity: sha512-iY2wlmyrXJmx4yxUGP3aYCFF3cA/6ShddOKmLU2dx7LnEykbAM8WThlxZEfd1NddqceF6eJmZUayxx9oKIYNlg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.72.0': - resolution: {integrity: sha512-Adfoy59kxNEjT5E5fnyrp7GpHYuWs8ONbdohu4ez6IU46qDq8LltG90tLmkucZB2uhYL8mqBjtXqGd8yhfjXqQ==} + '@typescript-eslint/types@8.72.1': + resolution: {integrity: sha512-LmE5IhQet1BWOWEXqBrVtBPsMAOQ6Nzk35d+WLh3mk4EUF33sqlfxjio1MdYeSvKSG5skactKKuixBIKXhL4Rw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.72.0': - resolution: {integrity: sha512-gwLfFgWcw15tN2KXDCJvxEOQjPn+P3j/n3eSqkZ5sX4VpW9Cosodr+tWwBZRvJT3TcKx6HnPRGZMCNAiP1Xhug==} + '@typescript-eslint/typescript-estree@8.72.1': + resolution: {integrity: sha512-DAlUoUV93hIvrtIQLwCbmZQYVZwOMhiHJrOVUUIWicFZaIYjTRqlY3I/NZevfkLmSqkNHRu2qYDcq9lrn16oOQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.72.0': - resolution: {integrity: sha512-0up3oArJZBYnzOaEXKo8DmI43QvMZyPoFEt9LWzRJcyl/RcJjfKKPebknN1VbTgXBf3M/KggUh5uUMdURLnseg==} + '@typescript-eslint/utils@8.72.1': + resolution: {integrity: sha512-5v5liypurJBFHCBNqh/RjsymAD+VWcE0djuGY/BUqp5fC3Qn+luWDEksjuTtWjPn6i5zQlUtkZCRG/CYG0yCkA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.72.0': - resolution: {integrity: sha512-E2mroviasaWecDzTGiGMtuEguuLVOeRggnrIn93CJuxYJzQBHbyymlT08aVQydbBal5538o+JkBKXh2sRuCyIA==} + '@typescript-eslint/visitor-keys@8.72.1': + resolution: {integrity: sha512-SB8xqipSzZHUePCCLNeYxqnxq83X61/qzNhjQGbTfjxGZIeOEP7tBgWYX05Tcd6CgE02WdTJnh5b8kMZJ/+bnQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@xmldom/xmldom@0.9.12': @@ -575,8 +579,8 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.11.29: - resolution: {integrity: sha512-YeesxhUmR4h5y5V8KF8iBCqJb8YFrBJ++XBTeGcWIaQOYXGN19JM0FoiOjAhwuDoln8owMgXcWBmgHtYSkky2w==} + baseline-browser-mapping@2.11.34: + resolution: {integrity: sha512-Aqr8mA1kIvyJ3UY5YAY7ib8LSo1DmDMbMnVqGPtsKW1LxaFQFwn9Eb3yvq2fUKJsRvaXjnAV7R5osqETapzNiA==} engines: {node: '>=6.0.0'} hasBin: true @@ -599,8 +603,8 @@ packages: browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - browserslist@4.29.3: - resolution: {integrity: sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==} + browserslist@4.29.5: + resolution: {integrity: sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -630,8 +634,8 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} - caniuse-lite@1.0.30001816: - resolution: {integrity: sha512-+8Yx7BXCoqk6IF8yTicjfUR6D/ldJzdlsodlEOiOSPmhK844WIgk67/zIQaGAOxNkZyyvBlrRFnLvqKIoqbAFw==} + caniuse-lite@1.0.30001820: + resolution: {integrity: sha512-gfWD6MxqVCqAOwmODfZf7DchWvlrA+SRdNX7ceLfg3xRqe5ssjjpF7EgslC/0tiLiNTajdaNN/q8c/5u/7Gz8w==} chai@6.3.0: resolution: {integrity: sha512-XWAtwJ6OHO+tj0EKCs0Y2UamnyOxseZWltU4x2U2wh8g4AigdjwvtUjvLP2tqkA/avxHEtzxNaqGq/YGNwckKg==} @@ -685,8 +689,8 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - core-js-compat@3.50.0: - resolution: {integrity: sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==} + core-js-compat@3.51.0: + resolution: {integrity: sha512-52r6fkXgxv4GLMjmFcMWRx7X9bw071xTTdrDcdyPGRqU2oE+9pCG0bAOMifSBdLw0JRBZKEF0q3B55qPlLuE8g==} engines: {node: '>=6.4.0'} cors@2.8.6: @@ -745,11 +749,11 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.458: - resolution: {integrity: sha512-/hIH2gRSmxrf4/X4Nw/t/Wc8PVS22l8/3HnWjWTWsTOM5dsnMUPZF/+u+yr3LqweNuTBJE1rq6qAQzKkZVwMfA==} + electron-to-chromium@1.5.468: + resolution: {integrity: sha512-8XdEp3sIqO+PzmVPxhzqHq/3+yCxp44m27cm2WY1sRn3ZhwKyKmqSi2hx6gEhmnOXmh8NUuYE00z6Onzn5m6DA==} - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + encodeurl@2.0.1: + resolution: {integrity: sha512-Ev/hIyePLZtpL98x562lvPtenrUfGr0lfaf44HFZ+hDEwso7ccV9QAZrEVLg0hxNAzygaAFxy2dYaAKKM0G06A==} engines: {node: '>= 0.8'} end-of-stream@1.4.5: @@ -793,8 +797,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-unicorn@78.0.0: - resolution: {integrity: sha512-XTDqxcJeAmh2lhgU75TpuMDdFtPDnAU+DCW56nR5UzXTG+uOyvOGjV80O11my7kNb2bYSCPlWa8c4K8/rwlYog==} + eslint-plugin-unicorn@79.0.0: + resolution: {integrity: sha512-k7MWrjoVTVCnjKpgaxBuScPNSPomLvDpsd9uADpWrIFzrnwiec27eWhGrmmyuTj1bC3xVNYP4QfG3MEzEw6ifg==} engines: {node: '>=22'} peerDependencies: eslint: '>=10.4' @@ -815,8 +819,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.13.0: - resolution: {integrity: sha512-UohDjD4zSzEwhf58M3O7vc/ycc8O1I7dNlhtD0WxE8Px8EHNJKtUwzBqrzeGhisRuv2ag4sAYswszCJRgKXYUg==} + eslint@10.14.0: + resolution: {integrity: sha512-T0pNsxkb9IKmtQjhpK3d7nWOpFv+YHuMbTJnSVMoQblF0onvXfErrtp4V1jHtsQPan7dKaGVD0q1WCXnzMF31A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -861,8 +865,8 @@ packages: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} - express-rate-limit@8.7.1: - resolution: {integrity: sha512-2FXbqkygil3mZiXzEtM0IjE/UBmBNot0J1GEVrJT4JbrvwOSoEtqtO+wHbiMQELWe1eNvHoYRg2dkjOid+6JkA==} + express-rate-limit@8.7.2: + resolution: {integrity: sha512-U1ScocxDD9WI09LaBVypvNkOtNR5yWAmZLkuKJdAzIchA4YKFYF6GT5IKER7epG58oXtjvGlV0/6ii0F83EyZg==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' @@ -969,8 +973,8 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@13.0.6: - resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + glob@14.0.2: + resolution: {integrity: sha512-vfMgTR2djMHPUchsJMLpZlYQvtjVL+mHpEr5wPpoCbQs2vr/FBNK+3Gnl9Ara1DSs4Aeg4eG9HiADb5/rkY/ZA==} engines: {node: 18 || 20 || >=22} globals@17.13.0: @@ -1035,8 +1039,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.13: - resolution: {integrity: sha512-2E8Q6rh+1RRSq/YdaGsNfXsEZy9FVqv6BSSrkmZJP7BnaoPnRfKL+YaofPvP+5rzdk144qSm6i4+hvPgUcbV4Q==} + ignore@7.0.14: + resolution: {integrity: sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ==} engines: {node: '>= 4'} imurmurhash@0.1.4: @@ -1054,8 +1058,8 @@ packages: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} - ip-address@10.7.4: - resolution: {integrity: sha512-DWBMKyeM25D70nrIiTkgQth59/G+naKOTep6huF9j+GmeK3DMD60Zvxg5d5qQnz+38AHgou6ean2LECX+lrKDg==} + ip-address@10.7.5: + resolution: {integrity: sha512-t2v0rkILYv9WXmSL7TpAaU3HXgaFYOPUcH3QHgwQ++gpJuH3bqyMy4Fvt/DJCTKwzH3Cf+bAp5W/mFL39KPLzA==} engines: {node: '>= 12'} ipaddr.js@1.9.1: @@ -1104,8 +1108,8 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jose@6.2.12: - resolution: {integrity: sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==} + jose@6.2.14: + resolution: {integrity: sha512-3JasLuki1NRLQvY4wCoC37KZk4qxoBx2k2aFqLxT84IezqW0bkJKnNtxnZj/Fu1xsQivoc/lytxaRHJoGLjJ1A==} js-base64@3.7.8: resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} @@ -1264,12 +1268,8 @@ packages: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} - minimatch@10.2.3: - resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==} - engines: {node: 18 || 20 || >=22} - - minimatch@10.2.6: - resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} + minimatch@11.0.1: + resolution: {integrity: sha512-t+Vn6DX4wPCxS23y03C0uhF7S1jpi1GfqPrnlEipCJaA2ykiNbMkVlDutZtmvLfRcUN6R8AYVlzTsQrT4RZoLQ==} engines: {node: 18 || 20 || >=22} minimist@1.2.8: @@ -1301,8 +1301,8 @@ packages: nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - node-releases@2.0.59: - resolution: {integrity: sha512-5qr2okC4ItAI0hG5SaV0HoYMpnM/Y6+Oqr7AmPYy/2uEoGvS+GbSKLeRxSS1uAdu59yz0ouzcuXievSgg///WA==} + node-releases@2.0.62: + resolution: {integrity: sha512-A0Eq+qVDQI97IbAD6g/HriIuv256el9N8EwF4+xqJ49pwrdRYpdCSmLk0sO4I3fnS6hpYE5v22B73Bk+WArEoQ==} engines: {node: '>=18'} node-stream-zip@1.16.0: @@ -1321,8 +1321,8 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + on-finished@2.4.2: + resolution: {integrity: sha512-ATWUv387i+nLD49EiDoOft5scf32Vsdz3ktrQJG9bi7jRFmaXTssvyvj1EmeKVVgvesbqUtvQQvaS2TpTukAZQ==} engines: {node: '>= 0.8'} once@1.4.0: @@ -1366,8 +1366,8 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@2.0.2: - resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + path-scurry@3.0.0: + resolution: {integrity: sha512-1pTbQqH1wIwMi/eleQ5leFTTCkzFsPcgXNjwOA8YGGW/W4/kHT3dssE7Z6NH+zuqNLOzOB0uaD61yl7cAcVhgg==} engines: {node: 18 || 20 || >=22} path-to-regexp@8.4.2: @@ -1423,10 +1423,6 @@ packages: resolution: {integrity: sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==} engines: {node: '>=20'} - qs@6.16.0: - resolution: {integrity: sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==} - engines: {node: '>=0.6'} - qs@6.16.1: resolution: {integrity: sha512-5Px6J7rfHBAGUhNQ3es4YzcOdBBw0SDcVtThJml4RdnKw4tKs2epA0kPZ+K8X+WiHktT93RHVcQ/3ym5aTCgtg==} engines: {node: '>=0.6'} @@ -1637,8 +1633,8 @@ packages: resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} engines: {node: '>= 18'} - typescript-eslint@8.72.0: - resolution: {integrity: sha512-r26Fkc8As+mZvqp7SLsMmNFyYUup/6CjK7/eHBHmhOw6GH6n6YFxHVFrG0jN1c5CMpDzelLPxvgeCOzx7BjN+A==} + typescript-eslint@8.72.1: + resolution: {integrity: sha512-3Li9FfPmQp45nxEtFD1ZCrYFI3cYK5kpyNtmm1H7lMagm8u9sy6PTjy3ytwQZs7KNukOyKFHAZ6z6GjYFeaeXw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -1823,9 +1819,9 @@ snapshots: '@esbuild/win32-x64@0.28.2': optional: true - '@eslint-community/eslint-utils@4.10.1(eslint@10.13.0)': + '@eslint-community/eslint-utils@4.10.1(eslint@10.14.0)': dependencies: - eslint: 10.13.0 + eslint: 10.14.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -1834,7 +1830,7 @@ snapshots: dependencies: '@eslint/object-schema': 3.0.5 debug: 4.4.3(supports-color@8.1.1) - minimatch: 10.2.6 + minimatch: 11.0.1 transitivePeerDependencies: - supports-color @@ -1851,9 +1847,9 @@ snapshots: mdn-data: 2.37.2 source-map-js: 1.2.2 - '@eslint/js@10.0.1(eslint@10.13.0)': + '@eslint/js@10.0.1(eslint@10.14.0)': optionalDependencies: - eslint: 10.13.0 + eslint: 10.14.0 '@eslint/object-schema@3.0.5': {} @@ -1862,7 +1858,7 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 - '@hono/node-server@2.1.4(hono@4.13.11)': + '@hono/node-server@2.1.5(hono@4.13.11)': dependencies: hono: 4.13.11 @@ -1886,6 +1882,8 @@ snapshots: dependencies: minipass: 7.1.3 + '@isaacs/nonrecursive-glob-match@1.0.3': {} + '@keyv/bigmap@1.3.1(keyv@5.6.0)': dependencies: hashery: 1.5.1 @@ -1894,9 +1892,9 @@ snapshots: '@keyv/serialize@1.1.1': {} - '@modelcontextprotocol/sdk@1.32.1(zod@4.6.7)': + '@modelcontextprotocol/sdk@1.32.2(zod@4.6.7)': dependencies: - '@hono/node-server': 2.1.4(hono@4.13.11) + '@hono/node-server': 2.1.5(hono@4.13.11) ajv: 8.20.0 ajv-formats: 3.0.1(ajv@8.20.0) content-type: 1.0.5 @@ -1905,9 +1903,9 @@ snapshots: eventsource: 3.0.7 eventsource-parser: 3.1.1 express: 5.3.0 - express-rate-limit: 8.7.1(express@5.3.0) + express-rate-limit: 8.7.2(express@5.3.0) hono: 4.13.11 - jose: 6.2.12 + jose: 6.2.14 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 @@ -1973,7 +1971,7 @@ snapshots: '@types/esrecurse@4.3.1': {} - '@types/estree@1.0.9': {} + '@types/estree@1.0.10': {} '@types/js-yaml@4.0.9': {} @@ -1983,82 +1981,82 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@26.6.5': + '@types/node@26.6.6': dependencies: undici-types: 8.9.0 '@types/yazl@3.3.1': dependencies: - '@types/node': 26.6.5 + '@types/node': 26.6.6 - '@typescript-eslint/eslint-plugin@8.72.0(@typescript-eslint/parser@8.72.0(eslint@10.13.0)(typescript@6.0.3))(eslint@10.13.0)(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.72.1(@typescript-eslint/parser@8.72.1(eslint@10.14.0)(typescript@6.0.3))(eslint@10.14.0)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.72.0(eslint@10.13.0)(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.72.0 - '@typescript-eslint/type-utils': 8.72.0(eslint@10.13.0)(typescript@6.0.3) - '@typescript-eslint/utils': 8.72.0(eslint@10.13.0)(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.72.0 - eslint: 10.13.0 - ignore: 7.0.13 + '@typescript-eslint/parser': 8.72.1(eslint@10.14.0)(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.72.1 + '@typescript-eslint/type-utils': 8.72.1(eslint@10.14.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.72.1(eslint@10.14.0)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.72.1 + eslint: 10.14.0 + ignore: 7.0.14 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.72.0(eslint@10.13.0)(typescript@6.0.3)': + '@typescript-eslint/parser@8.72.1(eslint@10.14.0)(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.72.0 - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/typescript-estree': 8.72.0(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.72.0 + '@typescript-eslint/scope-manager': 8.72.1 + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/typescript-estree': 8.72.1(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.72.1 debug: 4.4.3(supports-color@8.1.1) - eslint: 10.13.0 + eslint: 10.14.0 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.72.0(typescript@6.0.3)': + '@typescript-eslint/project-service@8.72.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.72.0(typescript@6.0.3) - '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/tsconfig-utils': 8.72.1(typescript@6.0.3) + '@typescript-eslint/types': 8.72.1 debug: 4.4.3(supports-color@8.1.1) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.72.0': + '@typescript-eslint/scope-manager@8.72.1': dependencies: - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/visitor-keys': 8.72.0 + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/visitor-keys': 8.72.1 - '@typescript-eslint/tsconfig-utils@8.72.0(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.72.1(typescript@6.0.3)': dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.72.0(eslint@10.13.0)(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.72.1(eslint@10.14.0)(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/typescript-estree': 8.72.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.72.0(eslint@10.13.0)(typescript@6.0.3) + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/typescript-estree': 8.72.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.72.1(eslint@10.14.0)(typescript@6.0.3) debug: 4.4.3(supports-color@8.1.1) - eslint: 10.13.0 + eslint: 10.14.0 ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.72.0': {} + '@typescript-eslint/types@8.72.1': {} - '@typescript-eslint/typescript-estree@8.72.0(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.72.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.72.0(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.72.0(typescript@6.0.3) - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/visitor-keys': 8.72.0 + '@typescript-eslint/project-service': 8.72.1(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.72.1(typescript@6.0.3) + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/visitor-keys': 8.72.1 debug: 4.4.3(supports-color@8.1.1) - minimatch: 10.2.3 + minimatch: 11.0.1 semver: 7.8.5 tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -2066,20 +2064,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.72.0(eslint@10.13.0)(typescript@6.0.3)': + '@typescript-eslint/utils@8.72.1(eslint@10.14.0)(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0) - '@typescript-eslint/scope-manager': 8.72.0 - '@typescript-eslint/types': 8.72.0 - '@typescript-eslint/typescript-estree': 8.72.0(typescript@6.0.3) - eslint: 10.13.0 + '@eslint-community/eslint-utils': 4.10.1(eslint@10.14.0) + '@typescript-eslint/scope-manager': 8.72.1 + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/typescript-estree': 8.72.1(typescript@6.0.3) + eslint: 10.14.0 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.72.0': + '@typescript-eslint/visitor-keys@8.72.1': dependencies: - '@typescript-eslint/types': 8.72.0 + '@typescript-eslint/types': 8.72.1 eslint-visitor-keys: 5.0.1 '@xmldom/xmldom@0.9.12': {} @@ -2119,7 +2117,7 @@ snapshots: balanced-match@4.0.4: {} - baseline-browser-mapping@2.11.29: {} + baseline-browser-mapping@2.11.34: {} body-parser@2.4.0: dependencies: @@ -2128,7 +2126,7 @@ snapshots: debug: 4.4.3(supports-color@8.1.1) http-errors: 2.0.1 iconv-lite: 0.7.3 - on-finished: 2.4.1 + on-finished: 2.4.2 qs: 6.16.1 raw-body: 3.0.2 type-is: 2.1.0 @@ -2147,13 +2145,13 @@ snapshots: browser-stdout@1.3.1: {} - browserslist@4.29.3: + browserslist@4.29.5: dependencies: - baseline-browser-mapping: 2.11.29 - caniuse-lite: 1.0.30001816 - electron-to-chromium: 1.5.458 - node-releases: 2.0.59 - update-browserslist-db: 1.3.4(browserslist@4.29.3) + baseline-browser-mapping: 2.11.34 + caniuse-lite: 1.0.30001820 + electron-to-chromium: 1.5.468 + node-releases: 2.0.62 + update-browserslist-db: 1.3.4(browserslist@4.29.5) buffer-crc32@1.0.0: {} @@ -2181,7 +2179,7 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 - caniuse-lite@1.0.30001816: {} + caniuse-lite@1.0.30001820: {} chai@6.3.0: {} @@ -2216,9 +2214,9 @@ snapshots: cookie@0.7.2: {} - core-js-compat@3.50.0: + core-js-compat@3.51.0: dependencies: - browserslist: 4.29.3 + browserslist: 4.29.5 cors@2.8.6: dependencies: @@ -2273,9 +2271,9 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.458: {} + electron-to-chromium@1.5.468: {} - encodeurl@2.0.0: {} + encodeurl@2.0.1: {} end-of-stream@1.4.5: dependencies: @@ -2326,21 +2324,21 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.13.0): + eslint-config-prettier@10.1.8(eslint@10.14.0): dependencies: - eslint: 10.13.0 + eslint: 10.14.0 - eslint-plugin-unicorn@78.0.0(eslint@10.13.0)(typescript@6.0.3): + eslint-plugin-unicorn@79.0.0(eslint@10.14.0)(typescript@6.0.3): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.14.0) '@eslint/css-tree': 4.1.2 - browserslist: 4.29.3 + browserslist: 4.29.5 change-case: 5.4.4 ci-info: 4.4.0 - core-js-compat: 3.50.0 + core-js-compat: 3.51.0 detect-indent: 7.0.2 entities: 8.1.0 - eslint: 10.13.0 + eslint: 10.14.0 find-up-simple: 1.0.1 globals: 17.13.0 identifier-regex: 1.1.0 @@ -2363,7 +2361,7 @@ snapshots: eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 - '@types/estree': 1.0.9 + '@types/estree': 1.0.10 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -2371,9 +2369,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.13.0: + eslint@10.14.0: dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.14.0) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.7.0 @@ -2382,7 +2380,7 @@ snapshots: '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.9 + '@types/estree': 1.0.10 ajv: 6.14.0 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@8.1.1) @@ -2400,7 +2398,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - minimatch: 10.2.6 + minimatch: 11.0.1 natural-compare: 1.4.0 optionator: 0.9.4 transitivePeerDependencies: @@ -2442,11 +2440,11 @@ snapshots: signal-exit: 3.0.7 strip-eof: 1.0.0 - express-rate-limit@8.7.1(express@5.3.0): + express-rate-limit@8.7.2(express@5.3.0): dependencies: debug: 4.4.3(supports-color@8.1.1) express: 5.3.0 - ip-address: 10.7.4 + ip-address: 10.7.5 transitivePeerDependencies: - supports-color @@ -2460,7 +2458,7 @@ snapshots: cookie-signature: 1.2.2 debug: 4.4.3(supports-color@8.1.1) depd: 2.0.0 - encodeurl: 2.0.0 + encodeurl: 2.0.1 escape-html: 1.0.3 etag: 1.8.1 finalhandler: 2.1.1 @@ -2468,11 +2466,11 @@ snapshots: http-errors: 2.0.1 merge-descriptors: 2.0.0 mime-types: 3.0.2 - on-finished: 2.4.1 + on-finished: 2.4.2 once: 1.4.0 parseurl: 1.3.3 proxy-addr: 2.0.8 - qs: 6.16.0 + qs: 6.16.1 range-parser: 1.3.0 router: 2.2.0 send: 1.2.1 @@ -2528,9 +2526,9 @@ snapshots: finalhandler@2.1.1: dependencies: debug: 4.4.3(supports-color@8.1.1) - encodeurl: 2.0.0 + encodeurl: 2.0.1 escape-html: 1.0.3 - on-finished: 2.4.1 + on-finished: 2.4.2 parseurl: 1.3.3 statuses: 2.0.2 transitivePeerDependencies: @@ -2590,11 +2588,11 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@13.0.6: + glob@14.0.2: dependencies: - minimatch: 10.2.3 + minimatch: 11.0.1 minipass: 7.1.3 - path-scurry: 2.0.2 + path-scurry: 3.0.0 globals@17.13.0: {} @@ -2642,7 +2640,7 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.13: {} + ignore@7.0.14: {} imurmurhash@0.1.4: {} @@ -2652,7 +2650,7 @@ snapshots: interpret@1.4.0: {} - ip-address@10.7.4: {} + ip-address@10.7.5: {} ipaddr.js@1.9.1: {} @@ -2684,7 +2682,7 @@ snapshots: isexe@2.0.0: {} - jose@6.2.12: {} + jose@6.2.14: {} js-base64@3.7.8: {} @@ -2896,12 +2894,9 @@ snapshots: dependencies: mime-db: 1.54.0 - minimatch@10.2.3: - dependencies: - brace-expansion: 5.0.12 - - minimatch@10.2.6: + minimatch@11.0.1: dependencies: + '@isaacs/nonrecursive-glob-match': 1.0.3 brace-expansion: 5.0.12 minimist@1.2.8: {} @@ -2919,11 +2914,11 @@ snapshots: debug: 4.4.3(supports-color@8.1.1) diff: 8.0.3 find-up-simple: 1.0.1 - glob: 13.0.6 + glob: 14.0.2 is-path-inside: 4.0.0 is-unicode-supported: 0.1.0 js-yaml: 5.5.0 - minimatch: 10.2.3 + minimatch: 11.0.1 ms: 2.1.3 picocolors: 1.1.1 serialize-javascript: 7.1.2 @@ -2941,7 +2936,7 @@ snapshots: nice-try@1.0.5: {} - node-releases@2.0.59: {} + node-releases@2.0.62: {} node-stream-zip@1.16.0: {} @@ -2953,7 +2948,7 @@ snapshots: object-inspect@1.13.4: {} - on-finished@2.4.1: + on-finished@2.4.2: dependencies: ee-first: 1.1.1 @@ -2994,7 +2989,7 @@ snapshots: path-parse@1.0.7: {} - path-scurry@2.0.2: + path-scurry@3.0.0: dependencies: lru-cache: 11.5.3 minipass: 7.1.3 @@ -3042,11 +3037,6 @@ snapshots: dependencies: hookified: 2.2.0 - qs@6.16.0: - dependencies: - es-define-property: 1.0.1 - side-channel: 1.1.1 - qs@6.16.1: dependencies: es-define-property: 1.0.1 @@ -3117,14 +3107,14 @@ snapshots: send@1.2.1: dependencies: debug: 4.4.3(supports-color@8.1.1) - encodeurl: 2.0.0 + encodeurl: 2.0.1 escape-html: 1.0.3 etag: 1.8.1 fresh: 2.0.0 http-errors: 2.0.1 mime-types: 3.0.2 ms: 2.1.3 - on-finished: 2.4.1 + on-finished: 2.4.2 range-parser: 1.3.0 statuses: 2.0.2 transitivePeerDependencies: @@ -3134,7 +3124,7 @@ snapshots: serve-static@2.2.1: dependencies: - encodeurl: 2.0.0 + encodeurl: 2.0.1 escape-html: 1.0.3 parseurl: 1.3.3 send: 1.2.1 @@ -3266,13 +3256,13 @@ snapshots: media-typer: 1.1.1 mime-types: 3.0.2 - typescript-eslint@8.72.0(eslint@10.13.0)(typescript@6.0.3): + typescript-eslint@8.72.1(eslint@10.14.0)(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.72.0(@typescript-eslint/parser@8.72.0(eslint@10.13.0)(typescript@6.0.3))(eslint@10.13.0)(typescript@6.0.3) - '@typescript-eslint/parser': 8.72.0(eslint@10.13.0)(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.72.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.72.0(eslint@10.13.0)(typescript@6.0.3) - eslint: 10.13.0 + '@typescript-eslint/eslint-plugin': 8.72.1(@typescript-eslint/parser@8.72.1(eslint@10.14.0)(typescript@6.0.3))(eslint@10.14.0)(typescript@6.0.3) + '@typescript-eslint/parser': 8.72.1(eslint@10.14.0)(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.72.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.72.1(eslint@10.14.0)(typescript@6.0.3) + eslint: 10.14.0 typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -3283,9 +3273,9 @@ snapshots: unpipe@1.0.0: {} - update-browserslist-db@1.3.4(browserslist@4.29.3): + update-browserslist-db@1.3.4(browserslist@4.29.5): dependencies: - browserslist: 4.29.3 + browserslist: 4.29.5 escalade: 3.2.0 picocolors: 1.1.1 diff --git a/src/commands/cloud.ts b/src/commands/cloud.ts index 969c633..f9a8261 100644 --- a/src/commands/cloud.ts +++ b/src/commands/cloud.ts @@ -490,11 +490,6 @@ export const cloudCommand = defineCommand({ throw new CliError('You must provide a flow file'); } - deviceValidationService.validateiOSDevice(iOSVersion, iOSDevice, compatibilityData, { - debug, - logger: (m: string) => out(m), - }); - // Render DB-driven notices (deprecation/warn/info/marketing) the API // returned with the compatibility data. Replaces the previously hardcoded // iOS-16 deprecation warning — that is now a seeded notice gated on the @@ -529,6 +524,13 @@ export const cloudCommand = defineCommand({ learnMoreUrl: n.learnMoreUrl, })); + // Validated after the notices, so a notice aimed at a removed device or + // OS version (e.g. removed-ios-17-2026-11-02) is shown before the + // rejection it explains. + deviceValidationService.validateiOSDevice(iOSVersion, iOSDevice, compatibilityData, { + debug, + logger: (m: string) => out(m), + }); deviceValidationService.validateAndroidDevice( androidApiLevel, androidDevice, diff --git a/src/mcp/tools/run-cloud-test.ts b/src/mcp/tools/run-cloud-test.ts index 38ae9c6..6801ed9 100644 --- a/src/mcp/tools/run-cloud-test.ts +++ b/src/mcp/tools/run-cloud-test.ts @@ -89,8 +89,8 @@ export function registerRunCloudTest(server: McpServer): void { .string() .optional() .describe('ID of a previously uploaded binary. Mutually exclusive with appFile.'), - iosVersion: z.string().optional().describe('iOS version, e.g. "17"'), - iosDevice: z.string().optional().describe('iOS device, e.g. "iphone-14"'), + iosVersion: z.string().optional().describe('iOS version, e.g. "26"'), + iosDevice: z.string().optional().describe('iOS device, e.g. "iphone-16"'), androidApiLevel: z.string().optional().describe('Android API level, e.g. "34"'), androidDevice: z.string().optional().describe('Android device, e.g. "pixel-10"'), googlePlay: z.boolean().optional().describe('Use a Google Play-enabled Android image'), diff --git a/src/services/device-validation.service.ts b/src/services/device-validation.service.ts index bdc1417..f3daace 100644 --- a/src/services/device-validation.service.ts +++ b/src/services/device-validation.service.ts @@ -155,8 +155,8 @@ export class DeviceValidationService { `[DEBUG] Supported iOS versions: ${supportedVersions.join(', ')}`, ], // Mirrors the API's global defaults, as for Android above. - defaultDevice: 'iphone-14', - defaultVersion: '17', + defaultDevice: 'iphone-16', + defaultVersion: '26', device: iOSDevice, deviceArg: argNames.iOSDevice, deviceKind: 'iOS', diff --git a/src/types/domain/device.types.ts b/src/types/domain/device.types.ts index 20d58b5..3cce15e 100644 --- a/src/types/domain/device.types.ts +++ b/src/types/domain/device.types.ts @@ -14,19 +14,17 @@ */ export enum EiOSDevices { - 'ipad-pro-6th-gen' = 'ipad-pro-6th-gen', 'ipad-pro-m5-11' = 'ipad-pro-m5-11', 'ipad-pro-m5-13' = 'ipad-pro-m5-13', 'iphone-14' = 'iphone-14', - 'iphone-15' = 'iphone-15', 'iphone-16' = 'iphone-16', - 'iphone-16-plus' = 'iphone-16-plus', 'iphone-16-pro' = 'iphone-16-pro', 'iphone-16-pro-max' = 'iphone-16-pro-max', 'iphone-17' = 'iphone-17', 'iphone-18-pro' = 'iphone-18-pro', 'iphone-18-pro-max' = 'iphone-18-pro-max', 'iphone-air' = 'iphone-air', + 'iphone-duo' = 'iphone-duo', } export enum EAndroidDevices { diff --git a/test/integration/cloud.integration.test.ts b/test/integration/cloud.integration.test.ts index 08a7806..8453f5d 100644 --- a/test/integration/cloud.integration.test.ts +++ b/test/integration/cloud.integration.test.ts @@ -141,7 +141,7 @@ appId: com.example.app describe('device management path', () => { it('should accept valid iOS device configuration', async () => { - const command = `${CLI} cloud ${iosAppFile} ${testFlowFile} --api-key ${mockApiKey} --api-url ${mockApiUrl} --ios-device iphone-14 --ios-version 17 --async --json`; + const command = `${CLI} cloud ${iosAppFile} ${testFlowFile} --api-key ${mockApiKey} --api-url ${mockApiUrl} --ios-device iphone-14 --ios-version 18 --async --json`; const { stdout } = await exec(command, { timeout: 30_000 }); expectAsyncRunJson(stdout); @@ -175,10 +175,10 @@ appId: com.example.app }); it('asks for the version when a lone device needs a non-default one', async () => { - const command = `${CLI} cloud ${iosAppFile} ${testFlowFile} --api-key ${mockApiKey} --api-url ${mockApiUrl} --ios-device iphone-17 --dry-run`; + const command = `${CLI} cloud ${iosAppFile} ${testFlowFile} --api-key ${mockApiKey} --api-url ${mockApiUrl} --ios-device iphone-14 --dry-run`; const { output } = await runExpectingFailure(command); - expect(output).to.include('iphone-17 only supports these iOS versions'); + expect(output).to.include('iphone-14 only supports these iOS versions'); expect(output).to.include('--ios-version'); }); }); @@ -186,7 +186,7 @@ appId: com.example.app // #1105 device matrix: repeated --ios-device-matrix / --android-device-matrix cells. describe('device matrix', () => { it('accepts a repeated --ios-device-matrix matrix and still yields one upload', async () => { - const command = `${CLI} cloud ${iosAppFile} ${testFlowFile} --api-key ${mockApiKey} --api-url ${mockApiUrl} --ios-device-matrix iphone-16:18 --ios-device-matrix iphone-16-pro:26 --async --json`; + const command = `${CLI} cloud ${iosAppFile} ${testFlowFile} --api-key ${mockApiKey} --api-url ${mockApiUrl} --ios-device-matrix iphone-16:18 --ios-device-matrix iphone-17:26 --async --json`; const { stdout } = await exec(command, { timeout: 30_000 }); // Still one upload with one uploadId — the matrix is a property of the diff --git a/test/unit/device-matrix.test.ts b/test/unit/device-matrix.test.ts index 20476a1..bb8a5cd 100644 --- a/test/unit/device-matrix.test.ts +++ b/test/unit/device-matrix.test.ts @@ -20,12 +20,12 @@ describe('parseDeviceMatrix', () => { it('parses each --ios-device-matrix as exactly one cell (no cross-product)', () => { const matrix = parseDeviceMatrix( - ['iphone-16:18', 'iphone-16-pro:26'], + ['iphone-16:18', 'iphone-17:26'], [], ); expect(matrix).to.deep.equal([ { iOSDevice: 'iphone-16', iOSVersion: '18' }, - { iOSDevice: 'iphone-16-pro', iOSVersion: '26' }, + { iOSDevice: 'iphone-17', iOSVersion: '26' }, ]); expect(matrixIsIos(matrix)).to.equal(true); }); diff --git a/test/unit/device-validation.service.test.ts b/test/unit/device-validation.service.test.ts index 5f25e9f..943020f 100644 --- a/test/unit/device-validation.service.test.ts +++ b/test/unit/device-validation.service.test.ts @@ -12,6 +12,7 @@ import type { CompatibilityData } from '../../src/utils/compatibility.js'; const compat: CompatibilityData = { ios: { 'iphone-14': ['17', '18'], + 'iphone-16': ['18', '26', '27'], 'iphone-17': ['26', '27'], 'iphone-19': ['28'], // A rollout gate can leave a device with nothing bookable. @@ -65,14 +66,14 @@ describe('DeviceValidationService', () => { describe('unknown devices', () => { it('rejects an unknown iOS device, listing what the API offers in its order', () => { - expect(() => ios('17', 'iphone-99')).to.throw( - 'iOS device "iphone-99" is not supported. Supported iOS devices: iphone-14, iphone-17, iphone-19. See https://docs.devicecloud.dev/getting-started/devices-configuration', + expect(() => ios('26', 'iphone-99')).to.throw( + 'iOS device "iphone-99" is not supported. Supported iOS devices: iphone-14, iphone-16, iphone-17, iphone-19. See https://docs.devicecloud.dev/getting-started/devices-configuration', ); }); it('never offers a gated device, and treats it as unsupported', () => { - expect(() => ios('17', 'iphone-gated')).to.throw( - /iOS device "iphone-gated" is not supported\. Supported iOS devices: iphone-14, iphone-17, iphone-19\./, + expect(() => ios('26', 'iphone-gated')).to.throw( + /iOS device "iphone-gated" is not supported\. Supported iOS devices: iphone-14, iphone-16, iphone-17, iphone-19\./, ); }); @@ -95,14 +96,14 @@ describe('DeviceValidationService', () => { }); it('does not resolve a prototype member as a device', () => { - expect(() => ios('17', 'constructor')).to.throw( + expect(() => ios('26', 'constructor')).to.throw( /iOS device "constructor" is not supported/, ); }); it('still fails when the API sent no list at all, without an empty list', () => { const noIos = { ...compat, ios: {} }; - expect(() => ios('17', 'iphone-14', noIos)).to.throw( + expect(() => ios('18', 'iphone-14', noIos)).to.throw( 'iOS device "iphone-14" is not supported. See https://docs.devicecloud.dev/getting-started/devices-configuration', ); }); @@ -129,13 +130,13 @@ describe('DeviceValidationService', () => { }); }); - // The API fills an omitted half from the same global defaults (iphone-14 / - // iOS 17, pixel-10 / API 36) and rejects an incompatible pair, so the CLI + // The API fills an omitted half from the same global defaults (iphone-16 / + // iOS 26, pixel-10 / API 36) and rejects an incompatible pair, so the CLI // mirrors that — but must tell the user to pass the other half. describe('requests that rely on a default', () => { it('tells a device-only iOS request to pass the version explicitly', () => { - expect(() => ios(undefined, 'iphone-17')).to.throw( - 'iphone-17 only supports these iOS versions: 26, 27. No iOS version was given, so the default (17) was checked: pass one of those explicitly with --ios-version', + expect(() => ios(undefined, 'iphone-14')).to.throw( + 'iphone-14 only supports these iOS versions: 17, 18. No iOS version was given, so the default (26) was checked: pass one of those explicitly with --ios-version', ); }); @@ -146,14 +147,14 @@ describe('DeviceValidationService', () => { }); it('accepts a device-only request when the default version fits', () => { - expect(() => ios(undefined, 'iphone-14')).to.not.throw(); + expect(() => ios(undefined, 'iphone-17')).to.not.throw(); expect(() => android(undefined, 'pixel-7')).to.not.throw(); expect(() => android(undefined, 'pixel-10')).to.not.throw(); }); it('names the MCP tool parameters when asked to', () => { expect(() => - service.validateiOSDevice(undefined, 'iphone-17', compat, { + service.validateiOSDevice(undefined, 'iphone-14', compat, { argNames: MCP_ARG_NAMES, }), ).to.throw(/pass one of those explicitly with iosVersion$/); @@ -165,14 +166,14 @@ describe('DeviceValidationService', () => { }); it('points a version-only request at the devices that offer that version', () => { - expect(() => ios('27')).to.throw( - 'iphone-14 only supports these iOS versions: 17, 18. No iOS device was given, so the default (iphone-14) was checked: pass one that offers iOS 27 with --ios-device: iphone-17', + expect(() => ios('28')).to.throw( + 'iphone-16 only supports these iOS versions: 18, 26, 27. No iOS device was given, so the default (iphone-16) was checked: pass one that offers iOS 28 with --ios-device: iphone-19', ); }); it('says when no device offers the requested version at all', () => { expect(() => ios('99')).to.throw( - /No iOS device was given, so the default \(iphone-14\) was checked: no iOS device offers iOS 99$/, + /No iOS device was given, so the default \(iphone-16\) was checked: no iOS device offers iOS 99$/, ); // The default device (pixel-10) has Play images, as it does in the API. const playDefault = {