Repository: express-rate-limit/express-rate-limit

Issue:
Validation check for unexpected config option, e.g. windowMS instead of windowMs
### Description

A spam comment alerted me to [this SO post](https://stackoverflow.com/questions/71945791/why-is-express-rate-limit-not-working-as-expected) where someone typed `windowMS` instead of `windowMs` in their config and express-rate-limit silently ignored the mistake and used the default window instead of the one they intended. 

I think we should probably warn on unexpected config options and, maybe even calculate the levenshtein distance from the allowed options to suggest an alternative.

### Why

I want it to be easier to use the library correctly than incorrectly. Even when the user isn't using typescript.

### Alternatives

do nothing

Discussion:
@gamemaker1: Sounds like a good idea, will try working on it when I get time.

> calculate the levenshtein distance from the allowed options to suggest an alternative.

If we do this, I would prefer we write the code for it ourselves instead of pulling in a dependency.@nfriedly: > If we do this, I would prefer we write the code for it ourselves instead of pulling in a dependency.

Curious about your reasoning there - I kind of feel the same way, but at the same time, it does seem like something where a dependency would make sense, similar to the IPv6 subnet calculation.

I have a mostly complete implementation that does everything except for the levenshtein distance & alternative suggestion. I might just call it good enough for now. The levenshtein calculation seems like too much overhead for such a small part of the library.@gamemaker1: > Curious about your reasoning there - I kind of feel the same way, but at the same time, it does seem like something where a dependency would make sense, similar to the IPv6 subnet calculation.

For one, I don't think people would expect to install a levenshtein distance calculation package along with a rate limiter. It also introduces a potential for a supply chain attack like the recent one where a lot of small but widely used packages were compromised.

> I have a mostly complete implementation that does everything except for the levenshtein distance & alternative suggestion. I might just call it good enough for now. The levenshtein calculation seems like too much overhead for such a small part of the library.

Oh that's great! Yes, we can leave the alternative suggestions for later. I think the warning should be enough to alert people to typos.

Solution patch:
diff --git a/biome.json b/biome.json
index 2f1fb9a..203efaa 100644
--- a/biome.json
+++ b/biome.json
@@ -1,5 +1,5 @@
 {
-	"$schema": "https://biomejs.dev/schemas/2.2.0/schema.json",
+	"$schema": "https://biomejs.dev/schemas/2.2.5/schema.json",
 	"vcs": {
 		"enabled": false,
 		"clientKind": "git",
diff --git a/docs/reference/changelog.mdx b/docs/reference/changelog.mdx
index 291d60d..1fe84bb 100644
--- a/docs/reference/changelog.mdx
+++ b/docs/reference/changelog.mdx
@@ -9,6 +9,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to
 [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
+## [8.2.0](https://github.com/express-rate-limit/express-rate-limit/releases/tag/v8.2.0)
+
+### Added
+
+- New `knownOptions` validation check, intended to catch typos in configuration,
+  such as `windowMS` instead of `windowMs`.
+
 ## [8.1.0](https://github.com/express-rate-limit/express-rate-limit/releases/tag/v8.1.0)
 
 ### Fixed
diff --git a/docs/reference/configuration.mdx b/docs/reference/configuration.mdx
index 9690261..18f427b 100644
--- a/docs/reference/configuration.mdx
+++ b/docs/reference/configuration.mdx
@@ -518,6 +518,7 @@ Supported validations are:
 - [headersDraftVersion](/reference/error-codes#err-erl-headers-unsupported-draft-version)
 - [headersResetTime](/reference/error-codes#err-erl-headers-no-reset)
 - [creationStack](/reference/error-codes#err-erl-created-in-request-handler)
+- [knownOptions](/reference/error-codes)
 - [validationsConfig](/reference/error-codes#err-erl-unknown-validation)
 - [ipv6Subnet](/reference/error-codes#err-erl-ipv6-subnet)
 - [ipv6SubnetOrKeyGenerator](/reference/error-codes#err-erl-ipv6subnet-or-keygenerator)
diff --git a/docs/reference/error-codes.mdx b/docs/reference/error-codes.mdx
index e8d9e77..d55931d 100644
--- a/docs/reference/error-codes.mdx
+++ b/docs/reference/error-codes.mdx
@@ -253,6 +253,21 @@ To resolve this, either change to a different headers version, such as
 
 Set `validate: {headersResetTime: false}` in the options to disable the check.
 
+### `ERR_ERL_UNKNOWN_OPTION`
+
+> Added in `8.2.0`
+
+Indicates that one or more of the configuration options passed to
+express-rate-limit is unrecognized.
+
+This could be due to a typo or deprecated option, or if extra values were
+intentionally added to the configuration object.
+
+See [Configuration](/reference/configuration) for the complete list of valid
+configuration options.
+
+Set `validate: {knownOptions: false}` in the options to disable the check.
+
 ### `ERR_ERL_UNKNOWN_VALIDATION`
 
 > Added in `7.0.0`.
diff --git a/package.json b/package.json
index 9b58974..55c5e64 100644
--- a/package.json
+++ b/package.json
@@ -77,11 +77,11 @@
 		"express": ">= 4.11"
 	},
 	"devDependencies": {
-		"@biomejs/biome": "2.2.7",
+		"@biomejs/biome": "2.3.1",
 		"@express-rate-limit/prettier": "1.1.1",
 		"@express-rate-limit/tsconfig": "1.0.2",
 		"@jest/globals": "30.2.0",
-		"@types/express": "5.0.3",
+		"@types/express": "5.0.4",
 		"@types/jest": "30.0.0",
 		"@types/node": "24.9.1",
 		"@types/supertest": "6.0.3",
@@ -92,7 +92,7 @@
 		"husky": "9.1.7",
 		"jest": "30.2.0",
 		"lint-staged": "16.2.6",
-		"mintlify": "4.2.177",
+		"mintlify": "4.2.179",
 		"npm-run-all": "4.1.5",
 		"prettier": "3.6.2",
 		"ratelimit-header-parser": "0.1.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c6a6aa1..e7e1ea5 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -13,8 +13,8 @@ importers:
         version: 10.0.1
     devDependencies:
       '@biomejs/biome':
-        specifier: 2.2.7
-        version: 2.2.7
+        specifier: 2.3.1
+        version: 2.3.1
       '@express-rate-limit/prettier':
         specifier: 1.1.1
         version: 1.1.1
@@ -25,8 +25,8 @@ importers:
         specifier: 30.2.0
         version: 30.2.0
       '@types/express':
-        specifier: 5.0.3
-        version: 5.0.3
+        specifier: 5.0.4
+        version: 5.0.4
       '@types/jest':
         specifier: 30.0.0
         version: 30.0.0
@@ -58,8 +58,8 @@ importers:
         specifier: 16.2.6
         version: 16.2.6
       mintlify:
-        specifier: 4.2.177
-        version: 4.2.177(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/node@24.9.1)(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(typescript@5.9.3)(yaml@2.8.1)
+        specifier: 4.2.179
+        version: 4.2.179(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/node@24.9.1)(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(typescript@5.9.3)(yaml@2.8.1)
       npm-run-all:
         specifier: 4.1.5
         version: 4.1.5
@@ -272,55 +272,55 @@ packages:
   '@bcoe/v8-coverage@0.2.3':
     resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
 
-  '@biomejs/biome@2.2.7':
-    resolution: {integrity: sha512-1a8j0UP1vXVUf3UzMZEJ/zS2VgAG6wU6Cuh/I764sUGI+MCnJs/9WaojHYBDCxCMLTgU60/WqnYof85emXmSBA==}
+  '@biomejs/biome@2.3.1':
+    resolution: {integrity: sha512-A29evf1R72V5bo4o2EPxYMm5mtyGvzp2g+biZvRFx29nWebGyyeOSsDWGx3tuNNMFRepGwxmA9ZQ15mzfabK2w==}
     engines: {node: '>=14.21.3'}
     hasBin: true
 
-  '@biomejs/cli-darwin-arm64@2.2.7':
-    resolution: {integrity: sha512-xBUUsebnO2/Qj1v7eZmKUy2ZcFkZ4/jLUkxN02Qup1RPoRaiW9AKXHrqS3L7iX6PzofHY2xuZ+Pb9kAcpoe0qA==}
+  '@biomejs/cli-darwin-arm64@2.3.1':
+    resolution: {integrity: sha512-ombSf3MnTUueiYGN1SeI9tBCsDUhpWzOwS63Dove42osNh0PfE1cUtHFx6eZ1+MYCCLwXzlFlYFdrJ+U7h6LcA==}
     engines: {node: '>=14.21.3'}
     cpu: [arm64]
     os: [darwin]
 
-  '@biomejs/cli-darwin-x64@2.2.7':
-    resolution: {integrity: sha512-vsY4NhmxqgfLJufr9XUnC+yGUPJiXAc1mz6FcjaAmuIuLwfghN4uQO7hnW2AneGyoi2mNe9Jbvf6Qtq4AjzrFg==}
+  '@biomejs/cli-darwin-x64@2.3.1':
+    resolution: {integrity: sha512-pcOfwyoQkrkbGvXxRvZNe5qgD797IowpJPovPX5biPk2FwMEV+INZqfCaz4G5bVq9hYnjwhRMamg11U4QsRXrQ==}
     engines: {node: '>=14.21.3'}
     cpu: [x64]
     os: [darwin]
 
-  '@biomejs/cli-linux-arm64-musl@2.2.7':
-    resolution: {integrity: sha512-FrTwvKO/7t5HbVTvhlMOTOVQLAcR7r4O4iFQhEpZXUtBfosHqrX/JJlX7daPawoe14MDcCu9CDg0zLVpTuDvuQ==}
+  '@biomejs/cli-linux-arm64-musl@2.3.1':
+    resolution: {integrity: sha512-+DZYv8l7FlUtTrWs1Tdt1KcNCAmRO87PyOnxKGunbWm5HKg1oZBSbIIPkjrCtDZaeqSG1DiGx7qF+CPsquQRcg==}
     engines: {node: '>=14.21.3'}
     cpu: [arm64]
     os: [linux]
 
-  '@biomejs/cli-linux-arm64@2.2.7':
-    resolution: {integrity: sha512-nUdco104rjV9dULi1VssQ5R/kX2jE/Z2sDjyqS+siV9sTQda0DwmEUixFNRCWvZJRRiZUWhgiDFJ4n7RowO8Mg==}
+  '@biomejs/cli-linux-arm64@2.3.1':
+    resolution: {integrity: sha512-td5O8pFIgLs8H1sAZsD6v+5quODihyEw4nv2R8z7swUfIK1FKk+15e4eiYVLcAE4jUqngvh4j3JCNgg0Y4o4IQ==}
     engines: {node: '>=14.21.3'}
     cpu: [arm64]
     os: [linux]
 
-  '@biomejs/cli-linux-x64-musl@2.2.7':
-    resolution: {integrity: sha512-MnsysF5s/iLC5wnYvuMseOy+m8Pd4bWG1uwlVyy2AUbfjAVUgtbYbboc5wMXljFrDY7e6rLjLTR4S2xqDpGlQg==}
+  '@biomejs/cli-linux-x64-musl@2.3.1':
+    resolution: {integrity: sha512-Y3Ob4nqgv38Mh+6EGHltuN+Cq8aj/gyMTJYzkFZV2AEj+9XzoXB9VNljz9pjfFNHUxvLEV4b55VWyxozQTBaUQ==}
     engines: {node: '>=14.21.3'}
     cpu: [x64]
     os: [linux]
 
-  '@biomejs/cli-linux-x64@2.2.7':
-    resolution: {integrity: sha512-tPTcGAIEOOZrj2tQ7fdraWlaxNKApBw6l4In8wQQV1IyxnAexqi0hykHzKEX8hKKctf5gxGBfNCzyIvqpj4CFQ==}
+  '@biomejs/cli-linux-x64@2.3.1':
+    resolution: {integrity: sha512-PYWgEO7up7XYwSAArOpzsVCiqxBCXy53gsReAb1kKYIyXaoAlhBaBMvxR/k2Rm9aTuZ662locXUmPk/Aj+Xu+Q==}
     engines: {node: '>=14.21.3'}
     cpu: [x64]
     os: [linux]
 
-  '@biomejs/cli-win32-arm64@2.2.7':
-    resolution: {integrity: sha512-h5D1jhwA2b7cFXerYiJfXHSzzAMFFoEDL5Mc2BgiaEw0iaSgSso/3Nc6FbOR55aTQISql+IpB4PS7JoV26Gdbw==}
+  '@biomejs/cli-win32-arm64@2.3.1':
+    resolution: {integrity: sha512-RHIG/zgo+69idUqVvV3n8+j58dKYABRpMyDmfWu2TITC+jwGPiEaT0Q3RKD+kQHiS80mpBrST0iUGeEXT0bU9A==}
     engines: {node: '>=14.21.3'}
     cpu: [arm64]
     os: [win32]
 
-  '@biomejs/cli-win32-x64@2.2.7':
-    resolution: {integrity: sha512-URqAJi0kONyBKG4V9NVafHLDtm6IHmF4qPYi/b6x7MD6jxpWeJiTCO6R5+xDlWckX2T/OGv6Yq3nkz6s0M8Ykw==}
+  '@biomejs/cli-win32-x64@2.3.1':
+    resolution: {integrity: sha512-izl30JJ5Dp10mi90Eko47zhxE6pYyWPcnX1NQxKpL/yMhXxf95oLTzfpu4q+MDBh/gemNqyJEwjBpe0MT5iWPA==}
     engines: {node: '>=14.21.3'}
     cpu: [x64]
     os: [win32]
@@ -919,16 +919,16 @@ packages:
       '@types/react': '>=16'
       react: '>=16'
 
-  '@mintlify/cli@4.0.781':
-    resolution: {integrity: sha512-Td0XlzbCKIVBQh6wnDAvbRAsPle7CH8VZXwUxnomMaGw2KeyDvh9vmR3zFec4l8GjSnJF7UoADY9+fREBWny+A==}
+  '@mintlify/cli@4.0.783':
+    resolution: {integrity: sha512-juXs7+lOck46NazhAZPxntQVh9/L2yxFLmDeb9L3r0xb/CV1GasyVBga1LAjVfFbGqyRWs7/6khi5VWbKbxYpQ==}
     engines: {node: '>=18.0.0'}
     hasBin: true
 
-  '@mintlify/common@1.0.583':
-    resolution: {integrity: sha512-X8+AgnjtokrMabYWpzAHk9WvJ0iEjwXq+wYj1mZiBVO+SF7+PbVGrMzRcfYkogE4c4kb41r+vXYV7Y46ADGGMg==}
+  '@mintlify/common@1.0.585':
+    resolution: {integrity: sha512-oot6i1442U/w1OuXkb/xOihKZr6YRmgmZT9UsP43EJccL0eXab2Kp5lYcoAvyI5Xu/BNRKYBcnxQIHQsndPZ4Q==}
 
-  '@mintlify/link-rot@3.0.724':
-    resolution: {integrity: sha512-aaAjbo81T2q+K3TrWGpVBoY+q/4rWUgyXgfWzbfqIiHcNDt+ZZjrgW+W4hGDVxype4oBkX/4GX/XjIec+29ziw==}
+  '@mintlify/link-rot@3.0.726':
+    resolution: {integrity: sha512-rkR68oM8CmI9IiTdVtgfa6gymtY5SMzkfbrz8J+8dsja4eLrPwR7OawIEYYR+Au6y3zrMwCVfLK5tC5mJ/1ZAQ==}
     engines: {node: '>=18.0.0'}
 
   '@mintlify/mdx@3.0.0':
@@ -946,20 +946,20 @@ packages:
     resolution: {integrity: sha512-9MBRq9lS4l4HITYCrqCL7T61MOb20q9IdU7HWhqYMNMM1jGO1nHjXasFy61yZ8V6gMZyyKQARGVoZ0ZrYN48Og==}
     engines: {node: '>=18'}
 
-  '@mintlify/prebuild@1.0.711':
-    resolution: {integrity: sha512-AB1BfdkPGs/7emqBdCfYpPTisjdh7jEYfY8kVNmpgQeNlyLMYyHy/e9PGrBleN5lQP/R85la7ccZW/FzXN2Fiw==}
+  '@mintlify/prebuild@1.0.713':
+    resolution: {integrity: sha512-/2ovcu1KnY1hCGdSApVw3J2YwVy54wKjf2yxySDLrohqMH/f+jOJTfjaB9WjRQdpGhFEqTdg7Z9YULhmpZ1m5Q==}
 
-  '@mintlify/previewing@4.0.760':
-    resolution: {integrity: sha512-NPiYLzd4qSM8NQxT2638uVN0vNHP5sfl/F5paeGhUed/wFjkBNSXDrmedXcxtnc3styFd+1yj+HuAV5AjG9pfQ==}
+  '@mintlify/previewing@4.0.762':
+    resolution: {integrity: sha512-mtOptd3hqi+7JQJA8AythdoX159d7bOIIGx+7grWQLCfWf1brUpLAaVe4KTI3nwNi9VCv6FOyEx5dlUkjecCxg==}
     engines: {node: '>=18.0.0'}
 
-  '@mintlify/scraping@4.0.443':
-    resolution: {integrity: sha512-FeyMaekec4qBzkeQLoaMw0S733WN6M4MESdoUBqFm0cbh7NtLQvqxMolgz/Fs6HimyzxWeqtW4G6GgxqWy09gA==}
+  '@mintlify/scraping@4.0.445':
+    resolution: {integrity: sha512-qtneTn6sHbRPXzb7nnKi9NiwO+obvjHUz9LQMVWLI2kj4KDZylwSV+KFiF37Qz6ouUT+OYFe4qN8/oTmcOVYYQ==}
     engines: {node: '>=18.0.0'}
     hasBin: true
 
-  '@mintlify/validation@0.1.507':
-    resolution: {integrity: sha512-0kpXfyIjMdd2Z+J9xAM7Dbn44JAOxFEt1ZesmIjerMPQgCCwrKlPyho0pXRS/wqremD2rSzx94yCLxo6dvaZSw==}
+  '@mintlify/validation@0.1.509':
+    resolution: {integrity: sha512-7OUP8kXMzGyhEE2hxvzkZmS4gQ/B0iGj9BtLU3fn12mzbJ2uroVG7YHM2oXf6Gk8IP1upEXri8DV2j1LCpM15A==}
 
   '@napi-rs/wasm-runtime@0.2.12':
     resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
@@ -1217,31 +1217,31 @@ packages:
   '@radix-ui/rect@1.1.1':
     resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
 
-  '@shikijs/core@3.13.0':
-    resolution: {integrity: sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==}
+  '@shikijs/core@3.14.0':
+    resolution: {integrity: sha512-qRSeuP5vlYHCNUIrpEBQFO7vSkR7jn7Kv+5X3FO/zBKVDGQbcnlScD3XhkrHi/R8Ltz0kEjvFR9Szp/XMRbFMw==}
 
-  '@shikijs/engine-javascript@3.13.0':
-    resolution: {integrity: sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==}
+  '@shikijs/engine-javascript@3.14.0':
+    resolution: {integrity: sha512-3v1kAXI2TsWQuwv86cREH/+FK9Pjw3dorVEykzQDhwrZj0lwsHYlfyARaKmn6vr5Gasf8aeVpb8JkzeWspxOLQ==}
 
-  '@shikijs/engine-oniguruma@3.13.0':
-    resolution: {integrity: sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==}
+  '@shikijs/engine-oniguruma@3.14.0':
+    resolution: {integrity: sha512-TNcYTYMbJyy+ZjzWtt0bG5y4YyMIWC2nyePz+CFMWqm+HnZZyy9SWMgo8Z6KBJVIZnx8XUXS8U2afO6Y0g1Oug==}
 
-  '@shikijs/langs@3.13.0':
-    resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==}
+  '@shikijs/langs@3.14.0':
+    resolution: {integrity: sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg==}
 
-  '@shikijs/themes@3.13.0':
-    resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==}
+  '@shikijs/themes@3.14.0':
+    resolution: {integrity: sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA==}
 
-  '@shikijs/transformers@3.13.0':
-    resolution: {integrity: sha512-833lcuVzcRiG+fXvgslWsM2f4gHpjEgui1ipIknSizRuTgMkNZupiXE5/TVJ6eSYfhNBFhBZKkReKWO2GgYmqA==}
+  '@shikijs/transformers@3.14.0':
+    resolution: {integrity: sha512-i67zQnY9wLMMnKasonVW1L9fKneSLZDj1ePsA4o0AZWU4uUobmJY9baRDa36z+a9/g0aG76/2tybQvm4hrwxIQ==}
 
-  '@shikijs/twoslash@3.13.0':
-    resolution: {integrity: sha512-OmNKNoZ8Hevt4VKQHfJL+hrsrqLSnW/Nz7RMutuBqXBCIYZWk80HnF9pcXEwRmy9MN0MGRmZCW2rDDP8K7Bxkw==}
+  '@shikijs/twoslash@3.14.0':
+    resolution: {integrity: sha512-Eh8Kg9ZZF+kY5zLFrnkA8iFNWZ8L25g2B5sviHwyx6G38pVDSIBpNmchHnx5qS8lUCNtt/Os3S5VmC0JBEDz+A==}
     peerDependencies:
       typescript: '>=5.5.0'
 
-  '@shikijs/types@3.13.0':
-    resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==}
+  '@shikijs/types@3.14.0':
+    resolution: {integrity: sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ==}
 
   '@shikijs/vscode-textmate@10.0.2':
     resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
@@ -1404,11 +1404,11 @@ packages:
   '@types/estree@1.0.8':
     resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
 
-  '@types/express-serve-static-core@5.0.6':
-    resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==}
+  '@types/express-serve-static-core@5.1.0':
+    resolution: {integrity: sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==}
 
-  '@types/express@5.0.3':
-    resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==}
+  '@types/express@5.0.4':
+    resolution: {integrity: sha512-g64dbryHk7loCIrsa0R3shBnEu5p6LPJ09bu9NG58+jz+cRUjFrc3Bz0kNQ7j9bXeCsrRDvNET1G54P/GJkAyA==}
 
   '@types/hast@3.0.4':
     resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
@@ -1467,11 +1467,14 @@ packages:
   '@types/react@19.1.8':
     resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==}
 
-  '@types/send@0.17.5':
-    resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==}
+  '@types/send@0.17.6':
+    resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==}
 
-  '@types/serve-static@1.15.8':
-    resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==}
+  '@types/send@1.2.1':
+    resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==}
+
+  '@types/serve-static@1.15.10':
+    resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==}
 
   '@types/stack-utils@2.0.3':
     resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
@@ -1488,8 +1491,8 @@ packages:
   '@types/unist@3.0.3':
     resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
 
-  '@types/urijs@1.19.25':
-    resolution: {integrity: sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==}
+  '@types/urijs@1.19.26':
+    resolution: {integrity: sha512-wkXrVzX5yoqLnndOwFsieJA7oKM8cNkOKJtf/3vVGSUFkWDKZvFHpIl9Pvqb/T9UsawBBFMTTD8xu7sK5MWuvg==}
 
   '@types/yargs-parser@21.0.3':
     resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
@@ -1500,8 +1503,8 @@ packages:
   '@types/yauzl@2.10.3':
     resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
 
-  '@typescript/vfs@1.6.1':
-    resolution: {integrity: sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==}
+  '@typescript/vfs@1.6.2':
+    resolution: {integrity: sha512-hoBwJwcbKHmvd2QVebiytN1aELvpk9B74B4L1mFm/XT1Q/VOYAWl2vQ9AWRFtQq8zmz6enTpfTV8WRc4ATjW/g==}
     peerDependencies:
       typescript: '*'
 
@@ -1633,6 +1636,10 @@ packages:
     resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==}
     engines: {node: '>= 10.0.0'}
 
