905 lines
31 KiB
Rust
905 lines
31 KiB
Rust
// file: kb-app-demo-desktop/src/tauri.rs
|
|
// version: 46
|
|
|
|
//! Tauri runtime assembly and private command wrappers.
|
|
|
|
use tauri::Manager; // rust-rules: trait-import
|
|
|
|
/// Runs the desktop demo application.
|
|
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
|
#[allow(clippy::question_mark_used)]
|
|
#[allow(clippy::question_mark)]
|
|
pub fn run() -> ks_core::Result<()> {
|
|
let rustls_result = install_default_rustls_provider();
|
|
if let std::result::Result::Err(error) = rustls_result {
|
|
return std::result::Result::Err(error);
|
|
}
|
|
let app_state: crate::AppState = match crate::AppState::initialize() {
|
|
std::result::Result::Ok(state) => state,
|
|
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
|
};
|
|
tracing::info!(
|
|
target: crate::TRACING_TARGET,
|
|
composition_config_path = app_state.config_path(),
|
|
logging_config_path = app_state.logging_config_path(),
|
|
active_profile = app_state.active_profile().name.as_str(),
|
|
logging_routes = app_state.logging_route_count(),
|
|
configured_profiles = app_state.app_config().profiles.len(),
|
|
"starting desktop demo application"
|
|
);
|
|
let tracing_builder = tauri_plugin_tracing::Builder::new();
|
|
let mut builder = tauri::Builder::default();
|
|
builder = builder.manage(app_state);
|
|
builder = builder.invoke_handler(tauri::generate_handler![
|
|
splash_frontend_ready,
|
|
emit_frontend_log,
|
|
load_project_readme,
|
|
open_demo_config_window,
|
|
load_demo_config,
|
|
open_demo_wallet_window,
|
|
demo_wallet_inventory,
|
|
demo_wallet_select_execution_wallet,
|
|
demo_wallet_create_native,
|
|
demo_wallet_inspect_transfer_file,
|
|
demo_wallet_import_file,
|
|
demo_wallet_export_file,
|
|
demo_wallet_balance,
|
|
demo_wallet_inspect_file,
|
|
demo_wallet_rpc_execute,
|
|
open_demo_http_window,
|
|
demo_http_list_pool_clients,
|
|
demo_http_options,
|
|
demo_http_execute_request,
|
|
open_demo_ws_window,
|
|
demo_ws_list_pool_clients,
|
|
demo_ws_options,
|
|
demo_ws_status,
|
|
demo_ws_connect,
|
|
demo_ws_unsubscribe,
|
|
demo_ws_disconnect,
|
|
open_demo_backfill_window,
|
|
demo_backfill_cancel,
|
|
demo_backfill_options,
|
|
demo_backfill_execute,
|
|
open_demo_core_extraction_window,
|
|
demo_core_extraction_options,
|
|
demo_core_extraction_execute,
|
|
demo_core_extraction_cancel,
|
|
open_demo_decode_replay_window,
|
|
demo_decode_replay_options,
|
|
demo_decode_replay_execute,
|
|
demo_decode_replay_cancel,
|
|
demo_decode_replay_diagnostics,
|
|
demo_decode_replay_annotations,
|
|
open_demo_store_diag_window,
|
|
load_demo_store_diag,
|
|
open_demo_store_raw_window,
|
|
load_demo_store_raw,
|
|
open_demo_store_core_window,
|
|
load_demo_store_core,
|
|
open_demo_store_replay_candidates_window,
|
|
export_demo_store_replay_csv,
|
|
demo_store_replay_options,
|
|
load_demo_store_replay_transactions,
|
|
load_demo_store_replay_programs,
|
|
load_demo_store_replay_entities,
|
|
open_demo_execution_solana_core_window,
|
|
demo_execution_devnet_prepare_profile,
|
|
demo_execution_solana_core_options,
|
|
demo_execution_solana_core_generate_recipient,
|
|
demo_execution_solana_core_execute,
|
|
demo_execution_spl_memo_execute,
|
|
demo_execution_solana_core_cancel,
|
|
demo_execution_spl_validation_scenarios,
|
|
open_demo_execution_spl_window,
|
|
demo_execution_spl_token_execute,
|
|
demo_spl_token_journal,
|
|
demo_spl_ata_derive,
|
|
demo_execution_spl_ata_execute,
|
|
demo_spl_ata_journal,
|
|
demo_execution_spl_token_2022_execute,
|
|
demo_spl_token_2022_fixture,
|
|
open_demo_execution_metadata_window,
|
|
demo_execution_metadata_metaplex_token_metadata_scenarios,
|
|
demo_execution_metadata_metaplex_campaigns,
|
|
demo_execution_metadata_metaplex_execute_campaign,
|
|
demo_execution_metadata_options,
|
|
demo_execution_metadata_metaplex_token_metadata_current_operations,
|
|
demo_execution_metadata_metaplex_token_metadata_operation_template,
|
|
demo_execution_metadata_metaplex_token_metadata_prepare_create_fixture,
|
|
demo_execution_metadata_metaplex_token_metadata_prepare_step,
|
|
demo_execution_metadata_metaplex_token_metadata_execute,
|
|
demo_execution_metadata_solana_program_scenarios,
|
|
demo_execution_metadata_solana_program_execute_campaign,
|
|
demo_execution_metadata_token_2022_execute_campaign,
|
|
]);
|
|
builder = builder.on_window_event(|window, event| {
|
|
if window.label() != "main" || !matches!(event, tauri::WindowEvent::Destroyed) {
|
|
return;
|
|
}
|
|
let app_handle = window.app_handle().clone();
|
|
tauri::async_runtime::spawn(async move {
|
|
let state = app_handle.state::<crate::AppState>();
|
|
crate::disconnect_demo_ws_app_state(&state, false).await;
|
|
});
|
|
});
|
|
builder = builder.plugin(tracing_builder.build::<tauri::Wry>());
|
|
builder = builder.setup(|app| {
|
|
if app.get_webview_window("splash").is_none() {
|
|
return std::result::Result::Err(std::boxed::Box::new(std::io::Error::new(
|
|
std::io::ErrorKind::NotFound,
|
|
"splash window is missing",
|
|
)));
|
|
}
|
|
if app.get_webview_window("main").is_none() {
|
|
return std::result::Result::Err(std::boxed::Box::new(std::io::Error::new(
|
|
std::io::ErrorKind::NotFound,
|
|
"main window is missing",
|
|
)));
|
|
}
|
|
return std::result::Result::Ok(());
|
|
});
|
|
let run_result = builder.run(tauri::generate_context!());
|
|
return match run_result {
|
|
std::result::Result::Ok(()) => std::result::Result::Ok(()),
|
|
std::result::Result::Err(error) => std::result::Result::Err(ks_core::Error::tauri(
|
|
format!("cannot run desktop demo application: {error:?}"),
|
|
)),
|
|
};
|
|
}
|
|
|
|
fn install_default_rustls_provider() -> ks_core::Result<()> {
|
|
if rustls::crypto::CryptoProvider::get_default().is_some() {
|
|
return std::result::Result::Ok(());
|
|
}
|
|
let provider_result = rustls::crypto::aws_lc_rs::default_provider().install_default();
|
|
return match provider_result {
|
|
std::result::Result::Ok(()) => std::result::Result::Ok(()),
|
|
std::result::Result::Err(error) => std::result::Result::Err(ks_core::Error::invalid_state(
|
|
format!("cannot install default rustls crypto provider: {error:?}"),
|
|
)),
|
|
};
|
|
}
|
|
|
|
fn open_or_focus_demo_window(
|
|
app_handle: tauri::AppHandle,
|
|
label: &str,
|
|
html_path: &str,
|
|
title: &str,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
tracing::info!(target: crate::TRACING_TARGET, action = "open_window", window = label, "open demo window");
|
|
if let std::option::Option::Some(window) = app_handle.get_webview_window(label) {
|
|
if let std::result::Result::Err(error) = window.show() {
|
|
return std::result::Result::Err(
|
|
ks_core::Error::tauri(format!("cannot show {label} window: {error}")).to_string(),
|
|
);
|
|
}
|
|
if let std::result::Result::Err(error) = window.set_focus() {
|
|
return std::result::Result::Err(
|
|
ks_core::Error::tauri(format!("cannot focus {label} window: {error}")).to_string(),
|
|
);
|
|
}
|
|
return std::result::Result::Ok(());
|
|
}
|
|
let build_result = tauri::WebviewWindowBuilder::new(
|
|
&app_handle,
|
|
label,
|
|
tauri::WebviewUrl::App(html_path.into()),
|
|
)
|
|
.title(title)
|
|
.inner_size(1500.0, 960.0)
|
|
.min_inner_size(1024.0, 768.0)
|
|
.resizable(true)
|
|
.visible(true)
|
|
.build();
|
|
return match build_result {
|
|
std::result::Result::Ok(window) => match window.set_focus() {
|
|
std::result::Result::Ok(()) => std::result::Result::Ok(()),
|
|
std::result::Result::Err(error) => std::result::Result::Err(
|
|
ks_core::Error::tauri(format!("cannot focus created {label} window: {error}"))
|
|
.to_string(),
|
|
),
|
|
},
|
|
std::result::Result::Err(error) => std::result::Result::Err(
|
|
ks_core::Error::tauri(format!("cannot create {label} window: {error}")).to_string(),
|
|
),
|
|
};
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn emit_frontend_log(payload: crate::FrontendLogPayload) {
|
|
return crate::emit_frontend_log(payload);
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn splash_frontend_ready(
|
|
app: tauri::AppHandle,
|
|
window: tauri::WebviewWindow,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return crate::splash_frontend_ready(app, window, &state).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn load_project_readme() -> std::result::Result<std::string::String, std::string::String> {
|
|
return match crate::load_project_readme() {
|
|
std::result::Result::Ok(readme) => std::result::Result::Ok(readme),
|
|
std::result::Result::Err(error) => std::result::Result::Err(error.to_string()),
|
|
};
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn open_demo_config_window(
|
|
app_handle: tauri::AppHandle,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return open_or_focus_demo_window(
|
|
app_handle,
|
|
"demo_config",
|
|
"demo_config.html",
|
|
"Configuration",
|
|
);
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn load_demo_config(state: tauri::State<'_, crate::AppState>) -> crate::DemoConfigPayload {
|
|
return crate::demo_config_payload(state.inner());
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn open_demo_wallet_window(
|
|
app_handle: tauri::AppHandle,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return open_or_focus_demo_window(app_handle, "demo_wallet", "demo_wallet.html", "Wallets");
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_wallet_inventory(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> std::result::Result<crate::DemoWalletInventoryPayload, std::string::String> {
|
|
return crate::demo_wallet_inventory(state.inner()).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_wallet_select_execution_wallet(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoWalletExecutionSelectionRequest,
|
|
) -> std::result::Result<crate::DemoWalletInventoryPayload, std::string::String> {
|
|
return crate::demo_wallet_select_execution_wallet(state.inner(), request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_wallet_create_native(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoWalletCreateRequest,
|
|
) -> std::result::Result<crate::DemoWalletIdentityPayload, std::string::String> {
|
|
return crate::demo_wallet_create_native(state.inner(), request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_wallet_inspect_transfer_file(
|
|
request: crate::DemoWalletTransferInspectionRequest,
|
|
) -> std::result::Result<crate::DemoWalletTransferInspectionPayload, std::string::String> {
|
|
return crate::demo_wallet_inspect_transfer_file(request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_wallet_import_file(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoWalletImportRequest,
|
|
) -> std::result::Result<crate::DemoWalletIdentityPayload, std::string::String> {
|
|
return crate::demo_wallet_import_file(state.inner(), request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_wallet_export_file(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoWalletExportRequest,
|
|
) -> std::result::Result<std::string::String, std::string::String> {
|
|
return crate::demo_wallet_export_file(state.inner(), request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_wallet_balance(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
profile: std::string::String,
|
|
address: std::string::String,
|
|
) -> std::result::Result<crate::DemoWalletBalancePayload, std::string::String> {
|
|
return crate::demo_wallet_balance(state.inner(), profile, address).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_wallet_inspect_file(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
path: std::string::String,
|
|
) -> std::result::Result<crate::DemoWalletIdentityPayload, std::string::String> {
|
|
return crate::demo_wallet_inspect_file(state.inner(), path).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_wallet_rpc_execute(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoWalletRpcRequest,
|
|
) -> std::result::Result<crate::DemoWalletRpcExecutionPayload, std::string::String> {
|
|
return crate::demo_wallet_rpc_execute(state.inner(), request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn open_demo_backfill_window(
|
|
app_handle: tauri::AppHandle,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return open_or_focus_demo_window(
|
|
app_handle,
|
|
"demo_backfill",
|
|
"demo_backfill.html",
|
|
"Backfill HTTP",
|
|
);
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn open_demo_http_window(
|
|
app_handle: tauri::AppHandle,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return open_or_focus_demo_window(app_handle, "demo_http", "demo_http.html", "HTTP JSON-RPC");
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_http_list_pool_clients(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> std::vec::Vec<crate::DemoHttpEndpointPayload> {
|
|
return crate::demo_http_list_pool_clients(state);
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_http_options(state: tauri::State<'_, crate::AppState>) -> crate::DemoHttpOptionsPayload {
|
|
return crate::demo_http_options(state);
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_http_execute_request(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoHttpRequest,
|
|
) -> std::result::Result<crate::DemoHttpExecutionPayload, std::string::String> {
|
|
return crate::demo_http_execute_request(state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn open_demo_ws_window(
|
|
app_handle: tauri::AppHandle,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return open_or_focus_demo_window(app_handle, "demo_ws", "demo_ws.html", "WebSocket standard");
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_ws_list_pool_clients(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> std::result::Result<std::vec::Vec<crate::DemoWsEndpointPayload>, std::string::String> {
|
|
return crate::demo_ws_list_pool_clients(state);
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_ws_options(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> std::result::Result<crate::DemoWsOptionsPayload, std::string::String> {
|
|
return crate::demo_ws_options(state);
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_ws_status(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> std::result::Result<crate::DemoWsStatusPayload, std::string::String> {
|
|
return crate::demo_ws_status(state.inner()).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_ws_connect(
|
|
app_handle: tauri::AppHandle,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoWsRequest,
|
|
) -> std::result::Result<crate::DemoWsExecutionPayload, std::string::String> {
|
|
return crate::demo_ws_connect(app_handle, state.inner(), request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_ws_unsubscribe(
|
|
app_handle: tauri::AppHandle,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoWsUnsubscribeRequest,
|
|
) -> std::result::Result<crate::DemoWsStatusPayload, std::string::String> {
|
|
return crate::demo_ws_unsubscribe(app_handle, state.inner(), request.subscription_id).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_ws_disconnect(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> std::result::Result<crate::DemoWsStatusPayload, std::string::String> {
|
|
return crate::demo_ws_disconnect(state.inner()).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_backfill_options(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> crate::DemoBackfillOptionsPayload {
|
|
return crate::demo_backfill_options(state);
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_backfill_execute(
|
|
app_handle: tauri::AppHandle,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoBackfillRequest,
|
|
) -> std::result::Result<crate::DemoBackfillSummaryPayload, std::string::String> {
|
|
return crate::demo_backfill_execute(app_handle, state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_backfill_cancel(state: tauri::State<'_, crate::AppState>) -> bool {
|
|
return crate::demo_backfill_cancel(state);
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn open_demo_core_extraction_window(
|
|
app_handle: tauri::AppHandle,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return open_or_focus_demo_window(
|
|
app_handle,
|
|
"demo_core_extraction",
|
|
"demo_core_extraction.html",
|
|
"Extraction canonical vers core",
|
|
);
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_core_extraction_options(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> crate::DemoCoreExtractionOptionsPayload {
|
|
return crate::demo_core_extraction_options_payload(&state);
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_core_extraction_execute(
|
|
app_handle: tauri::AppHandle,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoCoreExtractionRequest,
|
|
) -> std::result::Result<crate::DemoCoreExtractionSummaryPayload, std::string::String> {
|
|
return crate::demo_core_extraction_execute(app_handle, &state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_core_extraction_cancel(state: tauri::State<'_, crate::AppState>) -> bool {
|
|
return crate::demo_core_extraction_cancel(&state);
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn open_demo_decode_replay_window(
|
|
app_handle: tauri::AppHandle,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return open_or_focus_demo_window(
|
|
app_handle,
|
|
"demo_decode_replay",
|
|
"demo_decode_replay.html",
|
|
"Décodage et matérialisation",
|
|
);
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_decode_replay_options(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> crate::DemoDecodeReplayOptionsPayload {
|
|
return crate::demo_decode_replay_options(state);
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_decode_replay_execute(
|
|
app_handle: tauri::AppHandle,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoDecodeReplayRequest,
|
|
) -> std::result::Result<crate::DemoDecodeReplaySummaryPayload, std::string::String> {
|
|
return crate::demo_decode_replay_execute(app_handle, state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_decode_replay_cancel(state: tauri::State<'_, crate::AppState>) -> bool {
|
|
return crate::demo_decode_replay_cancel(state);
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_decode_replay_diagnostics(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> std::result::Result<crate::DemoDecodeDiagnosticsPayload, std::string::String> {
|
|
return crate::demo_decode_replay_diagnostics(state).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_decode_replay_annotations(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoTransactionAnnotationRequest,
|
|
) -> std::result::Result<std::vec::Vec<crate::DemoTransactionAnnotationRow>, std::string::String> {
|
|
return crate::demo_decode_replay_annotations(state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn open_demo_store_diag_window(
|
|
app_handle: tauri::AppHandle,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return open_or_focus_demo_window(
|
|
app_handle,
|
|
"demo_store_diag",
|
|
"demo_store_diag.html",
|
|
"Store diagnostics",
|
|
);
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn load_demo_store_diag(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> std::result::Result<crate::DemoStoreDiagPayload, std::string::String> {
|
|
return crate::load_demo_store_diag(state).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn open_demo_store_raw_window(
|
|
app_handle: tauri::AppHandle,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return open_or_focus_demo_window(
|
|
app_handle,
|
|
"demo_store_raw",
|
|
"demo_store_raw.html",
|
|
"Raw store",
|
|
);
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn load_demo_store_raw(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> std::result::Result<crate::DemoStoreRawPayload, std::string::String> {
|
|
return crate::load_demo_store_raw(state).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn open_demo_store_core_window(
|
|
app_handle: tauri::AppHandle,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return open_or_focus_demo_window(
|
|
app_handle,
|
|
"demo_store_core",
|
|
"demo_store_core.html",
|
|
"Core store",
|
|
);
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn load_demo_store_core(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> std::result::Result<crate::DemoStoreCorePayload, std::string::String> {
|
|
return crate::load_demo_store_core(state).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn open_demo_store_replay_candidates_window(
|
|
app_handle: tauri::AppHandle,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return open_or_focus_demo_window(
|
|
app_handle,
|
|
"demo_store_replay_candidates",
|
|
"demo_store_replay_candidates.html",
|
|
"Store replay candidates",
|
|
);
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn export_demo_store_replay_csv(
|
|
file_name: std::string::String,
|
|
content: std::string::String,
|
|
) -> std::result::Result<std::string::String, std::string::String> {
|
|
return crate::export_demo_store_replay_csv(file_name, content).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_store_replay_options(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> std::result::Result<crate::DemoStoreReplayOptionsPayload, std::string::String> {
|
|
return crate::demo_store_replay_options(state).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn load_demo_store_replay_transactions(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoStoreReplayTransactionRequest,
|
|
) -> std::result::Result<std::vec::Vec<crate::DemoStoreReplayTransactionRow>, std::string::String> {
|
|
return crate::load_demo_store_replay_transactions(state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn load_demo_store_replay_programs(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoStoreReplayProgramRequest,
|
|
) -> std::result::Result<std::vec::Vec<crate::DemoStoreReplayProgramRow>, std::string::String> {
|
|
return crate::load_demo_store_replay_programs(state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn load_demo_store_replay_entities(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoStoreReplayEntityRequest,
|
|
) -> std::result::Result<std::vec::Vec<crate::DemoStoreReplayEntityRow>, std::string::String> {
|
|
return crate::load_demo_store_replay_entities(state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn open_demo_execution_solana_core_window(
|
|
app_handle: tauri::AppHandle,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return open_or_focus_demo_window(
|
|
app_handle,
|
|
"demo_execution_solana_core",
|
|
"demo_execution_solana_core.html",
|
|
"Exécution Solana Devnet",
|
|
);
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_execution_devnet_prepare_profile(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
profile_name: std::string::String,
|
|
) -> std::result::Result<crate::DemoExecutionDevnetStoreReadinessPayload, std::string::String> {
|
|
return crate::demo_execution_devnet_prepare_profile(state, profile_name).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_execution_solana_core_options(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> crate::DemoExecutionSolanaCoreOptionsPayload {
|
|
return crate::demo_execution_solana_core_options(state);
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_execution_solana_core_generate_recipient()
|
|
-> std::result::Result<crate::DemoExecutionSolanaCoreGeneratedRecipientPayload, std::string::String>
|
|
{
|
|
return crate::demo_execution_solana_core_generate_recipient();
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_execution_solana_core_execute(
|
|
app_handle: tauri::AppHandle,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoExecutionSolanaCoreRequest,
|
|
) -> std::result::Result<crate::DemoExecutionSolanaCoreSummaryPayload, std::string::String> {
|
|
return crate::demo_execution_solana_core_execute(app_handle, state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_execution_spl_memo_execute(
|
|
app_handle: tauri::AppHandle,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoExecutionMemoRequest,
|
|
) -> std::result::Result<crate::DemoExecutionMemoSummaryPayload, std::string::String> {
|
|
return crate::demo_execution_spl_memo_execute(app_handle, state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_execution_solana_core_cancel(state: tauri::State<'_, crate::AppState>) -> bool {
|
|
return crate::demo_execution_solana_core_cancel(state);
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_execution_spl_validation_scenarios()
|
|
-> std::vec::Vec<crate::DevnetSplValidationScenarioPayload> {
|
|
return crate::demo_execution_spl_validation_scenarios();
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn open_demo_execution_spl_window(
|
|
app_handle: tauri::AppHandle,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return open_or_focus_demo_window(
|
|
app_handle,
|
|
"demo_execution_spl",
|
|
"demo_execution_spl.html",
|
|
"Exécution SPL Devnet",
|
|
);
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn open_demo_execution_metadata_window(
|
|
app_handle: tauri::AppHandle,
|
|
) -> std::result::Result<(), std::string::String> {
|
|
return open_or_focus_demo_window(
|
|
app_handle,
|
|
"demo_execution_metadata",
|
|
"demo_execution_metadata.html",
|
|
"Exécution Metadata Devnet",
|
|
);
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_execution_metadata_options(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
) -> crate::DemoExecutionSolanaCoreOptionsPayload {
|
|
return crate::demo_execution_metadata_options(state);
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_execution_metadata_metaplex_token_metadata_scenarios() -> std::result::Result<
|
|
std::vec::Vec<crate::DemoExecutionMetadataMetaplexTokenMetadataScenarioPayload>,
|
|
std::string::String,
|
|
> {
|
|
return crate::demo_execution_metadata_metaplex_token_metadata_scenarios();
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_execution_metadata_metaplex_campaigns()
|
|
-> std::vec::Vec<crate::DemoExecutionMetadataMetaplexCampaignOptionPayload> {
|
|
return crate::demo_execution_metadata_metaplex_campaigns();
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_execution_metadata_metaplex_execute_campaign(
|
|
app_handle: tauri::AppHandle,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoExecutionMetadataMetaplexCampaignRequest,
|
|
) -> std::result::Result<
|
|
crate::DemoExecutionMetadataMetaplexCampaignSummaryPayload,
|
|
std::string::String,
|
|
> {
|
|
return crate::demo_execution_metadata_metaplex_execute_campaign(app_handle, state, request)
|
|
.await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_execution_metadata_metaplex_token_metadata_current_operations()
|
|
-> std::vec::Vec<std::string::String> {
|
|
return crate::demo_execution_metadata_metaplex_token_metadata_current_operations();
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_execution_metadata_metaplex_token_metadata_operation_template(
|
|
operation: std::string::String,
|
|
) -> std::result::Result<std::string::String, std::string::String> {
|
|
return crate::demo_execution_metadata_metaplex_token_metadata_operation_template(operation);
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_execution_metadata_metaplex_token_metadata_prepare_create_fixture(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
profile_name: std::string::String,
|
|
) -> std::result::Result<
|
|
crate::DemoExecutionMetadataMetaplexTokenMetadataCreateFixturePayload,
|
|
std::string::String,
|
|
> {
|
|
return crate::demo_execution_metadata_metaplex_token_metadata_prepare_create_fixture(
|
|
state,
|
|
profile_name,
|
|
)
|
|
.await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_execution_metadata_metaplex_token_metadata_prepare_step(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
profile_name: std::string::String,
|
|
scenario_id: std::string::String,
|
|
step_index: usize,
|
|
previous_operation_json: std::option::Option<std::string::String>,
|
|
) -> std::result::Result<
|
|
crate::DemoExecutionMetadataMetaplexTokenMetadataPreparedStepPayload,
|
|
std::string::String,
|
|
> {
|
|
return crate::demo_execution_metadata_metaplex_token_metadata_prepare_step(
|
|
state,
|
|
profile_name,
|
|
scenario_id,
|
|
step_index,
|
|
previous_operation_json,
|
|
)
|
|
.await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_execution_metadata_metaplex_token_metadata_execute(
|
|
app_handle: tauri::AppHandle,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoExecutionMetadataMetaplexTokenMetadataRequest,
|
|
) -> std::result::Result<
|
|
crate::DemoExecutionMetadataMetaplexTokenMetadataSummaryPayload,
|
|
std::string::String,
|
|
> {
|
|
return crate::demo_execution_metadata_metaplex_token_metadata_execute(
|
|
app_handle, state, request,
|
|
)
|
|
.await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_execution_metadata_solana_program_scenarios()
|
|
-> std::vec::Vec<crate::DemoExecutionMetadataSolanaProgramScenarioPayload> {
|
|
return crate::demo_execution_metadata_solana_program_scenarios();
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_execution_metadata_solana_program_execute_campaign(
|
|
app_handle: tauri::AppHandle,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoExecutionMetadataSolanaProgramCampaignRequest,
|
|
) -> std::result::Result<
|
|
crate::DemoExecutionMetadataSolanaProgramCampaignSummaryPayload,
|
|
std::string::String,
|
|
> {
|
|
return crate::demo_execution_metadata_solana_program_execute_campaign(
|
|
app_handle, state, request,
|
|
)
|
|
.await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_execution_metadata_token_2022_execute_campaign(
|
|
app_handle: tauri::AppHandle,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoExecutionMetadataToken2022CampaignRequest,
|
|
) -> std::result::Result<
|
|
crate::DemoExecutionMetadataToken2022CampaignSummaryPayload,
|
|
std::string::String,
|
|
> {
|
|
return crate::demo_execution_metadata_token_2022_execute_campaign(app_handle, state, request)
|
|
.await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_execution_spl_token_execute(
|
|
app_handle: tauri::AppHandle,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoExecutionSplTokenRequest,
|
|
) -> std::result::Result<crate::DemoExecutionSplTokenSummaryPayload, std::string::String> {
|
|
return crate::demo_execution_spl_token_execute(app_handle, state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_spl_token_journal(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoSplTokenJournalRequest,
|
|
) -> std::result::Result<std::vec::Vec<crate::DemoSplTokenJournalRow>, std::string::String> {
|
|
return crate::demo_spl_token_journal(state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_spl_ata_derive(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoSplAtaDerivationRequest,
|
|
) -> std::result::Result<crate::DemoSplAtaDerivationPayload, std::string::String> {
|
|
return crate::demo_spl_ata_derive(state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_execution_spl_ata_execute(
|
|
app_handle: tauri::AppHandle,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoExecutionSplAtaRequest,
|
|
) -> std::result::Result<crate::DemoExecutionSplAtaSummaryPayload, std::string::String> {
|
|
return crate::demo_execution_spl_ata_execute(app_handle, state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_spl_ata_journal(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoSplAtaJournalRequest,
|
|
) -> std::result::Result<std::vec::Vec<crate::DemoSplAtaJournalRow>, std::string::String> {
|
|
return crate::demo_spl_ata_journal(state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
async fn demo_execution_spl_token_2022_execute(
|
|
app_handle: tauri::AppHandle,
|
|
state: tauri::State<'_, crate::AppState>,
|
|
request: crate::DemoExecutionSplToken2022Request,
|
|
) -> std::result::Result<crate::DemoExecutionSplToken2022SummaryPayload, std::string::String> {
|
|
return crate::demo_execution_spl_token_2022_execute(app_handle, state, request).await;
|
|
}
|
|
|
|
#[tauri::command]
|
|
fn demo_spl_token_2022_fixture(
|
|
state: tauri::State<'_, crate::AppState>,
|
|
profile_name: std::string::String,
|
|
) -> std::result::Result<crate::DemoSplToken2022FixturePayload, std::string::String> {
|
|
return crate::demo_spl_token_2022_fixture(state, profile_name);
|
|
}
|