@@ -4,11 +4,13 @@ mod routes;
44pub mod services;
55pub ( crate ) mod state;
66
7+ use oasis_runtime_sdk:: crypto:: signature:: { secp256k1, Signer } ;
78use std:: sync:: Arc ;
89
910use rocket:: { figment:: Figment , routes} ;
1011
11- use rofl_app_core:: { App , Environment } ;
12+ use crate :: state:: LocalEnv ;
13+ use rofl_app_core:: { App , AppId , Environment } ;
1214
1315/// API server configuration.
1416#[ derive( Clone ) ]
5759
5860 Ok ( ( ) )
5961}
62+
63+ /// Start the REST API server in mock mode
64+ pub async fn start_local (
65+ cfg : Config < ' _ > ,
66+ rpc_url : Option < String > ,
67+ seed : & [ u8 ] ,
68+ ) -> Result < ( ) , rocket:: Error > {
69+ let signer = secp256k1:: MemorySigner :: new_from_seed ( seed) . unwrap ( ) ;
70+
71+ // For mock mode, just use a simple stub that implements Env
72+ let env: Arc < dyn state:: Env > =
73+ Arc :: new ( LocalEnv :: new ( AppId :: default ( ) , Arc :: new ( signer) , rpc_url) ) ;
74+
75+ // Server configuration.
76+ let rocket_cfg = Figment :: from ( rocket:: config:: Config :: default ( ) )
77+ . select ( "default" )
78+ . merge ( ( "address" , cfg. address ) )
79+ . merge ( ( "reuse" , true ) ) ;
80+
81+ let server = rocket:: custom ( rocket_cfg)
82+ . manage ( cfg. kms )
83+ . manage ( env)
84+ . mount ( "/rofl/v1/app" , routes ! [ routes:: app:: id, ] )
85+ . mount ( "/rofl/v1/keys" , routes ! [ routes:: keys:: generate, ] ) ;
86+
87+ let server = server. manage ( cfg. metadata ) . mount (
88+ "/rofl/v1/metadata" ,
89+ routes ! [ routes:: metadata:: set, routes:: metadata:: get] ,
90+ ) ;
91+
92+ let server = server. mount ( "/rofl/v1/query" , routes ! [ routes:: query:: query] ) ;
93+
94+ #[ cfg( feature = "tx" ) ]
95+ let server = server
96+ . manage ( routes:: tx:: Config :: default ( ) )
97+ . mount ( "/rofl/v1/tx" , routes ! [ routes:: tx:: sign_and_submit] ) ;
98+
99+ server. launch ( ) . await ?;
100+
101+ Ok ( ( ) )
102+ }
0 commit comments