use js_sys::{Array, Object, Uint8Array};
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen(extends = Object)]
#[derive(Clone, Debug)]
pub type Wallet;
#[wasm_bindgen(method, getter)]
pub fn version(this: &Wallet) -> String;
#[wasm_bindgen(method, getter)]
pub fn name(this: &Wallet) -> String;
#[wasm_bindgen(method, getter)]
pub fn icon(this: &Wallet) -> String;
#[wasm_bindgen(method, getter)]
pub fn chains(this: &Wallet) -> Array;
#[wasm_bindgen(method, getter)]
pub fn accounts(this: &Wallet) -> Array;
#[wasm_bindgen(method, getter)]
pub fn features(this: &Wallet) -> Object;
#[wasm_bindgen(extends = Object)]
#[derive(Clone, Debug)]
pub type WalletAccount;
#[wasm_bindgen(method, getter)]
pub fn address(this: &WalletAccount) -> String;
#[wasm_bindgen(method, getter, js_name = publicKey)]
pub fn public_key(this: &WalletAccount) -> Uint8Array;
#[wasm_bindgen(method, getter)]
pub fn chains(this: &WalletAccount) -> Array;
#[wasm_bindgen(method, getter)]
pub fn features(this: &WalletAccount) -> Array;
}
pub const CHAIN_MAINNET: &str = "solana:mainnet";
pub const CHAIN_DEVNET: &str = "solana:devnet";
pub const CHAIN_TESTNET: &str = "solana:testnet";
pub const CHAIN_LOCALNET: &str = "solana:localnet";
pub const FEATURE_CONNECT: &str = "standard:connect";
pub const FEATURE_DISCONNECT: &str = "standard:disconnect";
pub const FEATURE_EVENTS: &str = "standard:events";
pub const FEATURE_SIGN_MESSAGE: &str = "solana:signMessage";
pub const FEATURE_SIGN_TRANSACTION: &str = "solana:signTransaction";
pub const FEATURE_SIGN_AND_SEND_TRANSACTION: &str = "solana:signAndSendTransaction";
pub const FEATURE_SIGN_IN: &str = "solana:signIn";
impl Wallet {
pub fn supports_solana(&self) -> bool {
self.chains()
.iter()
.filter_map(|v| v.as_string())
.any(|s| s.starts_with("solana:"))
}
}