@snowflake-so/safe-saber-walletkit
Version:
Snowflake Safe forked version of @saberhq/use-solana package. Used for integration purpose.
125 lines (90 loc) • 3.7 kB
Markdown
Snowflake Safe-integrated version of @saberhq/use-solana
[](https://www.npmjs.com/package/@snowflake-so/safe-saber-walletkit)
```
npm install @snowflake-so/safe-saber-walletkit
yarn add @snowflake-so/safe-saber-walletkit
```
This package is a **forked versio**n of `@saberhq/use-solana` package. The purpose of this is to provide more React hooks and Context API for the use of Snowflake Safe integration. Original source code can be found here: [@saberhq/use-solana](https://github.com/saber-hq/saber-common/tree/d50ce9594e01e1eff4a7c1073915413f9330125f/packages/use-solana)
Tribute to the **Saber** team for an amazing open-sourced project
Solana frontend library and TypeScript SDK. This SDK features:
- React hooks and providers for adding a Solana connection to your app
- Integrations with several popular wallets (full list [here](https://github.com/saber-hq/use-solana/blob/master/packages/use-solana/src/providers.tsx))
- Helpers for fetching token account balances and performing mathematical operations on tokens
### Changelog
#### useConnectedSafeWallet
Extends useConnectedWallet
```tsx
export const useConnectedSafeWallet = () => {
const wallet = useConnectedWallet();
const { safe } = useSafe();
const [returnWallet, setReturnWallet] = useState<ConnectedSafeWallet>();
useEffect(() => {
if (
safe.connected &&
safe.safeInfo.vaultAddress &&
safe.safeInfo.walletPublicKey
) {
setReturnWallet({
...(wallet as ConnectedWallet),
publicKey: new PublicKey(safe.safeInfo.vaultAddress),
autoApprove: wallet?.autoApprove ?? false,
connected: true,
isSafeApp: true,
walletPublicKey: new PublicKey(safe.safeInfo.walletPublicKey),
});
} else if (wallet !== null) {
setReturnWallet(wallet);
}
}, [wallet, safe]);
return returnWallet;
};
```
Extends useSolana
```tsx
export const useSnowflakeSolana = (): UseSolana<
WalletTypeEnum<any>,
boolean
> => {
const walletSolana = useSolana();
const connectedWallet = useConnectedSafeWallet();
const [snowflakeSolana, setSnowflakeSolana] =
useState<UseSolana<WalletTypeEnum<any>, boolean>>(walletSolana);
useEffect(() => {
if (connectedWallet?.isSafeApp) {
setSnowflakeSolana({
...(walletSolana as UseSolana<WalletTypeEnum<any>, boolean>),
wallet: connectedWallet,
connected: true,
publicKey: connectedWallet.publicKey,
providerMut: new SolanaAugmentedProvider(
WalletAdapterProvider.init({
connection: walletSolana.connection,
wallet: connectedWallet,
})
),
});
} else {
setSnowflakeSolana(walletSolana);
}
}, [walletSolana, connectedWallet]);
return snowflakeSolana;
};
```
Detailed information on how to build on Saber can be found on the [Saber developer documentation website](https://docs.saber.so/docs/developing/overview).
Automatically generated TypeScript documentation can be found [on GitHub pages](https://saber-hq.github.io/saber-common/).
If you have any problem with using the SDK in your system, drop a question our Snowflake Discord
If you find a bug or have any problem and idea while using the SDK, you can create an issue on SDK Github.
License
MIT
Apache 2.0