OZExternal Signer Manager
Manager for external (non-passkey) signers for multi-signature smart account operations.
OZExternalSignerManager provides a unified interface for managing Stellar account signers that originate from Ed25519 secret keys or external wallet connections (e.g., Freighter, LOBSTR). It supports two methods of adding signers:
Keypair signers (via addFromSecret): Created from a raw Ed25519 secret key. These are held in memory only and are never persisted to storage. The secret key material is accessible only through the in-memory KeyPair instance.
Wallet signers (via addFromWallet): Connected through an ExternalWalletAdapter. Wallet connection metadata (address, wallet ID, wallet name) is persisted to WalletConnectionStorage so that connections can be restored across app launches via restoreConnections.
Thread Safety: All mutable state is protected by a Mutex. Public methods can be safely called from any coroutine context.
Example usage:
val manager = OZExternalSignerManager(
networkPassphrase = "Test SDF Network ; September 2015",
walletAdapter = myWalletAdapter,
walletConnectionStorage = myStorage
)
// Add from secret key (memory-only)
val address = manager.addFromSecret("SCZANGBA5YHT...")
println("Added keypair signer: $address")
// Add from external wallet
val wallet = manager.addFromWallet()
if (wallet != null) {
println("Connected wallet: ${wallet.walletName} (${wallet.address})")
}
// Check signing capability
if (manager.canSignFor("GABC...")) {
val result = manager.signAuthEntry("GABC...", preimageXdr)
println("Signed by: ${result.signerAddress}")
}
// List all signers
val signers = manager.getAll()Constructors
Functions
Adds an Ed25519 keypair signer from a raw secret key.
Connects an external wallet and adds it as a signer.
Checks if any managed signer can sign for the given address.
Lists all managed external signers (both keypair and wallet).
Restores previously connected wallets from storage.
Signs an authorization entry preimage with the appropriate signer for the given address.