+  adm-zip@0.5.16:
+    resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==}
+    engines: {node: '>=12.0'}
+
   agent-base@7.1.4:
     resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
     engines: {node: '>= 14'}
@@ -1775,8 +1782,8 @@ packages:
     resolution: {integrity: sha512-yOA4wFeI7ET3v32Di/sUybQ+ttP20JHSW3mxLuNGeO0uD6PPcvLrIQXSvy/rhJOWU5JrYh7U4OHplWMmtAtjMg==}
     engines: {node: '>=0.11'}
 
-  axios@1.12.2:
-    resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==}
+  axios@1.13.0:
+    resolution: {integrity: sha512-zt40Pz4zcRXra9CVV31KeyofwiNvAbJ5B6YPz9pMJ+yOSLikvPT4Yi5LjfgjRa9CawVYBaD1JQzIVcIvBejKeA==}
 
   b4a@1.7.3:
     resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==}
@@ -2451,8 +2458,8 @@ packages:
     resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
     engines: {node: '>= 0.4'}
 
-  es-toolkit@1.40.0:
-    resolution: {integrity: sha512-8o6w0KFmU0CiIl0/Q/BCEOabF2IJaELM1T2PWj6e8KqzHv1gdx+7JtFnDwOx1kJH/isJ5NwlDG1nCr1HrRF94Q==}
+  es-toolkit@1.41.0:
+    resolution: {integrity: sha512-bDd3oRmbVgqZCJS6WmeQieOrzpl3URcWBUVDXxOELlUW2FuW+0glPOz1n0KnRie+PdyvUZcXz2sOn00c6pPRIA==}
 
   esast-util-from-estree@2.0.0:
     resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
