@@ -21,6 +21,7 @@ use crate::handler::{
2121 PermissionHandler , PermissionResult , UserInputHandler , UserInputResponse ,
2222} ;
2323use crate :: hooks:: SessionHooks ;
24+ use crate :: provider_token:: BearerTokenProvider ;
2425use crate :: session_fs:: SessionFsProvider ;
2526use crate :: trace_context:: inject_trace_context;
2627use crate :: transforms:: SystemMessageTransform ;
@@ -893,6 +894,7 @@ impl Client {
893894 let command_handlers = build_command_handler_map ( runtime. commands . as_deref ( ) ) ;
894895 let canvas_handler = runtime. canvas_handler . take ( ) ;
895896 let session_fs_provider = runtime. session_fs_provider . take ( ) ;
897+ let bearer_token_providers = std:: mem:: take ( & mut runtime. bearer_token_providers ) ;
896898 if self . inner . session_fs_configured && session_fs_provider. is_none ( ) {
897899 return Err ( ErrorKind :: Session ( SessionErrorKind :: SessionFsProviderRequired ) . into ( ) ) ;
898900 }
@@ -1011,6 +1013,7 @@ impl Client {
10111013 command_handlers,
10121014 canvas_handler,
10131015 session_fs_provider,
1016+ bearer_token_providers,
10141017 channels,
10151018 idle_waiter. clone ( ) ,
10161019 capabilities. clone ( ) ,
@@ -1149,6 +1152,7 @@ impl Client {
11491152 let command_handlers = build_command_handler_map ( runtime. commands . as_deref ( ) ) ;
11501153 let canvas_handler = runtime. canvas_handler . take ( ) ;
11511154 let session_fs_provider = runtime. session_fs_provider . take ( ) ;
1155+ let bearer_token_providers = std:: mem:: take ( & mut runtime. bearer_token_providers ) ;
11521156 if self . inner . session_fs_configured && session_fs_provider. is_none ( ) {
11531157 return Err ( ErrorKind :: Session ( SessionErrorKind :: SessionFsProviderRequired ) . into ( ) ) ;
11541158 }
@@ -1183,6 +1187,7 @@ impl Client {
11831187 command_handlers,
11841188 canvas_handler,
11851189 session_fs_provider,
1190+ bearer_token_providers,
11861191 channels,
11871192 idle_waiter. clone ( ) ,
11881193 capabilities. clone ( ) ,
@@ -1391,6 +1396,7 @@ fn spawn_event_loop(
13911396 command_handlers : Arc < CommandHandlerMap > ,
13921397 canvas_handler : Option < Arc < dyn CanvasHandler > > ,
13931398 session_fs_provider : Option < Arc < dyn SessionFsProvider > > ,
1399+ bearer_token_providers : HashMap < String , Arc < dyn BearerTokenProvider > > ,
13941400 channels : crate :: router:: SessionChannels ,
13951401 idle_waiter : Arc < ParkingLotMutex < Option < IdleWaiter > > > ,
13961402 capabilities : Arc < parking_lot:: RwLock < SessionCapabilities > > ,
@@ -1432,6 +1438,7 @@ fn spawn_event_loop(
14321438 transforms: transforms. as_deref( ) ,
14331439 canvas_handler: canvas_handler. as_ref( ) ,
14341440 session_fs_provider: session_fs_provider. as_ref( ) ,
1441+ bearer_token_providers: & bearer_token_providers,
14351442 } ;
14361443 handle_request( & session_id, ctx, request) . await ;
14371444 }
@@ -2010,6 +2017,7 @@ struct RequestDispatchContext<'a> {
20102017 transforms : Option < & ' a dyn SystemMessageTransform > ,
20112018 canvas_handler : Option < & ' a Arc < dyn CanvasHandler > > ,
20122019 session_fs_provider : Option < & ' a Arc < dyn SessionFsProvider > > ,
2020+ bearer_token_providers : & ' a HashMap < String , Arc < dyn BearerTokenProvider > > ,
20132021}
20142022
20152023/// Process a JSON-RPC request from the CLI.
@@ -2025,6 +2033,7 @@ async fn handle_request(
20252033 let transforms = ctx. transforms ;
20262034 let canvas_handler = ctx. canvas_handler ;
20272035 let session_fs_provider = ctx. session_fs_provider ;
2036+ let bearer_token_providers = ctx. bearer_token_providers ;
20282037
20292038 if request. method . starts_with ( "sessionFs." ) {
20302039 crate :: session_fs_dispatch:: dispatch ( client, session_fs_provider, request) . await ;
@@ -2036,6 +2045,11 @@ async fn handle_request(
20362045 return ;
20372046 }
20382047
2048+ if request. method == crate :: generated:: api_types:: rpc_methods:: PROVIDERTOKEN_GETTOKEN {
2049+ crate :: provider_token_dispatch:: dispatch ( client, bearer_token_providers, request) . await ;
2050+ return ;
2051+ }
2052+
20392053 match request. method . as_str ( ) {
20402054 "hooks.invoke" => {
20412055 let params = request. params . as_ref ( ) ;
0 commit comments