11import logging
22
3- from collections .abc import Awaitable , Callable
3+ from collections .abc import Awaitable , Callable , Sequence
44from typing import TYPE_CHECKING , Any
55
66
77if TYPE_CHECKING :
88 from starlette .applications import Starlette
9+ from starlette .middleware import Middleware
910 from starlette .routing import Route
1011
1112 _package_starlette_installed = True
1213
1314else :
1415 try :
1516 from starlette .applications import Starlette
17+ from starlette .middleware import Middleware
1618 from starlette .routing import Route
1719
1820 _package_starlette_installed = True
1921 except ImportError :
2022 Starlette = Any
23+ Middleware = Any
2124 Route = Any
2225
2326 _package_starlette_installed = False
@@ -102,23 +105,30 @@ def routes(
102105 agent_card_url : str = AGENT_CARD_WELL_KNOWN_PATH ,
103106 rpc_url : str = DEFAULT_RPC_URL ,
104107 extended_agent_card_url : str = EXTENDED_AGENT_CARD_PATH ,
108+ middleware : Sequence [Middleware ] | None = None ,
105109 ) -> list [Route ]:
106110 """Returns the Starlette Routes for handling A2A requests.
107111
108112 Args:
109113 agent_card_url: The URL path for the agent card endpoint.
110114 rpc_url: The URL path for the A2A JSON-RPC endpoint (POST requests).
111115 extended_agent_card_url: The URL for the authenticated extended agent card endpoint.
116+ middleware: Optional sequence of Starlette Middleware (e.g.
117+ `[Middleware(AuthenticationMiddleware)]`) applied to the RPC
118+ endpoint and the authenticated extended agent card endpoint.
112119
113120 Returns:
114121 A list of Starlette Route objects.
115122 """
123+ route_mw = list (middleware ) if middleware else None
124+
116125 app_routes = [
117126 Route (
118127 rpc_url ,
119128 self ._handle_requests ,
120129 methods = ['POST' ],
121130 name = 'a2a_handler' ,
131+ middleware = route_mw ,
122132 ),
123133 Route (
124134 agent_card_url ,
@@ -148,6 +158,7 @@ def routes(
148158 self ._handle_get_authenticated_extended_agent_card ,
149159 methods = ['GET' ],
150160 name = 'authenticated_extended_agent_card' ,
161+ middleware = route_mw ,
151162 )
152163 )
153164 return app_routes
@@ -158,6 +169,7 @@ def add_routes_to_app(
158169 agent_card_url : str = AGENT_CARD_WELL_KNOWN_PATH ,
159170 rpc_url : str = DEFAULT_RPC_URL ,
160171 extended_agent_card_url : str = EXTENDED_AGENT_CARD_PATH ,
172+ middleware : Sequence [Middleware ] | None = None ,
161173 ) -> None :
162174 """Adds the routes to the Starlette application.
163175
@@ -166,11 +178,13 @@ def add_routes_to_app(
166178 agent_card_url: The URL path for the agent card endpoint.
167179 rpc_url: The URL path for the A2A JSON-RPC endpoint (POST requests).
168180 extended_agent_card_url: The URL for the authenticated extended agent card endpoint.
181+ middleware: Optional sequence of Starlette Middleware.
169182 """
170183 routes = self .routes (
171184 agent_card_url = agent_card_url ,
172185 rpc_url = rpc_url ,
173186 extended_agent_card_url = extended_agent_card_url ,
187+ middleware = middleware ,
174188 )
175189 app .routes .extend (routes )
176190
@@ -179,6 +193,7 @@ def build(
179193 agent_card_url : str = AGENT_CARD_WELL_KNOWN_PATH ,
180194 rpc_url : str = DEFAULT_RPC_URL ,
181195 extended_agent_card_url : str = EXTENDED_AGENT_CARD_PATH ,
196+ middleware : Sequence [Middleware ] | None = None ,
182197 ** kwargs : Any ,
183198 ) -> Starlette :
184199 """Builds and returns the Starlette application instance.
@@ -187,6 +202,7 @@ def build(
187202 agent_card_url: The URL path for the agent card endpoint.
188203 rpc_url: The URL path for the A2A JSON-RPC endpoint (POST requests).
189204 extended_agent_card_url: The URL for the authenticated extended agent card endpoint.
205+ middleware: Optional sequence of Starlette Middleware applied to authenticated routes.
190206 **kwargs: Additional keyword arguments to pass to the Starlette constructor.
191207
192208 Returns:
@@ -195,7 +211,7 @@ def build(
195211 app = Starlette (** kwargs )
196212
197213 self .add_routes_to_app (
198- app , agent_card_url , rpc_url , extended_agent_card_url
214+ app , agent_card_url , rpc_url , extended_agent_card_url , middleware
199215 )
200216
201217 return app
0 commit comments