@xian-tech/provider
v0.3.0
Published
Xian browser wallet provider contract and reference provider
Readme
@xian-tech/provider
This package defines the browser wallet provider surface for Xian and ships a simple in-memory provider plus injected-wallet discovery helpers.
It includes:
request(...)-based provider interface- account and chain event handling
- a reference provider that delegates signing and submission to
@xian-tech/client - browser injection and discovery helpers for
window.xianandwindow.xianProviders - a dapp-facing wrapper around an injected provider
Core helpers:
registerInjectedXianProvider(...): wallet-side registration into the global browser namespacelistInjectedXianProviders(...): enumerate known injected walletsgetInjectedXianProvider(...): resolve the default or matching injected walletwaitForInjectedXianProvider(...): await late wallet injection via thexian#initializedeventInjectedXianWallet: dapp-facing convenience wrapper for connect, chain, wallet info, asset watching, transaction preparation, sign, and send flowsProviderBackedXianSigner: adapter that lets provider-backed wallets fit transaction-signing APIs by delegating canonical payloads throughxian_signTransaction
Current provider request methods include:
xian_getWalletInfoxian_requestAccountsxian_accountsxian_chainIdxian_switchChainxian_watchAssetxian_prepareTransactionxian_signMessagexian_signTransactionxian_sendTransactionxian_sendCall
xian_signMessage signs the version-1 Xian external-message envelope bound to
the active chain and account. It returns the usual 128-character hex signature,
but it never exposes raw provider signing. Verify it with
verifyXianMessage(...) from @xian-tech/client.
It does not own:
- framework bindings
- production wallet custody flows
The reference provider coordinates automatic nonces for concurrent
xian_sendCall requests per provider instance, active chain, and signer. Each
same-scope build/sign/broadcast lifecycle is serialized so CheckTx sees the
contiguous nonce order; different chains remain independent.
Prebuilt xian_sendTransaction payloads bypass that manager. Ambiguous
broadcast failures block further automatic calls until the network nonce
advances; a wallet owner can explicitly call resetNonceReservation() only
after independently reconciling the transaction outcome.
flowchart LR
Wallet["Wallet implementation"] --> Register["registerInjectedXianProvider"]
Register --> Namespace["window.xian and window.xianProviders"]
Dapp["Dapp"] --> Discovery["InjectedXianWallet discovery"]
Discovery --> Namespace
Dapp --> Request["provider.request"]
Request --> Wallet
Wallet --> Client["@xian-tech/client"]