kora_lib/
args.rs

1use crate::log::LoggingFormat;
2use clap::{command, Parser};
3
4// Common arguments shared between CLI and RPC
5#[derive(Debug, Parser)]
6#[command(name = "kora")]
7pub struct CommonArgs {
8    /// RPC URL
9    #[arg(long, env = "RPC_URL", default_value = "http://127.0.0.1:8899")]
10    pub rpc_url: String,
11
12    /// Base58-encoded private key for signing
13    #[arg(long, env = "KORA_PRIVATE_KEY", required_unless_present_any = ["skip_signer", "turnkey_signer", "vault_signer", "privy_signer"])]
14    pub private_key: Option<String>,
15
16    /// Path to kora.toml config file
17    #[arg(long, default_value = "kora.toml")]
18    pub config: String,
19
20    /// Skip loading the signer
21    #[arg(long = "no-load-signer")]
22    pub skip_signer: bool,
23
24    /// Turnkey signer
25    #[arg(long = "with-turnkey-signer")]
26    pub turnkey_signer: bool,
27
28    /// Turnkey API credentials
29    #[arg(long, env = "TURNKEY_API_PUBLIC_KEY")]
30    pub turnkey_api_public_key: Option<String>,
31
32    #[arg(long, env = "TURNKEY_API_PRIVATE_KEY")]
33    pub turnkey_api_private_key: Option<String>,
34
35    #[arg(long, env = "TURNKEY_ORGANIZATION_ID")]
36    pub turnkey_organization_id: Option<String>,
37
38    #[arg(long, env = "TURNKEY_PRIVATE_KEY_ID")]
39    pub turnkey_private_key_id: Option<String>,
40
41    #[arg(long, env = "TURNKEY_PUBLIC_KEY")]
42    pub turnkey_public_key: Option<String>,
43
44    /// Privy API Credentials
45    #[arg(long = "with-privy-signer")]
46    pub privy_signer: bool,
47
48    /// Privy API credentials
49    #[arg(long, env = "PRIVY_APP_ID")]
50    pub privy_app_id: Option<String>,
51
52    #[arg(long, env = "PRIVY_APP_SECRET")]
53    pub privy_app_secret: Option<String>,
54
55    #[arg(long, env = "PRIVY_WALLET_ID")]
56    pub privy_wallet_id: Option<String>,
57
58    #[arg(long)]
59    pub vault_signer: bool,
60
61    #[arg(long, env = "VAULT_ADDR")]
62    pub vault_addr: Option<String>,
63
64    #[arg(long, env = "VAULT_TOKEN")]
65    pub vault_token: Option<String>,
66
67    #[arg(long, env = "VAULT_KEY_NAME")]
68    pub vault_key_name: Option<String>,
69
70    #[arg(long, env = "VAULT_PUBKEY")]
71    pub vault_pubkey: Option<String>,
72}
73
74// RPC-specific arguments
75#[derive(Debug, Parser)]
76pub struct RpcArgs {
77    #[command(flatten)]
78    pub common: CommonArgs,
79
80    /// Port
81    #[arg(short = 'p', long, default_value = "8080")]
82    pub port: Option<u16>,
83
84    /// Logging Format
85    #[arg(long, default_value = "standard")]
86    pub logging_format: LoggingFormat,
87
88    /// Metrics
89    #[arg(long, default_value = None)]
90    pub metrics_endpoint: Option<String>,
91}
92
93// CLI-specific arguments
94#[derive(Debug, Parser)]
95pub struct CliArgs {
96    #[command(flatten)]
97    pub common: CommonArgs,
98}