npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@solana-mobile/wallet-adapter-mobile

v2.1.4

Published

An adapter for mobile wallet apps that conform to the Solana Mobile Wallet Adapter protocol

Downloads

218,746

Readme

@solana-mobile/wallet-adapter-mobile

This is a plugin for use with @solana/wallet-adapter. It enables apps to use a native wallet app on a mobile device to sign messages and transactions, and to send transactions if the wallet offers support for sending transactions.

Usage

Users of these libraries do not need to take any extra steps:

  • @solana/wallet-adapter-react@">=0.15.21"

Those libraries automatically bundle the Mobile Wallet Adapter plugin, and enable it when running in a compatible mobile environment.

Advanced usage

Developers might wish to customize the behavior of this plugin for their app. Specifying the app's name and icon, deciding which address to select in the event the wallet authorizes the app to use more than one, specifying which network cluster to communicate with, and more are made possible by creating an instance of the mobile wallet adapter like this.

new SolanaMobileWalletAdapter({
    addressSelector: createDefaultAddressSelector(),
    appIdentity: {
        name: 'My app',
        uri: 'https://myapp.io',
        icon: 'relative/path/to/icon.png',
    },
    authorizationResultCache: createDefaultAuthorizationResultCache(),
    cluster: WalletAdapterNetwork.Devnet,
    onWalletNotFound: createDefaultWalletNotFoundHandler(),
});

Developers who use @solana/wallet-adapter-react@">=0.15.21" can supply this custom instance to WalletProvider which will use it to override the default one.

const wallets = useMemo(
    () => [
        new SolanaMobileWalletAdapter({
            addressSelector: createDefaultAddressSelector(),
            appIdentity: {
                name: 'My app',
                uri: 'https://myapp.io',
                icon: 'relative/path/to/icon.png',
            },
            authorizationResultCache: createDefaultAuthorizationResultCache(),
            cluster: WalletAdapterNetwork.Devnet,
            onWalletNotFound: createDefaultWalletNotFoundHandler(),
        }),
    ],
    [],
);

return (
    <ConnectionProvider endpoint={clusterApiUrl(WalletAdapterNetwork.Devnet)}>
        <WalletProvider wallets={wallets}>
            <MyApp />
        </WalletProvider>
    </ConnectionProvider>
)

For more information about how to use wallet adapter plugins, visit https://github.com/solana-labs/wallet-adapter

Configuration

App identity

The AppIdentity config identifies your app to a native mobile wallet. When someone connects to a wallet for the first time, the wallet may present this information in the on-screen prompt where the ask if the visitor would like to authorize your app for use with their account.

  • name – The plain-language name of your application.
  • uri – The uri of your application. This uri may be required to participate in dApp identity verification as part of the mobile wallet adapter protocol specification.
  • icon – An icon file path, relative to the uri.

Address selector

The Mobile Wallet Adapter specification allows a wallet to authorize a dApp to use one or more addresses. dApps must supply code to select a single address for use in the adapter. That code must conform to the AddressSelector interface.

export interface AddressSelector {
    select(addresses: Base64EncodedAddress[]): Promise<Base64EncodedAddress>;
}

Alternatively, you can use the included createDefaultAddressSelector() method to create a selector that always chooses the first address in the list.

Authorization result cache

The first time that someone authorizes a native wallet app for use with your application, you should cache that authorization for future use. You can supply your own implementation that conforms to the AuthorizationResultCache interface.

export interface AuthorizationResultCache {
    clear(): Promise<void>;
    get(): Promise<AuthorizationResult | undefined>;
    set(authorizationResult: AuthorizationResult): Promise<void>;
}

Alternatively, you can use the included createDefaultAuthorizationResultCache() method to create a cache that reads and writes the adapter's last-obtained AuthorizationResult to your browser's local storage, if available.

Cluster

Each authorization a dApp makes with a wallet is tied to a particular Solana cluster. If a dApp wants to change the cluster on which to transact, it must seek an authorization for that cluster.

Wallet-not-found handler

When you call connect() but no wallet responds within a reasonable amount of time, it is presumed that no compatible wallet is installed. You must supply an onWalletNotFound function to handle this case.

Alternatively, you can use the included createDefaultWalletNotFoundHandler() method to create a function that opens the Solana Mobile ecosystem wallets webpage.

Android Chrome Browser Issues

Chrome on Android has a policy of blocking all navigation that does not come from explicit user gestures (click, tap, swipe, keypress). As a result, MWA Intent navigation to a wallet app will be blocked if it does not come from a user gesture.

You will see an error like:

Navigation is blocked: solana-wallet:/v1/associate...

There isn't a way around this on the Android Chrome Browser, but you can write a mobile app if you need this behavior.