@@ -2978,8 +2985,8 @@ packages:
       ink: '>=4.0.0'
       react: '>=18.0.0'
 
-  ink@6.3.1:
-    resolution: {integrity: sha512-3wGwITGrzL6rkWsi2gEKzgwdafGn4ZYd3u4oRp+sOPvfoxEHlnoB5Vnk9Uy5dMRUhDOqF3hqr4rLQ4lEzBc2sQ==}
+  ink@6.4.0:
+    resolution: {integrity: sha512-v43isNGrHeFfipbQbwz7/Eg0+aWz3ASEdT/s1Ty2JtyBzR3maE0P77FwkMET+Nzh5KbRL3efLgkT/ZzPFzW3BA==}
     engines: {node: '>=20'}
     peerDependencies:
       '@types/react': '>=19.0.0'
@@ -3811,8 +3818,8 @@ packages:
     resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
     engines: {node: '>= 8'}
 
-  mintlify@4.2.177:
-    resolution: {integrity: sha512-muM499ag3sbveM75tWpfB0z7NG97nslm/+7ZrKan5r76KqdhspGbHdUlnTcvltHizreR78Hjrfnzd7UjuRg+Dw==}
+  mintlify@4.2.179:
+    resolution: {integrity: sha512-2yYO90yduk4Dtom9ioNNpEDFkPPCoZU07WUf+HJuGIx/GcgwLttUcRp5pWY0tQJ4pKvKI7HcvKjvErQoMiSW2g==}
     engines: {node: '>=18.0.0'}
     hasBin: true
 
