Security News
Input Validation Vulnerabilities Dominate MITRE's 2024 CWE Top 25 List
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
dose-doce-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](https://github.com/svelte-on-solana/wallet-adapter/blob/master/packages/anchor/README.md)
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
The npm package dose-doce-ui receives a total of 0 weekly downloads. As such, dose-doce-ui popularity was classified as not popular.
We found that dose-doce-ui demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer 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
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.
Research
Security News
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.