Security News
Weekly Downloads Now Available in npm Package Search Results
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
@svelte-on-solana/wallet-adapter-ui
Advanced tools
Pre-built components for integrating with Solana wallets using Svelte
@svelte-on-solana/wallet-adapter-ui
Pre-built components for integrating with Solana wallets using Svelte
The UI components need to be installed into a project that is already set up with @solana/web3.js
and the base wallet adapters. Therefore, it cannot work standalone.
During this process, you will:
ConnectionProvider
(AnchorConnectionProvider
if you're using Anchor)WalletProvider
componentWalletMultiButton
componentYou have already installed the core package to run the wallet Svelte Store @svelte-on-solana/wallet-adapter-core. Then install the UI components contained in this package
npm i @svelte-on-solana/wallet-adapter-ui
There are three components that you need to get set up:
WalletProvider
ConnectionProvider
([AnchorConnectionProvider](https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/anchor/README.md)
if you're using Anchor)WalletMultiButton
WalletProvider
is a component used to initialize the wallet stores and add event listeners
prop | type | default |
---|---|---|
localStorageKey? | string | 'walletAdapter' |
wallets | Wallets[] | |
autoConnect? | boolean | false |
ConnectionProvider
is a component used to establish a connection with the network.
prop | type | default |
---|---|---|
network | string |
Alternatively you can use AnchorConnectionProvider
for Anchor Dapps.
prop | type | default |
---|---|---|
network | string | |
idl | Idl |
WalletMultiButton
is a component used as the entry point to connect/disconnect a wallet.
prop | type | default |
---|---|---|
maxNumberOfWallets | number | 3 |
First you need to install some additional packages to make the Torus implementation compatible with SvelteKit.
npm install -D @esbuild-plugins/node-globals-polyfill @rollup/plugin-inject rollup-plugin-node-polyfills
Then you have to adjust the vite.config.js file to prepare the project for all the Solana packages previously installed.
import { sveltekit } from '@sveltejs/kit/vite'
const config = {
plugins: [sveltekit()],
optimizeDeps: {
include: ['@solana/web3.js', 'buffer'],
esbuildOptions: {
target: 'esnext',
plugins: [NodeGlobalsPolyfillPlugin({ buffer: true })],
},
},
resolve: {
alias: {
$utils: path.resolve('src/utils/'),
stream: 'rollup-plugin-node-polyfills/polyfills/stream',
},
},
define: {
'process.env.BROWSER': true,
'process.env.NODE_DEBUG': JSON.stringify(''),
},
build: {
target: 'esnext',
commonjsOptions: {
transformMixedEsModules: true
},
rollupOptions: {
plugins: [inject({ Buffer: ['buffer', 'Buffer'] }), nodePolyfills({ crypto: true })],
},
}
}
export default config
And then in the __layout.svelte component you can import the wallets and setup the UI components.
<script lang="ts">
import { onMount } from 'svelte';
import { clusterApiUrl } from '@solana/web3.js';
import {
workSpace,
WalletProvider,
WalletMultiButton,
ConnectionProvider
} from '@svelte-on-solana/wallet-adapter-ui';
const localStorageKey = 'walletAdapter';
const network = clusterApiUrl('devnet'); // localhost or mainnet
let wallets;
onMount(async () => {
const {
PhantomWalletAdapter,
SlopeWalletAdapter,
SolflareWalletAdapter,
SolletExtensionWalletAdapter,
TorusWalletAdapter,
} = await import('@solana/wallet-adapter-wallets');
const walletsMap = [
new PhantomWalletAdapter(),
new SlopeWalletAdapter(),
new SolflareWalletAdapter(),
new SolletExtensionWalletAdapter(),
new TorusWalletAdapter(),
];
wallets = walletsMap;
});
</script>
<WalletProvider {localStorageKey} {wallets} autoConnect />
<ConnectionProvider {network} />
<div>
<slot />
</div>
<WalletMultiButton />
You have to adjust some stuff in the configuration in your project.
Enable JSON module resolving in
app/tsconfig.json
{
"extends": "@tsconfig/svelte/tsconfig.json",
"compilerOptions": {
"resolveJsonModule": true
},
"include": ["src/**/*"],
"exclude": ["node_modules/*", "__sapper__/*", "public/*"]
}
Install a few plugins to take care about JSON imports and built-on Node.js modules not available in the browser.
npm install -D @rollup/plugin-json rollup-plugin-node-builtins rollup-plugin-node-globals
Adjust
rollup.config.js
to import those plugins
// ... other imports
import json from '@rollup/plugin-json';
import builtins from 'rollup-plugin-node-builtins';
import globals from 'rollup-plugin-node-globals';
export default {
// ... other configs
plugins: [
// ... other rollup plugins
resolve({
browser: true,
dedupe: ['svelte'],
preferBuiltins: false
}),
// ... more rollup plugins
json(),
globals(),
builtins()
]
};
Then in
App.svelte
or the entry point of your SPA, you can setup the wallet and components like this.
<script lang="ts">
import { walletStore } from '@svelte-on-solana/wallet-adapter-core';
import {
workSpace,
WalletProvider,
WalletMultiButton,
ConnectionProvider
} from '@svelte-on-solana/wallet-adapter-ui';
import { clusterApiUrl } from '@solana/web3.js';
import { PhantomWalletAdapter, SolflareWalletAdapter } from '@solana/wallet-adapter-wallets';
const localStorageKey = 'walletAdapter';
const network = clusterApiUrl('devnet'); // localhost or mainnet
let wallets = [new PhantomWalletAdapter(), new SolflareWalletAdapter()];
</script>
<WalletProvider {localStorageKey} {wallets} autoConnect />
<ConnectionProvider {network} />
<WalletMultiButton />
{#if $walletStore?.connected}
<div>My wallet is connected</div>
{/if}
If you work with Anchor you will need the AnchorConnectionProvider
component and its workSpace @svelte-on-solana/wallet-adapter-anchor
See example implementations of the @svelte-on-solana/wallet-adapter-ui
library.
FAQs
Pre-built components for integrating with Solana wallets using Svelte
We found that @svelte-on-solana/wallet-adapter-ui demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
Security News
A Stanford study reveals 9.5% of engineers contribute almost nothing, costing tech $90B annually, with remote work fueling the rise of "ghost engineers."
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.