Repository: hapijs/hapi (language: javascript)

Issue:
I cannot get any types
### Runtime

node

### Runtime version

v20

### Module version

"^20.1.4",

### Last module version without issue

_No response_

### Used with

_No response_

### Any other relevant information

_No response_

### What are you trying to achieve or the steps to reproduce?

```
import { Request, ResponseToolkit } from '@hapi/hapi';
```

lets me import but `ResponseToolkit` is just any.

### What was the result you got?

`any`
![Screenshot 2024-06-04 at 6 30 26 PM](https://github.com/hapijs/hapi/assets/6632701/86548549-bc6a-4207-84d7-7e2be3e459da)

### What result did you expect?

a real type


Discussion / hints:
Looking at the source code in v20 (like v20.3.0), hapi didn't ship with its own types. The types were added from DT only at v21.1.0: https://github.com/hapijs/hapi/blob/v21.1.0/lib/index.d.ts. Your solution is either:
1. Upgrade to latest version of hapi.
2. Install `@types/hapi__hapi` to use the DT types.

I'll close this for now since I don't consider this a bug in hapi. We can always reopen if it was a mistake.

Fix patch:
diff --git a/lib/types/route.d.ts b/lib/types/route.d.ts
index 173964163..be2416850 100644
--- a/lib/types/route.d.ts
+++ b/lib/types/route.d.ts
@@ -255,6 +255,13 @@ export interface RouteOptionsPayload {
      */
     maxBytes?: number | undefined;
 
+    /**
+     * @default 1000
+     * Limits the number of parts allowed in multipart payloads.
+     * [See docs](https://github.com/hapijs/hapi/blob/master/API.md#-routeoptionspayloadmaxparts)
+     */
+    maxParts?: number;
+
     /**
      * @default none.
      * Overrides payload processing for multipart requests. Value can be one of:
@@ -267,12 +274,7 @@ export interface RouteOptionsPayload {
      * * * * payload - the processed part payload.
      * [See docs](https://github.com/hapijs/hapi/blob/master/API.md#-routeoptionspayloadmultipart)
      */
-    multipart?:
-        | false
-        | {
-              output: PayloadOutput | 'annotated';
-          }
-        | undefined;
+    multipart?: boolean | { output: PayloadOutput | 'annotated' };
 
     /**
      * @default 'data'.
diff --git a/lib/types/server/methods.d.ts b/lib/types/server/methods.d.ts
index 9b54dcfce..dd482f988 100644
--- a/lib/types/server/methods.d.ts
+++ b/lib/types/server/methods.d.ts
@@ -17,6 +17,8 @@ export type ServerMethod = (...args: any[]) => any;
  */
 export interface ServerMethodCache extends PolicyOptions<any> {
     generateTimeout: number | false;
+    cache?: string;
+    segment?: string;
 }
 
 /**
diff --git a/package.json b/package.json
index 7d582b913..43ed22394 100755
--- a/package.json
+++ b/package.json
@@ -30,7 +30,7 @@
     "@hapi/bounce": "^3.0.1",
     "@hapi/call": "^9.0.1",
     "@hapi/catbox": "^12.1.1",
-    "@hapi/catbox-memory": "^6.0.1",
+    "@hapi/catbox-memory": "^6.0.2",
     "@hapi/heavy": "^8.0.1",
     "@hapi/hoek": "^11.0.2",
     "@hapi/mimos": "^7.0.1",


Test patch:
diff --git a/test/types/index.ts b/test/types/index.ts
index e6a824b6b..988edffb0 100644
--- a/test/types/index.ts
+++ b/test/types/index.ts
@@ -1,5 +1,6 @@
 import { types as lab } from '@hapi/lab';
 import { expect } from '@hapi/code';
+import * as CatboxMemory from '@hapi/catbox-memory';
 
 import {
     Plugin,
@@ -39,11 +40,17 @@ interface RequestDecorations {
 type AppRequest = Request<RequestDecorations>;
 
 const route: ServerRoute<RequestDecorations> = {
-    method: 'GET',
+    method: 'POST',
     path: '/',
     options: {
         app: {
             prefix: ['xx-']
+        },
+        payload: {
+            maxParts: 100,
+            maxBytes: 1024 * 1024,
+            output: 'stream',
+            multipart: true
         }
     },
     handler: (request: AppRequest, h: ResponseToolkit) => {
@@ -96,3 +103,24 @@ check.type<RequestRoute | null>(server.match('get', '/'));
 const sum = loadedServer.plugins.test.add(1, 2);
 expect(sum).to.equal(130);
 check.type<number>(sum);
+
+server.cache.provision({
+    name: 'some-cache',
+    provider: {
+        constructor: CatboxMemory.Engine,
+        options: {
+            partition: 'test'
+        }
+    }
+})
+
+server.method('test.add', (a: number, b: number) => a + b, {
+    bind: server,
+    cache: {
+        expiresIn: 1000,
+        generateTimeout: 100,
+        cache: 'some-cache',
+        segment: 'test-segment',
+    },
+    generateKey: (a: number, b: number) => `${a}${b}`
+});
\ No newline at end of file