@@ -4598,8 +4605,8 @@ packages:
     resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
     engines: {node: '>= 0.4'}
 
-  shiki@3.13.0:
-    resolution: {integrity: sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==}
+  shiki@3.14.0:
+    resolution: {integrity: sha512-J0yvpLI7LSig3Z3acIuDLouV5UCKQqu8qOArwMx+/yPVC3WRMgrP67beaG8F+j4xfEWE0eVC4GeBCIXeOPra1g==}
 
   side-channel-list@1.0.0:
     resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
@@ -5329,7 +5336,7 @@ snapshots:
       '@stoplight/spectral-ref-resolver': 1.0.5
       '@stoplight/types': 13.20.0
       '@types/json-schema': 7.0.15
-      '@types/urijs': 1.19.25
+      '@types/urijs': 1.19.26
       ajv: 8.17.1
       ajv-errors: 3.0.0(ajv@8.17.1)
       ajv-formats: 2.1.1(ajv@8.17.1)
@@ -5533,39 +5540,39 @@ snapshots:
 
   '@bcoe/v8-coverage@0.2.3': {}
 
-  '@biomejs/biome@2.2.7':
+  '@biomejs/biome@2.3.1':
     optionalDependencies:
-      '@biomejs/cli-darwin-arm64': 2.2.7
-      '@biomejs/cli-darwin-x64': 2.2.7
-      '@biomejs/cli-linux-arm64': 2.2.7
-      '@biomejs/cli-linux-arm64-musl': 2.2.7
-      '@biomejs/cli-linux-x64': 2.2.7
-      '@biomejs/cli-linux-x64-musl': 2.2.7
-      '@biomejs/cli-win32-arm64': 2.2.7
-      '@biomejs/cli-win32-x64': 2.2.7
-
-  '@biomejs/cli-darwin-arm64@2.2.7':
+      '@biomejs/cli-darwin-arm64': 2.3.1
+      '@biomejs/cli-darwin-x64': 2.3.1
+      '@biomejs/cli-linux-arm64': 2.3.1
+      '@biomejs/cli-linux-arm64-musl': 2.3.1
+      '@biomejs/cli-linux-x64': 2.3.1
+      '@biomejs/cli-linux-x64-musl': 2.3.1
+      '@biomejs/cli-win32-arm64': 2.3.1
+      '@biomejs/cli-win32-x64': 2.3.1
+
+  '@biomejs/cli-darwin-arm64@2.3.1':
     optional: true
 
