@@ -3,6 +3,7 @@ import { requireBearerAuth } from "./bearerAuth.js";
33import { AuthInfo } from "../types.js" ;
44import { InsufficientScopeError , InvalidTokenError , OAuthError , ServerError } from "../errors.js" ;
55import { OAuthTokenVerifier } from "../provider.js" ;
6+ import { LATEST_PROTOCOL_VERSION } from '../../../types.js' ;
67
78// Mock verifier
89const mockVerifyAccessToken = jest . fn ( ) ;
@@ -42,12 +43,13 @@ describe("requireBearerAuth middleware", () => {
4243
4344 mockRequest . headers = {
4445 authorization : "Bearer valid-token" ,
46+ 'mcp-protocol-version' : LATEST_PROTOCOL_VERSION ,
4547 } ;
4648
4749 const middleware = requireBearerAuth ( { verifier : mockVerifier } ) ;
4850 await middleware ( mockRequest as Request , mockResponse as Response , nextFunction ) ;
4951
50- expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" ) ;
52+ expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" , LATEST_PROTOCOL_VERSION ) ;
5153 expect ( mockRequest . auth ) . toEqual ( validAuthInfo ) ;
5254 expect ( nextFunction ) . toHaveBeenCalled ( ) ;
5355 expect ( mockResponse . status ) . not . toHaveBeenCalled ( ) ;
@@ -65,12 +67,13 @@ describe("requireBearerAuth middleware", () => {
6567
6668 mockRequest . headers = {
6769 authorization : "Bearer expired-token" ,
70+ 'mcp-protocol-version' : LATEST_PROTOCOL_VERSION ,
6871 } ;
6972
7073 const middleware = requireBearerAuth ( { verifier : mockVerifier } ) ;
7174 await middleware ( mockRequest as Request , mockResponse as Response , nextFunction ) ;
7275
73- expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "expired-token" ) ;
76+ expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "expired-token" , LATEST_PROTOCOL_VERSION ) ;
7477 expect ( mockResponse . status ) . toHaveBeenCalledWith ( 401 ) ;
7578 expect ( mockResponse . set ) . toHaveBeenCalledWith (
7679 "WWW-Authenticate" ,
@@ -93,12 +96,13 @@ describe("requireBearerAuth middleware", () => {
9396
9497 mockRequest . headers = {
9598 authorization : "Bearer valid-token" ,
99+ 'mcp-protocol-version' : LATEST_PROTOCOL_VERSION ,
96100 } ;
97101
98102 const middleware = requireBearerAuth ( { verifier : mockVerifier } ) ;
99103 await middleware ( mockRequest as Request , mockResponse as Response , nextFunction ) ;
100104
101- expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" ) ;
105+ expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" , LATEST_PROTOCOL_VERSION ) ;
102106 expect ( mockRequest . auth ) . toEqual ( nonExpiredAuthInfo ) ;
103107 expect ( nextFunction ) . toHaveBeenCalled ( ) ;
104108 expect ( mockResponse . status ) . not . toHaveBeenCalled ( ) ;
@@ -115,6 +119,7 @@ describe("requireBearerAuth middleware", () => {
115119
116120 mockRequest . headers = {
117121 authorization : "Bearer valid-token" ,
122+ 'mcp-protocol-version' : LATEST_PROTOCOL_VERSION ,
118123 } ;
119124
120125 const middleware = requireBearerAuth ( {
@@ -124,7 +129,7 @@ describe("requireBearerAuth middleware", () => {
124129
125130 await middleware ( mockRequest as Request , mockResponse as Response , nextFunction ) ;
126131
127- expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" ) ;
132+ expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" , LATEST_PROTOCOL_VERSION ) ;
128133 expect ( mockResponse . status ) . toHaveBeenCalledWith ( 403 ) ;
129134 expect ( mockResponse . set ) . toHaveBeenCalledWith (
130135 "WWW-Authenticate" ,
@@ -146,6 +151,7 @@ describe("requireBearerAuth middleware", () => {
146151
147152 mockRequest . headers = {
148153 authorization : "Bearer valid-token" ,
154+ 'mcp-protocol-version' : LATEST_PROTOCOL_VERSION ,
149155 } ;
150156
151157 const middleware = requireBearerAuth ( {
@@ -155,7 +161,7 @@ describe("requireBearerAuth middleware", () => {
155161
156162 await middleware ( mockRequest as Request , mockResponse as Response , nextFunction ) ;
157163
158- expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" ) ;
164+ expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" , LATEST_PROTOCOL_VERSION ) ;
159165 expect ( mockRequest . auth ) . toEqual ( authInfo ) ;
160166 expect ( nextFunction ) . toHaveBeenCalled ( ) ;
161167 expect ( mockResponse . status ) . not . toHaveBeenCalled ( ) ;
@@ -204,14 +210,15 @@ describe("requireBearerAuth middleware", () => {
204210 it ( "should return 401 when token verification fails with InvalidTokenError" , async ( ) => {
205211 mockRequest . headers = {
206212 authorization : "Bearer invalid-token" ,
213+ 'mcp-protocol-version' : LATEST_PROTOCOL_VERSION ,
207214 } ;
208215
209216 mockVerifyAccessToken . mockRejectedValue ( new InvalidTokenError ( "Token expired" ) ) ;
210217
211218 const middleware = requireBearerAuth ( { verifier : mockVerifier } ) ;
212219 await middleware ( mockRequest as Request , mockResponse as Response , nextFunction ) ;
213220
214- expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "invalid-token" ) ;
221+ expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "invalid-token" , LATEST_PROTOCOL_VERSION ) ;
215222 expect ( mockResponse . status ) . toHaveBeenCalledWith ( 401 ) ;
216223 expect ( mockResponse . set ) . toHaveBeenCalledWith (
217224 "WWW-Authenticate" ,
@@ -226,14 +233,15 @@ describe("requireBearerAuth middleware", () => {
226233 it ( "should return 403 when access token has insufficient scopes" , async ( ) => {
227234 mockRequest . headers = {
228235 authorization : "Bearer valid-token" ,
236+ 'mcp-protocol-version' : LATEST_PROTOCOL_VERSION ,
229237 } ;
230238
231239 mockVerifyAccessToken . mockRejectedValue ( new InsufficientScopeError ( "Required scopes: read, write" ) ) ;
232240
233241 const middleware = requireBearerAuth ( { verifier : mockVerifier } ) ;
234242 await middleware ( mockRequest as Request , mockResponse as Response , nextFunction ) ;
235243
236- expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" ) ;
244+ expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" , LATEST_PROTOCOL_VERSION ) ;
237245 expect ( mockResponse . status ) . toHaveBeenCalledWith ( 403 ) ;
238246 expect ( mockResponse . set ) . toHaveBeenCalledWith (
239247 "WWW-Authenticate" ,
@@ -248,14 +256,15 @@ describe("requireBearerAuth middleware", () => {
248256 it ( "should return 500 when a ServerError occurs" , async ( ) => {
249257 mockRequest . headers = {
250258 authorization : "Bearer valid-token" ,
259+ 'mcp-protocol-version' : LATEST_PROTOCOL_VERSION ,
251260 } ;
252261
253262 mockVerifyAccessToken . mockRejectedValue ( new ServerError ( "Internal server issue" ) ) ;
254263
255264 const middleware = requireBearerAuth ( { verifier : mockVerifier } ) ;
256265 await middleware ( mockRequest as Request , mockResponse as Response , nextFunction ) ;
257266
258- expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" ) ;
267+ expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" , LATEST_PROTOCOL_VERSION ) ;
259268 expect ( mockResponse . status ) . toHaveBeenCalledWith ( 500 ) ;
260269 expect ( mockResponse . json ) . toHaveBeenCalledWith (
261270 expect . objectContaining ( { error : "server_error" , error_description : "Internal server issue" } )
@@ -266,14 +275,15 @@ describe("requireBearerAuth middleware", () => {
266275 it ( "should return 400 for generic OAuthError" , async ( ) => {
267276 mockRequest . headers = {
268277 authorization : "Bearer valid-token" ,
278+ 'mcp-protocol-version' : LATEST_PROTOCOL_VERSION ,
269279 } ;
270280
271281 mockVerifyAccessToken . mockRejectedValue ( new OAuthError ( "custom_error" , "Some OAuth error" ) ) ;
272282
273283 const middleware = requireBearerAuth ( { verifier : mockVerifier } ) ;
274284 await middleware ( mockRequest as Request , mockResponse as Response , nextFunction ) ;
275285
276- expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" ) ;
286+ expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" , LATEST_PROTOCOL_VERSION ) ;
277287 expect ( mockResponse . status ) . toHaveBeenCalledWith ( 400 ) ;
278288 expect ( mockResponse . json ) . toHaveBeenCalledWith (
279289 expect . objectContaining ( { error : "custom_error" , error_description : "Some OAuth error" } )
@@ -284,14 +294,15 @@ describe("requireBearerAuth middleware", () => {
284294 it ( "should return 500 when unexpected error occurs" , async ( ) => {
285295 mockRequest . headers = {
286296 authorization : "Bearer valid-token" ,
297+ 'mcp-protocol-version' : LATEST_PROTOCOL_VERSION ,
287298 } ;
288299
289300 mockVerifyAccessToken . mockRejectedValue ( new Error ( "Unexpected error" ) ) ;
290301
291302 const middleware = requireBearerAuth ( { verifier : mockVerifier } ) ;
292303 await middleware ( mockRequest as Request , mockResponse as Response , nextFunction ) ;
293304
294- expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" ) ;
305+ expect ( mockVerifyAccessToken ) . toHaveBeenCalledWith ( "valid-token" , LATEST_PROTOCOL_VERSION ) ;
295306 expect ( mockResponse . status ) . toHaveBeenCalledWith ( 500 ) ;
296307 expect ( mockResponse . json ) . toHaveBeenCalledWith (
297308 expect . objectContaining ( { error : "server_error" , error_description : "Internal Server Error" } )
0 commit comments