From ede292e01a9843d7934a80de34f1e5092fd83245 Mon Sep 17 00:00:00 2001 From: brendanobra Date: Tue, 28 Oct 2025 08:31:44 -0700 Subject: [PATCH 1/2] feat: remove internal processors + contracts --- core/main/src/firebolt/firebolt_ws.rs | 2 +- .../service_controller_state.rs | 2 +- core/sdk/src/extn/client/extn_client.rs | 54 +++++++++---------- core/sdk/src/extn/client/extn_processor.rs | 16 +++--- .../extn/client/wait_for_service_processor.rs | 8 +-- core/sdk/src/extn/extn_client_message.rs | 18 +++---- core/sdk/src/framework/ripple_contract.rs | 6 +-- core/sdk/src/utils/mock_utils.rs | 10 ++-- 8 files changed, 57 insertions(+), 59 deletions(-) diff --git a/core/main/src/firebolt/firebolt_ws.rs b/core/main/src/firebolt/firebolt_ws.rs index 03e7b6d77..adada8399 100644 --- a/core/main/src/firebolt/firebolt_ws.rs +++ b/core/main/src/firebolt/firebolt_ws.rs @@ -527,7 +527,7 @@ async fn return_invalid_service_error_message( id: id.clone(), payload: ExtnPayload::Response(ExtnResponse::Error(e)), requestor: ExtnId::try_from(session.get_app_id()).unwrap(), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: None, ts: None, }; diff --git a/core/main/src/service/ripple_service/service_controller_state.rs b/core/main/src/service/ripple_service/service_controller_state.rs index 4b4239b2c..119bdef4f 100644 --- a/core/main/src/service/ripple_service/service_controller_state.rs +++ b/core/main/src/service/ripple_service/service_controller_state.rs @@ -554,7 +554,7 @@ async fn return_invalid_service_error_message( id: id.clone(), payload: ExtnPayload::Response(ExtnResponse::Error(e)), requestor: ExtnId::try_from(session.get_app_id()).unwrap(), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: None, ts: None, }; diff --git a/core/sdk/src/extn/client/extn_client.rs b/core/sdk/src/extn/client/extn_client.rs index 8aab39887..78712d0db 100644 --- a/core/sdk/src/extn/client/extn_client.rs +++ b/core/sdk/src/extn/client/extn_client.rs @@ -1132,7 +1132,7 @@ pub mod tests { let msg = ExtnMessage { id: "test_id".to_string(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: Some(ExtnId::get_main_target("main".into())), payload: ExtnPayload::Response(ExtnResponse::String("success".to_string())), ts: Some(Utc::now().timestamp_millis()), @@ -1153,7 +1153,7 @@ pub mod tests { let msg = ExtnMessage { id: "test_id".to_string(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: Some(ExtnId::get_main_target("main".into())), payload: ExtnPayload::Response(ExtnResponse::String("success".to_string())), ts: Some(Utc::now().timestamp_millis()), @@ -1171,7 +1171,7 @@ pub mod tests { fn test_add_stream_processor() { let extn_client = ExtnClient::mock(); let processor = - MockRequestProcessor::new_v1(extn_client.clone(), vec![RippleContract::Internal]); + MockRequestProcessor::new_v1(extn_client.clone(), vec![RippleContract::RippleContext]); add_stream_processor( processor.contract().as_clear_string(), @@ -1186,7 +1186,7 @@ pub mod tests { fn test_add_vec_stream_processor() { let extn_client = ExtnClient::mock(); let processor = - MockEventProcessor::new_v1(extn_client.clone(), vec![RippleContract::Internal]); + MockEventProcessor::new_v1(extn_client.clone(), vec![RippleContract::RippleContext]); let id = processor.contract().as_clear_string(); add_vec_stream_processor( @@ -1222,7 +1222,7 @@ pub mod tests { async fn test_add_request_processor() { let mut extn_client = ExtnClient::mock(); let processor = - MockRequestProcessor::new_v1(extn_client.clone(), vec![RippleContract::Internal]); + MockRequestProcessor::new_v1(extn_client.clone(), vec![RippleContract::RippleContext]); extn_client.add_request_processor(processor); tokio::time::sleep(Duration::from_millis(10)).await; @@ -1242,7 +1242,7 @@ pub mod tests { async fn test_add_event_processor() { let mut extn_client = ExtnClient::mock(); let processor = - MockEventProcessor::new_v1(extn_client.clone(), vec![RippleContract::Internal]); + MockEventProcessor::new_v1(extn_client.clone(), vec![RippleContract::RippleContext]); let id = processor.contract().as_clear_string(); extn_client.add_event_processor(processor); @@ -1420,7 +1420,7 @@ pub mod tests { let processor = MockRequestProcessor::new_v1( extn_client.clone(), vec![ - RippleContract::Internal, + RippleContract::RippleContext, RippleContract::Session(SessionAdjective::Account), ], ); @@ -1430,7 +1430,7 @@ pub mod tests { let response = extn_client .request(MockRequest { app_id: "test_app_id".to_string(), - contract: RippleContract::Internal, + contract: RippleContract::RippleContext, expected_response: Some(ExtnResponse::Boolean(true)), }) .await; @@ -1440,7 +1440,7 @@ pub mod tests { let expected_message = ExtnMessage { id: "some-uuid".to_string(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: None, payload: ExtnPayload::Response(ExtnResponse::Boolean(true)), ts: Some(Utc::now().timestamp_millis()), @@ -1467,13 +1467,13 @@ pub mod tests { let mut extn_client = ExtnClient::new_main(); let processor = - MockRequestProcessor::new_v1(extn_client.clone(), vec![RippleContract::Internal]); + MockRequestProcessor::new_v1(extn_client.clone(), vec![RippleContract::RippleContext]); extn_client.add_request_processor(processor); let response = extn_client .main_internal_request(MockRequest { app_id: "test_app_id".to_string(), - contract: RippleContract::Internal, + contract: RippleContract::RippleContext, expected_response: Some(ExtnResponse::Boolean(true)), }) .await; @@ -1483,7 +1483,7 @@ pub mod tests { let expected_message = ExtnMessage { id: "some-uuid".to_string(), requestor: cap, - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: None, payload: ExtnPayload::Response(ExtnResponse::Boolean(true)), ts: Some(Utc::now().timestamp_millis()), @@ -1653,7 +1653,7 @@ pub mod tests { let message = ExtnMessage { id: "test_id".to_string(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: None, payload: ExtnPayload::Request(ExtnRequest::Context( RippleContextUpdateRequest::TimeZone(TimeZone { @@ -1679,7 +1679,7 @@ pub mod tests { async fn test_event() { let mut extn_client = ExtnClient::new_main(); let processor = - MockEventProcessor::new_v1(extn_client.clone(), vec![RippleContract::Internal]); + MockEventProcessor::new_v1(extn_client.clone(), vec![RippleContract::RippleContext]); extn_client.add_event_processor(processor); @@ -1698,7 +1698,7 @@ pub mod tests { extn_client.handle_message(ExtnMessage { id: "test_id".to_string(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: None, payload: event.get_extn_payload(), ts: Some(Utc::now().timestamp_millis()), @@ -1735,7 +1735,7 @@ pub mod tests { let mut extn_client = ExtnClient::new_main(); let message = MockRequest { app_id: "test_app_id".to_string(), - contract: RippleContract::Internal, + contract: RippleContract::RippleContext, expected_response: Some(ExtnResponse::Boolean(true)), }; let (tx, mut rx) = mpsc::channel(1); @@ -1803,7 +1803,7 @@ pub mod tests { let msg = ExtnMessage { id, requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: None, payload: ExtnPayload::Response(exp_resp.clone()), ts: Some(Utc::now().timestamp_millis()), @@ -1839,7 +1839,7 @@ pub mod tests { testing_logger::setup(); let extn_client = ExtnClient::mock(); let processor = - MockRequestProcessor::new_v1(extn_client.clone(), vec![RippleContract::Internal]); + MockRequestProcessor::new_v1(extn_client.clone(), vec![RippleContract::RippleContext]); if tc.contains("req processor err") { extn_client.request_processors.write().unwrap().clear(); @@ -1856,7 +1856,7 @@ pub mod tests { let msg = ExtnMessage { id: "some-id".to_string(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: None, payload: ExtnPayload::Response(exp_resp), ts: Some(Utc::now().timestamp_millis()), @@ -1897,7 +1897,7 @@ pub mod tests { testing_logger::setup(); let extn_client = ExtnClient::mock(); let processor = - MockEventProcessor::new_v1(extn_client.clone(), vec![RippleContract::Internal]); + MockEventProcessor::new_v1(extn_client.clone(), vec![RippleContract::RippleContext]); let id = processor.contract().as_clear_string(); add_vec_stream_processor( id.clone(), @@ -1920,7 +1920,7 @@ pub mod tests { let msg = ExtnMessage { id: "some-id".to_string(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: None, payload: ExtnPayload::Response(exp_resp), ts: Some(Utc::now().timestamp_millis()), @@ -1953,7 +1953,7 @@ pub mod tests { let req = ExtnMessage { id: id.clone(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: None, payload: ExtnPayload::Request(ExtnRequest::Device(DeviceRequest::DeviceInfo( DeviceInfoRequest::Model, @@ -1971,7 +1971,7 @@ pub mod tests { received_msg.requestor.to_string(), "ripple:main:internal:main" ); - assert_eq!(received_msg.target.as_clear_string(), "internal"); + assert_eq!(received_msg.target.as_clear_string(), "ripple_context"); assert_eq!(received_msg.target_id, None); if let ExtnPayload::Response(ExtnResponse::String(s)) = received_msg.payload { assert!(s.eq("test_make")); @@ -1999,7 +1999,7 @@ pub mod tests { let msg = ExtnMessage { id: id.clone(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: None, payload: ExtnPayload::Response(ExtnResponse::String("test_make".to_string())), ts: Some(Utc::now().timestamp_millis()), @@ -2014,7 +2014,7 @@ pub mod tests { received_msg.requestor.to_string(), "ripple:main:internal:main" ); - assert_eq!(received_msg.target.as_clear_string(), "internal"); + assert_eq!(received_msg.target.as_clear_string(), "ripple_context"); assert_eq!(received_msg.target_id, None); if let ExtnPayload::Response(ExtnResponse::String(s)) = received_msg.payload { assert!(s.eq("test_make")); @@ -2340,7 +2340,7 @@ pub mod tests { let (tx, mut tr) = mpsc::channel(1); let request = MockRequest { app_id: "test_app_id".to_string(), - contract: RippleContract::Internal, + contract: RippleContract::RippleContext, expected_response: None, }; let id = extn_client.subscribe(request.clone(), tx).await.unwrap(); @@ -2348,7 +2348,7 @@ pub mod tests { let msg = ExtnMessage { id: id.clone(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: None, payload: request.get_extn_payload(), ts: Some(Utc::now().timestamp_millis()), diff --git a/core/sdk/src/extn/client/extn_processor.rs b/core/sdk/src/extn/client/extn_processor.rs index 94034316a..9a74fd1b0 100644 --- a/core/sdk/src/extn/client/extn_processor.rs +++ b/core/sdk/src/extn/client/extn_processor.rs @@ -441,7 +441,7 @@ pub mod tests { state: MockState { client: ExtnClient::mock(), contracts: vec![ - RippleContract::Internal, + RippleContract::RippleContext, RippleContract::Session(SessionAdjective::Account), RippleContract::DeviceEvents(EventAdjective::Input), ], @@ -501,7 +501,7 @@ pub mod tests { let result = MockRequestProcessor::process_request( MockState { client: extn_client, - contracts: vec![RippleContract::Internal], + contracts: vec![RippleContract::RippleContext], }, msg.clone(), get_mock_request(), @@ -611,7 +611,7 @@ pub mod tests { assert_eq!( result, Some(vec![ - RippleContract::Internal, + RippleContract::RippleContext, RippleContract::Session(SessionAdjective::Account), RippleContract::DeviceEvents(EventAdjective::Input), ]) @@ -622,7 +622,7 @@ pub mod tests { async fn test_event_handle_error() { let state = MockState { client: ExtnClient::mock(), - contracts: vec![RippleContract::Internal], + contracts: vec![RippleContract::RippleContext], }; let msg = get_mock_message(PayloadType::Event); let error = RippleError::ProcessorError; @@ -648,7 +648,7 @@ pub mod tests { let processor = MockRequestProcessor { state: MockState { client: extn_client.clone(), - contracts: vec![RippleContract::Internal], + contracts: vec![RippleContract::RippleContext], }, streamer: DefaultExtnStreamer::new(), }; @@ -658,7 +658,7 @@ pub mod tests { let response = extn_client .request(MockRequest { app_id: "test_app_id".to_string(), - contract: RippleContract::Internal, + contract: RippleContract::RippleContext, expected_response: exp_resp.clone(), }) .await; @@ -668,7 +668,7 @@ pub mod tests { let expected_message = ExtnMessage { id: "some-uuid".to_string(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: None, payload: ExtnPayload::Response(exp_resp.clone().unwrap()), ts: Some(Utc::now().timestamp_millis()), @@ -706,7 +706,7 @@ pub mod tests { let processor = MockEventProcessor { state: MockState { client: extn_client.clone(), - contracts: vec![RippleContract::Internal], + contracts: vec![RippleContract::RippleContext], }, streamer: DefaultExtnStreamer::new(), }; diff --git a/core/sdk/src/extn/client/wait_for_service_processor.rs b/core/sdk/src/extn/client/wait_for_service_processor.rs index eaa01386b..81f716180 100644 --- a/core/sdk/src/extn/client/wait_for_service_processor.rs +++ b/core/sdk/src/extn/client/wait_for_service_processor.rs @@ -135,7 +135,7 @@ mod tests { let ready_message = ExtnMessage { id: "test_id".to_string(), requestor: ExtnId::new_channel(ExtnClassId::Device, "info".to_string()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: Some(ExtnId::get_main_target("main".into())), payload: ExtnPayload::Request(ExtnRequest::Config(Config::DefaultName)), ts: Some(1234567890), @@ -184,7 +184,7 @@ mod tests { let invalid_message = ExtnMessage { id: "test_id".to_string(), requestor: ExtnId::new_channel(ExtnClassId::Device, "other".to_string()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: Some(ExtnId::get_main_target("main".into())), payload: ExtnPayload::Request(ExtnRequest::Config(Config::DefaultName)), ts: Some(1234567890), @@ -238,7 +238,7 @@ mod tests { let ready_message = ExtnMessage { id: "test_id".to_string(), requestor: ExtnId::new_channel(ExtnClassId::Device, "other".to_string()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: Some(ExtnId::get_main_target("main".into())), payload: ExtnPayload::Request(ExtnRequest::Config(Config::DefaultName)), ts: Some(1234567890), @@ -274,7 +274,7 @@ mod tests { let invalid_message = ExtnMessage { id: "test_id".to_string(), requestor: ExtnId::new_channel(ExtnClassId::Device, "info".to_string()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: Some(ExtnId::get_main_target("main".into())), payload: ExtnPayload::Request(ExtnRequest::Config(Config::DefaultName)), ts: Some(1234567890), diff --git a/core/sdk/src/extn/extn_client_message.rs b/core/sdk/src/extn/extn_client_message.rs index 1def4c5e9..6d6beb2db 100644 --- a/core/sdk/src/extn/extn_client_message.rs +++ b/core/sdk/src/extn/extn_client_message.rs @@ -479,7 +479,7 @@ impl ExtnPayloadProvider for ExtnRequest { } fn contract() -> RippleContract { - RippleContract::Internal + RippleContract::RippleContext } } @@ -521,7 +521,7 @@ impl ExtnPayloadProvider for ExtnResponse { } fn contract() -> RippleContract { - RippleContract::Internal + RippleContract::RippleContext } } @@ -551,7 +551,7 @@ impl ExtnPayloadProvider for ExtnEvent { } fn contract() -> RippleContract { - RippleContract::Internal + RippleContract::RippleContext } } @@ -675,7 +675,7 @@ mod tests { let original_message = ExtnMessage { id: "test_id".to_string(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: Some(ExtnId::get_main_target("main".into())), payload: ExtnPayload::Request(ExtnRequest::Config(Config::DefaultName)), ts: Some(1234567890), @@ -690,7 +690,7 @@ mod tests { ack_message.requestor, ExtnId::get_main_target("main".into()) ); - assert_eq!(ack_message.target, RippleContract::Internal); + assert_eq!(ack_message.target, RippleContract::RippleContext); assert_eq!( ack_message.target_id, Some(ExtnId::get_main_target("main".into())) @@ -726,7 +726,7 @@ mod tests { #[test] fn test_contract() { - let expected_contract = RippleContract::Internal; + let expected_contract = RippleContract::RippleContext; assert_eq!(ExtnEvent::contract(), expected_contract); } @@ -736,7 +736,7 @@ mod tests { let original_message = ExtnMessage { id: "test_id".to_string(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: Some(ExtnId::get_main_target("main".into())), payload: ExtnPayload::Request(ExtnRequest::Config(Config::DefaultName)), ts: Some(1234567890), @@ -753,7 +753,7 @@ mod tests { let original_message = ExtnMessage { id: "test_id".to_string(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: Some(ExtnId::get_main_target("main".into())), payload: ExtnPayload::Request(ExtnRequest::Config(Config::DefaultName)), ts: Some(1234567890), @@ -765,7 +765,7 @@ mod tests { assert!(tried_message.payload.is_request()); assert!(tried_message.id.eq_ignore_ascii_case("test_id")); assert!(tried_message.requestor == ExtnId::get_main_target("main".into())); - assert!(tried_message.target == RippleContract::Internal); + assert!(tried_message.target == RippleContract::RippleContext); assert!(tried_message.target_id == Some(ExtnId::get_main_target("main".into()))); assert!( tried_message.payload == ExtnPayload::Request(ExtnRequest::Config(Config::DefaultName)) diff --git a/core/sdk/src/framework/ripple_contract.rs b/core/sdk/src/framework/ripple_contract.rs index 1c92797ee..a495c8b1d 100644 --- a/core/sdk/src/framework/ripple_contract.rs +++ b/core/sdk/src/framework/ripple_contract.rs @@ -38,10 +38,6 @@ use serde_json::Value; #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)] #[serde(rename_all = "snake_case")] pub enum RippleContract { - /// Used by Main application to provide internal contracts for Extensions - #[default] - Internal, - /// Provided by the platform to handle launching and managing applications. /// Used by [crate::api::firebolt::fb_lifecycle_management::LifecycleManagementEventRequest] Launcher, @@ -94,6 +90,8 @@ pub enum RippleContract { /// Distributor gets the ability to configure and customize the generation of /// the Session information based on their policies. Used by [crate::api::session::AccountSession] Session(SessionAdjective), + /// Internal platform context for message passing between Main and Extensions + #[default] RippleContext, ExtnProvider(ExtnProviderAdjective), // Runtime ability for a given distributor to turn off a certian feature diff --git a/core/sdk/src/utils/mock_utils.rs b/core/sdk/src/utils/mock_utils.rs index 8624865e6..7e06564ca 100644 --- a/core/sdk/src/utils/mock_utils.rs +++ b/core/sdk/src/utils/mock_utils.rs @@ -243,7 +243,7 @@ impl ExtnPayloadProvider for MockEvent { } fn contract() -> RippleContract { - RippleContract::Internal + RippleContract::RippleContext } } @@ -275,7 +275,7 @@ impl ExtnPayloadProvider for MockRequest { } fn contract() -> RippleContract { - RippleContract::Internal + RippleContract::RippleContext } } @@ -287,7 +287,7 @@ pub fn get_mock_message(payload_type: PayloadType) -> ExtnMessage { ExtnMessage { id: "test_id".to_string(), requestor: ExtnId::get_main_target("main".into()), - target: RippleContract::Internal, + target: RippleContract::RippleContext, target_id: Some(ExtnId::get_main_target("main".into())), payload: match payload_type { PayloadType::Event => get_mock_event_payload(), @@ -305,7 +305,7 @@ pub fn get_mock_request_payload() -> ExtnPayload { ExtnPayload::Request(ExtnRequest::Extn( serde_json::to_value(MockRequest { app_id: "test_app_id".to_string(), - contract: RippleContract::Internal, + contract: RippleContract::RippleContext, expected_response: Some(ExtnResponse::Boolean(true)), }) .unwrap(), @@ -330,7 +330,7 @@ pub fn get_mock_event() -> MockEvent { pub fn get_mock_request() -> MockRequest { MockRequest { app_id: "test_app_id".to_string(), - contract: RippleContract::Internal, + contract: RippleContract::RippleContext, expected_response: Some(ExtnResponse::Boolean(true)), } } From 3840d1549c4fc32f8f4b3ece3ad9785948732aa4 Mon Sep 17 00:00:00 2001 From: brendanobra Date: Fri, 7 Nov 2025 15:17:05 -0800 Subject: [PATCH 2/2] chore: de-contractification --- core/main/src/firebolt/handlers/provider_registrar.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/main/src/firebolt/handlers/provider_registrar.rs b/core/main/src/firebolt/handlers/provider_registrar.rs index f5b88ebd2..5d9d51b94 100644 --- a/core/main/src/firebolt/handlers/provider_registrar.rs +++ b/core/main/src/firebolt/handlers/provider_registrar.rs @@ -160,8 +160,8 @@ impl ProviderRegistrar { rpc_module: &mut RpcModule, ) -> bool { info!( - "register_method: method_name={}, method_type={:?}, rpc_module={:?}", - method_name, method_type, rpc_module + "register_method: method_name={}, method_type={:?}", + method_name, method_type ); let result = match method_type {