-  '@biomejs/cli-darwin-x64@2.2.7':
+  '@biomejs/cli-darwin-x64@2.3.1':
     optional: true
 
-  '@biomejs/cli-linux-arm64-musl@2.2.7':
+  '@biomejs/cli-linux-arm64-musl@2.3.1':
     optional: true
 
-  '@biomejs/cli-linux-arm64@2.2.7':
+  '@biomejs/cli-linux-arm64@2.3.1':
     optional: true
 
-  '@biomejs/cli-linux-x64-musl@2.2.7':
+  '@biomejs/cli-linux-x64-musl@2.3.1':
     optional: true
 
-  '@biomejs/cli-linux-x64@2.2.7':
+  '@biomejs/cli-linux-x64@2.3.1':
     optional: true
 
-  '@biomejs/cli-win32-arm64@2.2.7':
+  '@biomejs/cli-win32-arm64@2.3.1':
     optional: true
 
-  '@biomejs/cli-win32-x64@2.2.7':
+  '@biomejs/cli-win32-x64@2.3.1':
     optional: true
 
   '@canvas/image-data@1.1.0': {}
@@ -6183,20 +6190,22 @@ snapshots:
       '@types/react': 19.1.8
       react: 19.2.0
 
-  '@mintlify/cli@4.0.781(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/node@24.9.1)(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(typescript@5.9.3)(yaml@2.8.1)':
+  '@mintlify/cli@4.0.783(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/node@24.9.1)(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(typescript@5.9.3)(yaml@2.8.1)':
     dependencies:
