From 53c93be7575fb9e501d01b9ac615b0a7b8c6f59f Mon Sep 17 00:00:00 2001 From: Caspar Oostendorp Date: Sun, 28 Apr 2024 07:49:38 +0800 Subject: [PATCH] wip on changing the server to support different manifest structure --- server/Cargo.lock | 1 + server/api/Cargo.toml | 3 +- server/api/src/handlers/keiko/manifest.rs | 65 +++++++++++++---------- server/api/src/server_state.rs | 1 + server/src/args.rs | 1 + 5 files changed, 42 insertions(+), 29 deletions(-) diff --git a/server/Cargo.lock b/server/Cargo.lock index a3f7fbe..5aad06b 100644 --- a/server/Cargo.lock +++ b/server/Cargo.lock @@ -1981,6 +1981,7 @@ dependencies = [ name = "keiko-api" version = "0.1.0" dependencies = [ + "anyhow", "axum", "cairo-lang-sierra", "cairo-lang-sierra-gas", diff --git a/server/api/Cargo.toml b/server/api/Cargo.toml index 92b0c6f..810c7c7 100644 --- a/server/api/Cargo.toml +++ b/server/api/Cargo.toml @@ -18,4 +18,5 @@ starknet = "=0.9.0" cairo-lang-sierra-to-casm = "=2.5.4" cairo-lang-sierra-type-size = "=2.5.4" cairo-lang-sierra-gas = "=2.5.4" -cairo-lang-sierra = "=2.5.4" \ No newline at end of file +cairo-lang-sierra = "=2.5.4" +anyhow = "1.0.82" \ No newline at end of file diff --git a/server/api/src/handlers/keiko/manifest.rs b/server/api/src/handlers/keiko/manifest.rs index 8e83694..315bb75 100644 --- a/server/api/src/handlers/keiko/manifest.rs +++ b/server/api/src/handlers/keiko/manifest.rs @@ -1,39 +1,48 @@ +use serde_json::json; use axum::extract::Path; use axum::http::StatusCode; use axum::{Extension, Json}; use axum::response::IntoResponse; -use dojo_world::manifest::Manifest; +use dojo_world::manifest::{AbstractManifestError, DeploymentManifest}; use crate::server_state::ServerState; use std::fs; use std::io::ErrorKind; +use starknet::core::types::FieldElement; +use starknet::providers::jsonrpc::HttpTransport; +use starknet::providers::JsonRpcClient; -// pub async fn store_manifest(Path(app_name): Path, Extension(server_state): Extension, Json(manifest): Json>) -> impl IntoResponse { -// let path = &server_state.manifest_base_dir; -// if !std::path::Path::new(path).exists() { -// if let Err(_) = fs::create_dir_all(path) { -// return (StatusCode::INTERNAL_SERVER_ERROR, "Server Error"); -// } -// } -// let path = format!("{}/{}.json", &server_state.manifest_base_dir, app_name); -// match fs::metadata(&path) { -// Ok(_) => (StatusCode::IM_USED, "Already uploaded"), -// Err(ref e) if e.kind() == ErrorKind::NotFound => { -// let json = serde_json::to_string(&manifest).unwrap(); -// match fs::write(path, json) { -// Ok(_) => (StatusCode::CREATED, "Stored manifest"), -// Err(_) => (StatusCode::INTERNAL_SERVER_ERROR, "Server error") -// } -// } -// Err(_) => (StatusCode::INTERNAL_SERVER_ERROR, "Server error"), -// } -// } -pub async fn get_manifest(Path(app_name): Path, Extension(server_state): Extension) -> impl IntoResponse { - let path = format!("{}/{}.json", &server_state.manifest_base_dir, app_name); - println!("{}", path); - match fs::read_to_string(&path) { - Ok(content) => (StatusCode::OK, content), - Err(ref e) if e.kind() == ErrorKind::NotFound => (StatusCode::NOT_FOUND, "Not Found".into()), - Err(_) => (StatusCode::INTERNAL_SERVER_ERROR, "Server error".into()), +pub async fn get_manifest( + Path(app_name): Path, + Extension(server_state): Extension, +) + -> impl IntoResponse +{ + let provider = JsonRpcClient::new(HttpTransport::new( + server_state.rpc_url + )); + + // let manifest = DeploymentManifest::load_from_remote(provider, FieldElement::from(server_state.world_address)).await?; + let world_address = FieldElement::from_hex_be(server_state.world_address.as_str()).unwrap(); + + + match DeploymentManifest::load_from_remote(provider, world_address).await { + Ok(manifest) => { + let world_json = serde_json::to_value(&manifest.base).unwrap(); + (StatusCode::OK, Json(world_json)) + } + + _ => (StatusCode::NOT_FOUND, Json(serde_json::json!("Not found"))) } + + // + // if remote_manifest.is_none() { + // ui.print_sub("No remote World found"); + // } + // + // match fs::read_to_string(&path) { + // Ok(content) => (StatusCode::OK, manifest), + // Err(ref e) if e.kind() == ErrorKind::NotFound => (StatusCode::NOT_FOUND, "Not Found".into()), + // Err(_) => (StatusCode::INTERNAL_SERVER_ERROR, "Server error".into()), + // } } diff --git a/server/api/src/server_state.rs b/server/api/src/server_state.rs index 4e73ba4..26daf3e 100644 --- a/server/api/src/server_state.rs +++ b/server/api/src/server_state.rs @@ -6,5 +6,6 @@ pub struct ServerState { pub json_rpc_client: HttpClient, pub rpc_url: Url, pub manifest_base_dir: String, + pub world_address: String, pub torii_url: Url, } diff --git a/server/src/args.rs b/server/src/args.rs index c8cfa56..9631690 100644 --- a/server/src/args.rs +++ b/server/src/args.rs @@ -347,6 +347,7 @@ impl Config { rpc_url: self.rpc_url(), manifest_base_dir, torii_url: self.torii_url(), + world_address: self.katana.world_address.clone(), } } }