-      '@mintlify/common': 1.0.583(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
-      '@mintlify/link-rot': 3.0.724(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
+      '@inquirer/prompts': 7.9.0(@types/node@24.9.1)
+      '@mintlify/common': 1.0.585(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
+      '@mintlify/link-rot': 3.0.726(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
       '@mintlify/models': 0.0.236
-      '@mintlify/prebuild': 1.0.711(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
-      '@mintlify/previewing': 4.0.760(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(typescript@5.9.3)(yaml@2.8.1)
-      '@mintlify/validation': 0.1.507(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+      '@mintlify/prebuild': 1.0.713(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
+      '@mintlify/previewing': 4.0.762(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(typescript@5.9.3)(yaml@2.8.1)
+      '@mintlify/validation': 0.1.509(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+      adm-zip: 0.5.16
       chalk: 5.6.2
       color: 4.2.3
       detect-port: 1.6.1
       fs-extra: 11.3.2
       gray-matter: 4.0.3
-      ink: 6.3.1(@types/react@19.1.8)(react@19.2.0)
+      ink: 6.4.0(@types/react@19.1.8)(react@19.2.0)
       inquirer: 12.10.0(@types/node@24.9.1)
       js-yaml: 4.1.0
       mdast: 3.0.0
@@ -6223,13 +6232,13 @@ snapshots:
       - utf-8-validate
       - yaml
 
-  '@mintlify/common@1.0.583(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)':
+  '@mintlify/common@1.0.585(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)':
     dependencies:
       '@asyncapi/parser': 3.4.0
       '@mintlify/mdx': 3.0.0(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
       '@mintlify/models': 0.0.236
       '@mintlify/openapi-parser': 0.0.8
-      '@mintlify/validation': 0.1.507(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+      '@mintlify/validation': 0.1.509(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
       '@sindresorhus/slugify': 2.2.1
       acorn: 8.15.0
       acorn-jsx: 5.3.2(acorn@8.15.0)
@@ -6280,12 +6289,12 @@ snapshots:
       - typescript
       - yaml
 
-  '@mintlify/link-rot@3.0.724(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)':
+  '@mintlify/link-rot@3.0.726(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)':
     dependencies:
-      '@mintlify/common': 1.0.583(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
-      '@mintlify/prebuild': 1.0.711(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
-      '@mintlify/previewing': 4.0.760(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(typescript@5.9.3)(yaml@2.8.1)
-      '@mintlify/validation': 0.1.507(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+      '@mintlify/common': 1.0.585(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
+      '@mintlify/prebuild': 1.0.713(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
+      '@mintlify/previewing': 4.0.762(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(typescript@5.9.3)(yaml@2.8.1)
+      '@mintlify/validation': 0.1.509(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
       fs-extra: 11.3.2
       unist-util-visit: 4.1.2
     transitivePeerDependencies:
@@ -6309,8 +6318,8 @@ snapshots:
   '@mintlify/mdx@3.0.0(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
     dependencies:
       '@radix-ui/react-popover': 1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)
-      '@shikijs/transformers': 3.13.0
-      '@shikijs/twoslash': 3.13.0(typescript@5.9.3)
+      '@shikijs/transformers': 3.14.0
+      '@shikijs/twoslash': 3.14.0(typescript@5.9.3)
       hast-util-to-string: 3.0.1
       mdast-util-from-markdown: 2.0.2
       mdast-util-gfm: 3.1.0
@@ -6323,7 +6332,7 @@ snapshots:
       remark-gfm: 4.0.1
       remark-math: 6.0.0
       remark-smartypants: 3.0.2
-      shiki: 3.13.0
+      shiki: 3.14.0
       unified: 11.0.5
       unist-util-visit: 5.0.0
     transitivePeerDependencies:
@@ -6333,7 +6342,7 @@ snapshots:
 
   '@mintlify/models@0.0.236':
     dependencies:
-      axios: 1.12.2
+      axios: 1.13.0
       openapi-types: 12.1.3
     transitivePeerDependencies:
       - debug
@@ -6347,12 +6356,12 @@ snapshots:
       leven: 4.1.0
       yaml: 2.8.1
 
-  '@mintlify/prebuild@1.0.711(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)':
+  '@mintlify/prebuild@1.0.713(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)':
     dependencies:
-      '@mintlify/common': 1.0.583(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
+      '@mintlify/common': 1.0.585(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
       '@mintlify/openapi-parser': 0.0.8
-      '@mintlify/scraping': 4.0.443(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
-      '@mintlify/validation': 0.1.507(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+      '@mintlify/scraping': 4.0.445(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
+      '@mintlify/validation': 0.1.509(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
       chalk: 5.6.2
       favicons: 7.2.0
       fs-extra: 11.3.2
@@ -6381,11 +6390,11 @@ snapshots:
       - utf-8-validate
       - yaml
 
-  '@mintlify/previewing@4.0.760(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(typescript@5.9.3)(yaml@2.8.1)':
+  '@mintlify/previewing@4.0.762(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(typescript@5.9.3)(yaml@2.8.1)':
     dependencies:
-      '@mintlify/common': 1.0.583(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
-      '@mintlify/prebuild': 1.0.711(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
-      '@mintlify/validation': 0.1.507(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+      '@mintlify/common': 1.0.585(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
+      '@mintlify/prebuild': 1.0.713(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
+      '@mintlify/validation': 0.1.509(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
       better-opn: 3.0.2
       chalk: 5.6.2
       chokidar: 3.6.0
@@ -6393,8 +6402,8 @@ snapshots:
       fs-extra: 11.3.2
       got: 13.0.0
       gray-matter: 4.0.3
-      ink: 6.3.1(@types/react@19.1.8)(react@19.2.0)
-      ink-spinner: 5.0.0(ink@6.3.1(@types/react@19.1.8)(react@19.2.0))(react@19.2.0)
+      ink: 6.4.0(@types/react@19.1.8)(react@19.2.0)
+      ink-spinner: 5.0.0(ink@6.4.0(@types/react@19.1.8)(react@19.2.0))(react@19.2.0)
       is-online: 10.0.0
       js-yaml: 4.1.0
       mdast: 3.0.0
@@ -6421,9 +6430,9 @@ snapshots:
       - utf-8-validate
       - yaml
 
-  '@mintlify/scraping@4.0.443(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)':
+  '@mintlify/scraping@4.0.445(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)':
     dependencies:
-      '@mintlify/common': 1.0.583(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
+      '@mintlify/common': 1.0.585(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)(yaml@2.8.1)
       '@mintlify/openapi-parser': 0.0.8
       fs-extra: 11.3.2
       hast-util-to-mdast: 10.1.2
@@ -6457,7 +6466,7 @@ snapshots:
       - utf-8-validate
       - yaml
 
-  '@mintlify/validation@0.1.507(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
+  '@mintlify/validation@0.1.509(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
     dependencies:
       '@mintlify/mdx': 3.0.0(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
       '@mintlify/models': 0.0.236
@@ -6708,47 +6717,47 @@ snapshots:
 
   '@radix-ui/rect@1.1.1': {}
 
-  '@shikijs/core@3.13.0':
+  '@shikijs/core@3.14.0':
     dependencies:
-      '@shikijs/types': 3.13.0
+      '@shikijs/types': 3.14.0
       '@shikijs/vscode-textmate': 10.0.2
       '@types/hast': 3.0.4
       hast-util-to-html: 9.0.5
 
-  '@shikijs/engine-javascript@3.13.0':
+  '@shikijs/engine-javascript@3.14.0':
     dependencies:
-      '@shikijs/types': 3.13.0
+      '@shikijs/types': 3.14.0
       '@shikijs/vscode-textmate': 10.0.2
       oniguruma-to-es: 4.3.3
 
-  '@shikijs/engine-oniguruma@3.13.0':
+  '@shikijs/engine-oniguruma@3.14.0':
     dependencies:
-      '@shikijs/types': 3.13.0
+      '@shikijs/types': 3.14.0
       '@shikijs/vscode-textmate': 10.0.2
 
-  '@shikijs/langs@3.13.0':
+  '@shikijs/langs@3.14.0':
     dependencies:
-      '@shikijs/types': 3.13.0
+      '@shikijs/types': 3.14.0
 
-  '@shikijs/themes@3.13.0':
+  '@shikijs/themes@3.14.0':
     dependencies:
-      '@shikijs/types': 3.13.0
+      '@shikijs/types': 3.14.0
 
-  '@shikijs/transformers@3.13.0':
+  '@shikijs/transformers@3.14.0':
     dependencies:
-      '@shikijs/core': 3.13.0
-      '@shikijs/types': 3.13.0
+      '@shikijs/core': 3.14.0
+      '@shikijs/types': 3.14.0
 
-  '@shikijs/twoslash@3.13.0(typescript@5.9.3)':
+  '@shikijs/twoslash@3.14.0(typescript@5.9.3)':
     dependencies:
-      '@shikijs/core': 3.13.0
-      '@shikijs/types': 3.13.0
+      '@shikijs/core': 3.14.0
+      '@shikijs/types': 3.14.0
       twoslash: 0.3.4(typescript@5.9.3)
       typescript: 5.9.3
     transitivePeerDependencies:
       - supports-color
 
-  '@shikijs/types@3.13.0':
+  '@shikijs/types@3.14.0':
     dependencies:
       '@shikijs/vscode-textmate': 10.0.2
       '@types/hast': 3.0.4
@@ -6800,7 +6809,7 @@ snapshots:
       '@stoplight/json': 3.21.0
       '@stoplight/path': 1.3.2
       '@stoplight/types': 13.20.0
-      '@types/urijs': 1.19.25
+      '@types/urijs': 1.19.26
       dependency-graph: 0.11.0
       fast-memoize: 2.5.2
       immer: 9.0.21
@@ -6994,18 +7003,18 @@ snapshots:
 
   '@types/estree@1.0.8': {}
 
-  '@types/express-serve-static-core@5.0.6':
+  '@types/express-serve-static-core@5.1.0':
     dependencies:
       '@types/node': 24.9.1
       '@types/qs': 6.14.0
       '@types/range-parser': 1.2.7
-      '@types/send': 0.17.5
+      '@types/send': 1.2.1
 
-  '@types/express@5.0.3':
+  '@types/express@5.0.4':
     dependencies:
       '@types/body-parser': 1.19.6
-      '@types/express-serve-static-core': 5.0.6
-      '@types/serve-static': 1.15.8
+      '@types/express-serve-static-core': 5.1.0
+      '@types/serve-static': 1.15.10
 
   '@types/hast@3.0.4':
     dependencies:
@@ -7062,16 +7071,20 @@ snapshots:
     dependencies:
       csstype: 3.1.3
 
-  '@types/send@0.17.5':
+  '@types/send@0.17.6':
     dependencies:
       '@types/mime': 1.3.5
       '@types/node': 24.9.1
 
-  '@types/serve-static@1.15.8':
+  '@types/send@1.2.1':
+    dependencies:
+      '@types/node': 24.9.1
+
+  '@types/serve-static@1.15.10':
     dependencies:
       '@types/http-errors': 2.0.5
       '@types/node': 24.9.1
-      '@types/send': 0.17.5
+      '@types/send': 0.17.6
 
   '@types/stack-utils@2.0.3': {}
 
@@ -7091,7 +7104,7 @@ snapshots:
 
   '@types/unist@3.0.3': {}
 
-  '@types/urijs@1.19.25': {}
+  '@types/urijs@1.19.26': {}
 
   '@types/yargs-parser@21.0.3': {}
 
@@ -7104,7 +7117,7 @@ snapshots:
       '@types/node': 24.9.1
     optional: true
 
-  '@typescript/vfs@1.6.1(typescript@5.9.3)':
+  '@typescript/vfs@1.6.2(typescript@5.9.3)':
     dependencies:
       debug: 4.4.3
       typescript: 5.9.3
@@ -7198,6 +7211,8 @@ snapshots:
 
   address@1.2.2: {}
 
+  adm-zip@0.5.16: {}
+
   agent-base@7.1.4: {}
 
   aggregate-error@4.0.1:
@@ -7318,7 +7333,7 @@ snapshots:
 
   avsc@5.7.9: {}
 
-  axios@1.12.2:
+  axios@1.13.0:
     dependencies:
       follow-redirects: 1.15.11
       form-data: 4.0.4
@@ -8038,7 +8053,7 @@ snapshots:
       is-date-object: 1.1.0
       is-symbol: 1.1.1
 
-  es-toolkit@1.40.0: {}
+  es-toolkit@1.41.0: {}
 
   esast-util-from-estree@2.0.0:
     dependencies:
@@ -8814,13 +8829,13 @@ snapshots:
 
   inherits@2.0.4: {}
 
-  ink-spinner@5.0.0(ink@6.3.1(@types/react@19.1.8)(react@19.2.0))(react@19.2.0):
+  ink-spinner@5.0.0(ink@6.4.0(@types/react@19.1.8)(react@19.2.0))(react@19.2.0):
     dependencies:
       cli-spinners: 2.9.2
-      ink: 6.3.1(@types/react@19.1.8)(react@19.2.0)
+      ink: 6.4.0(@types/react@19.1.8)(react@19.2.0)
       react: 19.2.0
 
-  ink@6.3.1(@types/react@19.1.8)(react@19.2.0):
+  ink@6.4.0(@types/react@19.1.8)(react@19.2.0):
     dependencies:
       '@alcalzone/ansi-tokenize': 0.2.2
       ansi-escapes: 7.1.1
@@ -8831,7 +8846,7 @@ snapshots:
       cli-cursor: 4.0.0
       cli-truncate: 4.0.0
       code-excerpt: 4.0.0
-      es-toolkit: 1.40.0
+      es-toolkit: 1.41.0
       indent-string: 5.0.0
       is-in-ci: 2.0.0
       patch-console: 2.0.0
@@ -10119,9 +10134,9 @@ snapshots:
       minipass: 3.3.6
       yallist: 4.0.0
 
-  mintlify@4.2.177(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/node@24.9.1)(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(typescript@5.9.3)(yaml@2.8.1):
+  mintlify@4.2.179(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/node@24.9.1)(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(typescript@5.9.3)(yaml@2.8.1):
     dependencies:
-      '@mintlify/cli': 4.0.781(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/node@24.9.1)(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(typescript@5.9.3)(yaml@2.8.1)
+      '@mintlify/cli': 4.0.783(@radix-ui/react-popover@1.1.15(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(react@19.2.0))(@types/node@24.9.1)(@types/react@19.1.8)(react-dom@18.3.1(react@19.2.0))(typescript@5.9.3)(yaml@2.8.1)
     transitivePeerDependencies:
       - '@radix-ui/react-popover'
       - '@types/node'
@@ -11080,14 +11095,14 @@ snapshots:
 
   shell-quote@1.8.3: {}
 
-  shiki@3.13.0:
+  shiki@3.14.0:
     dependencies:
-      '@shikijs/core': 3.13.0
-      '@shikijs/engine-javascript': 3.13.0
-      '@shikijs/engine-oniguruma': 3.13.0
-      '@shikijs/langs': 3.13.0
-      '@shikijs/themes': 3.13.0
-      '@shikijs/types': 3.13.0
+      '@shikijs/core': 3.14.0
+      '@shikijs/engine-javascript': 3.14.0
+      '@shikijs/engine-oniguruma': 3.14.0
+      '@shikijs/langs': 3.14.0
+      '@shikijs/themes': 3.14.0
+      '@shikijs/types': 3.14.0
       '@shikijs/vscode-textmate': 10.0.2
       '@types/hast': 3.0.4
 
@@ -11528,7 +11543,7 @@ snapshots:
 
   twoslash@0.3.4(typescript@5.9.3):
     dependencies:
-      '@typescript/vfs': 1.6.1(typescript@5.9.3)
+      '@typescript/vfs': 1.6.2(typescript@5.9.3)
       twoslash-protocol: 0.3.4
       typescript: 5.9.3
     transitivePeerDependencies:
diff --git a/source/rate-limit.ts b/source/rate-limit.ts
index ac2c73b..d77c67b 100644
--- a/source/rate-limit.ts
+++ b/source/rate-limit.ts
@@ -158,6 +158,9 @@ const parseOptions = (passedOptions: Partial<Options>): Configuration => {
 	const validations = getValidations(notUndefinedOptions?.validate ?? true)
 	validations.validationsConfig()
 
+	// Warn on unknown options
+	validations.knownOptions(passedOptions)
+
 	// Warn for the deprecated options. Note that these options have been removed
 	// from the type definitions in v7.
 	validations.draftPolliHeaders(
diff --git a/source/validations.ts b/source/validations.ts
index 1dc06ff..61ab016 100644
--- a/source/validations.ts
+++ b/source/validations.ts
@@ -313,12 +313,52 @@ const validations = {
 		}
 	},
 
+	knownOptions(passedOptions?: Partial<Options>) {
+		if (!passedOptions) return // no options is a valid config
+
+		type KeysEnum<T> = { [P in keyof Required<T>]: true }
+		// we have to manually update this when adding new options, because we want it to work even for JS users. But KeysEnum makes TypeScript ensures it's correct at build time!
+		const optionsMap: KeysEnum<Options> = {
+			windowMs: true,
+			limit: true,
+			message: true,
+			statusCode: true,
+			legacyHeaders: true,
+			standardHeaders: true,
+			identifier: true,
+			requestPropertyName: true,
+			skipFailedRequests: true,
+			skipSuccessfulRequests: true,
+			keyGenerator: true,
+			ipv6Subnet: true,
+			handler: true,
+			skip: true,
+			requestWasSuccessful: true,
+			store: true,
+			validate: true,
+			headers: true,
+			max: true,
+			passOnStoreError: true,
+		}
+		const validOptions = Object.keys(optionsMap).concat(
+			'draft_polli_ratelimit_headers', // not a valid option anymore, but we have a more specific check for this one, so don't warn for it here
+		)
+		for (const key of Object.keys(passedOptions)) {
+			if (!validOptions.includes(key)) {
+				throw new ValidationError(
+					'ERR_ERL_UNKNOWN_OPTION',
+					`Unexpected configuration option: ${key}`, // todo: suggest a valid option with a short levenstein distance?
+				)
+			}
+		}
+	},
+
 	/**
 	 * Checks the options.validate setting to ensure that only recognized
 	 * validations are enabled or disabled.
 	 *
 	 * If any unrecognized values are found, an error is logged that
-	 * includes the list of supported vaidations.
+	 * includes the list of supported validations.
 	 */
 	validationsConfig() {
 		const supportedValidations = Object.keys(this).filter(



Test patch:
diff --git a/test/library/validation-test.ts b/test/library/validation-test.ts
index cf9d71f..3c42727 100644
--- a/test/library/validation-test.ts
+++ b/test/library/validation-test.ts
@@ -349,6 +349,15 @@ describe('validations tests', () => {
 		})
 	})
 
+	describe('knownOptions', () => {
+		it('should log an error if an unknown option is passed in', () => {
+			validations.knownOptions({ windowMS: 100 } as any)
+			expect(console.error).toHaveBeenCalledWith(
+				expect.objectContaining({ code: 'ERR_ERL_UNKNOWN_OPTION' }),
+			)
+		})
+	})
+
 	describe('validationsConfig', () => {
 		it('should log an error if an unknown validation is disabled', () => {
 			validations = getValidations({ invalid: false } as any)