@wallet-ui/react 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -0
- package/README.md +14 -0
- package/dist/index.browser.cjs +238 -0
- package/dist/index.browser.cjs.map +1 -0
- package/dist/index.browser.mjs +219 -0
- package/dist/index.browser.mjs.map +1 -0
- package/dist/index.native.mjs +219 -0
- package/dist/index.native.mjs.map +1 -0
- package/dist/index.node.cjs +238 -0
- package/dist/index.node.cjs.map +1 -0
- package/dist/index.node.mjs +219 -0
- package/dist/index.node.mjs.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/solana-chain-context.d.ts +20 -0
- package/dist/types/solana-chain-context.d.ts.map +1 -0
- package/dist/types/solana-chain-provider.d.ts +7 -0
- package/dist/types/solana-chain-provider.d.ts.map +1 -0
- package/dist/types/solana-provider.d.ts +7 -0
- package/dist/types/solana-provider.d.ts.map +1 -0
- package/dist/types/solana-rpc-context.d.ts +11 -0
- package/dist/types/solana-rpc-context.d.ts.map +1 -0
- package/dist/types/solana-rpc-provider.d.ts +7 -0
- package/dist/types/solana-rpc-provider.d.ts.map +1 -0
- package/dist/types/solana-wallet-context.d.ts +7 -0
- package/dist/types/solana-wallet-context.d.ts.map +1 -0
- package/dist/types/solana-wallet-provider.d.ts +10 -0
- package/dist/types/solana-wallet-provider.d.ts.map +1 -0
- package/dist/types/use-local-storage.d.ts +2 -0
- package/dist/types/use-local-storage.d.ts.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { devnet, testnet, createSolanaRpc, createSolanaRpcSubscriptions, address } from '@solana/web3.js';
|
|
2
|
+
import React4, { createContext, useContext, useMemo, useState, useEffect, useCallback } from 'react';
|
|
3
|
+
import { useWallets, uiWalletAccountsAreSame, uiWalletAccountBelongsToUiWallet, getUiWalletAccountStorageKey } from '@wallet-standard/react';
|
|
4
|
+
|
|
5
|
+
// src/solana-chain-context.tsx
|
|
6
|
+
var CHAIN_CONFIG_DEVNET = Object.freeze({
|
|
7
|
+
id: "solana:devnet",
|
|
8
|
+
label: "Devnet",
|
|
9
|
+
rpcSubscriptionsUrl: devnet("wss://api.devnet.solana.com"),
|
|
10
|
+
rpcUrl: devnet("https://api.devnet.solana.com")
|
|
11
|
+
});
|
|
12
|
+
var CHAIN_CONFIG_LOCAL = Object.freeze({
|
|
13
|
+
id: "solana:local",
|
|
14
|
+
label: "Local",
|
|
15
|
+
rpcSubscriptionsUrl: "ws://localhost:8900",
|
|
16
|
+
rpcUrl: "http://localhost:8899"
|
|
17
|
+
});
|
|
18
|
+
var CHAIN_CONFIG_TESTNET = Object.freeze({
|
|
19
|
+
id: "solana:testnet",
|
|
20
|
+
label: "Testnet",
|
|
21
|
+
rpcSubscriptionsUrl: testnet("wss://api.testnet.solana.com"),
|
|
22
|
+
rpcUrl: testnet("https://api.testnet.solana.com")
|
|
23
|
+
});
|
|
24
|
+
var SolanaChainContext = createContext({});
|
|
25
|
+
function useSolanaChain() {
|
|
26
|
+
return useContext(SolanaChainContext);
|
|
27
|
+
}
|
|
28
|
+
function useLocalStorage(key, initialValue) {
|
|
29
|
+
const [storedValue, setStoredValue] = useState(() => {
|
|
30
|
+
try {
|
|
31
|
+
if (typeof window === "undefined") {
|
|
32
|
+
return initialValue;
|
|
33
|
+
}
|
|
34
|
+
const item = window.localStorage.getItem(key);
|
|
35
|
+
if (key.includes("wallet") || key.includes("account")) {
|
|
36
|
+
return initialValue;
|
|
37
|
+
}
|
|
38
|
+
return item ? JSON.parse(item) : initialValue;
|
|
39
|
+
} catch (error) {
|
|
40
|
+
console.warn(`Error reading localStorage key "${key}":`, error);
|
|
41
|
+
return initialValue;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
const setValue = useCallback(
|
|
45
|
+
(value) => {
|
|
46
|
+
try {
|
|
47
|
+
const valueToStore = value instanceof Function ? value(storedValue) : value;
|
|
48
|
+
setStoredValue(valueToStore);
|
|
49
|
+
if (typeof window !== "undefined") {
|
|
50
|
+
if (valueToStore === void 0 || valueToStore === null) {
|
|
51
|
+
window.localStorage.removeItem(key);
|
|
52
|
+
} else {
|
|
53
|
+
window.localStorage.setItem(key, JSON.stringify(valueToStore));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
} catch (error) {
|
|
57
|
+
console.warn(`Error setting localStorage key "${key}":`, error);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
[key, storedValue]
|
|
61
|
+
);
|
|
62
|
+
return [storedValue, setValue];
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// src/solana-chain-provider.tsx
|
|
66
|
+
var STORAGE_KEY = "placeholder:selected-chain";
|
|
67
|
+
function SolanaChainProvider({ chains, children }) {
|
|
68
|
+
const [chainId, setChainId] = useLocalStorage(STORAGE_KEY, "solana:devnet");
|
|
69
|
+
if (!chains.length) {
|
|
70
|
+
throw new Error("No chains provided");
|
|
71
|
+
}
|
|
72
|
+
const chain = useMemo(() => {
|
|
73
|
+
for (const chain2 of chains) {
|
|
74
|
+
if (chain2.id === chainId) {
|
|
75
|
+
return chain2;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return chains[0];
|
|
79
|
+
}, [chainId, chains]);
|
|
80
|
+
return /* @__PURE__ */ React4.createElement(
|
|
81
|
+
SolanaChainContext.Provider,
|
|
82
|
+
{
|
|
83
|
+
value: useMemo(
|
|
84
|
+
() => ({
|
|
85
|
+
chain,
|
|
86
|
+
chains,
|
|
87
|
+
setChain(chain2) {
|
|
88
|
+
localStorage.setItem(STORAGE_KEY, chain2);
|
|
89
|
+
setChainId(chain2);
|
|
90
|
+
}
|
|
91
|
+
}),
|
|
92
|
+
[chain, chains]
|
|
93
|
+
)
|
|
94
|
+
},
|
|
95
|
+
children
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
var SolanaRpcContext = createContext({
|
|
99
|
+
rpc: createSolanaRpc(devnet("https://api.devnet.solana.com")),
|
|
100
|
+
rpcSubscriptions: createSolanaRpcSubscriptions(devnet("wss://api.devnet.solana.com"))
|
|
101
|
+
});
|
|
102
|
+
function useSolanaRpc() {
|
|
103
|
+
return useContext(SolanaRpcContext);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// src/solana-rpc-provider.tsx
|
|
107
|
+
function SolanaRpcProvider({ children }) {
|
|
108
|
+
const { chain } = useSolanaChain();
|
|
109
|
+
return /* @__PURE__ */ React4.createElement(
|
|
110
|
+
SolanaRpcContext.Provider,
|
|
111
|
+
{
|
|
112
|
+
value: useMemo(
|
|
113
|
+
() => ({
|
|
114
|
+
rpc: createSolanaRpc(chain.rpcUrl),
|
|
115
|
+
rpcSubscriptions: createSolanaRpcSubscriptions(
|
|
116
|
+
chain.rpcSubscriptionsUrl ? chain.rpcSubscriptionsUrl : chain.rpcUrl.replace("https", "wss").replace("8899", "8900")
|
|
117
|
+
)
|
|
118
|
+
}),
|
|
119
|
+
[chain]
|
|
120
|
+
)
|
|
121
|
+
},
|
|
122
|
+
children
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
var SolanaWalletContext = createContext([
|
|
126
|
+
void 0,
|
|
127
|
+
function setSelectedWalletAccount() {
|
|
128
|
+
}
|
|
129
|
+
]);
|
|
130
|
+
function useSolanaWallet() {
|
|
131
|
+
return useContext(SolanaWalletContext);
|
|
132
|
+
}
|
|
133
|
+
function useSolanaWalletAddress() {
|
|
134
|
+
const [wallet] = useSolanaWallet();
|
|
135
|
+
if (!wallet?.address) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
return address(wallet.address);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// src/solana-wallet-provider.tsx
|
|
142
|
+
var STORAGE_KEY2 = "placeholder:selected-wallet-and-address";
|
|
143
|
+
var wasSetterInvoked = false;
|
|
144
|
+
function getSavedWalletAccount(wallets, savedWalletNameAndAddress) {
|
|
145
|
+
if (wasSetterInvoked) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (!savedWalletNameAndAddress || typeof savedWalletNameAndAddress !== "string") {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const [savedWalletName, savedAccountAddress] = savedWalletNameAndAddress.split(":");
|
|
152
|
+
if (!savedWalletName || !savedAccountAddress) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
for (const wallet of wallets) {
|
|
156
|
+
if (wallet.name === savedWalletName) {
|
|
157
|
+
for (const account of wallet.accounts) {
|
|
158
|
+
if (account.address === savedAccountAddress) {
|
|
159
|
+
return account;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function SolanaWalletProvider({ children }) {
|
|
166
|
+
const [storedKey, setStoredKey] = useLocalStorage(STORAGE_KEY2, null);
|
|
167
|
+
const wallets = useWallets();
|
|
168
|
+
const [selectedWalletAccount, setSelectedWalletAccountInternal] = useState(
|
|
169
|
+
() => getSavedWalletAccount(wallets, storedKey)
|
|
170
|
+
);
|
|
171
|
+
const setSelectedWalletAccount2 = (setStateAction) => {
|
|
172
|
+
setSelectedWalletAccountInternal((prevSelectedWalletAccount) => {
|
|
173
|
+
wasSetterInvoked = true;
|
|
174
|
+
const nextWalletAccount = typeof setStateAction === "function" ? setStateAction(prevSelectedWalletAccount) : setStateAction;
|
|
175
|
+
const accountKey = nextWalletAccount ? getUiWalletAccountStorageKey(nextWalletAccount) : void 0;
|
|
176
|
+
if (accountKey) {
|
|
177
|
+
setStoredKey(accountKey);
|
|
178
|
+
} else {
|
|
179
|
+
setStoredKey(null);
|
|
180
|
+
}
|
|
181
|
+
return nextWalletAccount;
|
|
182
|
+
});
|
|
183
|
+
};
|
|
184
|
+
useEffect(() => {
|
|
185
|
+
const savedWalletAccount = getSavedWalletAccount(wallets, storedKey);
|
|
186
|
+
if (savedWalletAccount) {
|
|
187
|
+
setSelectedWalletAccountInternal(savedWalletAccount);
|
|
188
|
+
}
|
|
189
|
+
}, [wallets]);
|
|
190
|
+
const walletAccount = useMemo(() => {
|
|
191
|
+
if (selectedWalletAccount) {
|
|
192
|
+
for (const uiWallet of wallets) {
|
|
193
|
+
for (const uiWalletAccount of uiWallet.accounts) {
|
|
194
|
+
if (uiWalletAccountsAreSame(selectedWalletAccount, uiWalletAccount)) {
|
|
195
|
+
return uiWalletAccount;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (uiWalletAccountBelongsToUiWallet(selectedWalletAccount, uiWallet) && uiWallet.accounts[0]) {
|
|
199
|
+
return uiWallet.accounts[0];
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}, [selectedWalletAccount, wallets]);
|
|
204
|
+
useEffect(() => {
|
|
205
|
+
if (selectedWalletAccount && !walletAccount) {
|
|
206
|
+
setSelectedWalletAccountInternal(void 0);
|
|
207
|
+
}
|
|
208
|
+
}, [selectedWalletAccount, walletAccount]);
|
|
209
|
+
return /* @__PURE__ */ React4.createElement(SolanaWalletContext.Provider, { value: useMemo(() => [walletAccount, setSelectedWalletAccount2], [walletAccount]) }, children);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// src/solana-provider.tsx
|
|
213
|
+
function SolanaProvider({ chains, children }) {
|
|
214
|
+
return /* @__PURE__ */ React4.createElement(SolanaChainProvider, { chains }, /* @__PURE__ */ React4.createElement(SolanaRpcProvider, null, /* @__PURE__ */ React4.createElement(SolanaWalletProvider, null, children)));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
export { CHAIN_CONFIG_DEVNET, CHAIN_CONFIG_LOCAL, CHAIN_CONFIG_TESTNET, SolanaChainContext, SolanaChainProvider, SolanaProvider, SolanaRpcContext, SolanaRpcProvider, SolanaWalletContext, SolanaWalletProvider, useSolanaChain, useSolanaRpc, useSolanaWallet, useSolanaWalletAddress };
|
|
218
|
+
//# sourceMappingURL=index.node.mjs.map
|
|
219
|
+
//# sourceMappingURL=index.node.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/solana-chain-context.tsx","../src/use-local-storage.ts","../src/solana-chain-provider.tsx","../src/solana-rpc-context.tsx","../src/solana-rpc-provider.tsx","../src/solana-wallet-context.tsx","../src/solana-wallet-provider.tsx","../src/solana-provider.tsx"],"names":["chain","React","createContext","devnet","useContext","useMemo","createSolanaRpc","createSolanaRpcSubscriptions","STORAGE_KEY","useState","setSelectedWalletAccount"],"mappings":"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","file":"index.node.mjs","sourcesContent":["import { devnet, testnet } from '@solana/web3.js';\nimport { SolanaChain } from '@wallet-ui/core';\nimport { createContext, useContext } from 'react';\n\nexport type SolanaChainContextProps = Readonly<{\n chain: SolanaChain;\n chains: SolanaChain[];\n setChain?(chain: `solana:${string}`): void;\n}>;\n\nexport const CHAIN_CONFIG_DEVNET: SolanaChain = Object.freeze({\n id: 'solana:devnet',\n label: 'Devnet',\n rpcSubscriptionsUrl: devnet('wss://api.devnet.solana.com'),\n rpcUrl: devnet('https://api.devnet.solana.com'),\n});\nexport const CHAIN_CONFIG_LOCAL: SolanaChain = Object.freeze({\n id: 'solana:local',\n label: 'Local',\n rpcSubscriptionsUrl: 'ws://localhost:8900',\n rpcUrl: 'http://localhost:8899',\n});\nexport const CHAIN_CONFIG_TESTNET: SolanaChain = Object.freeze({\n id: 'solana:testnet',\n label: 'Testnet',\n rpcSubscriptionsUrl: testnet('wss://api.testnet.solana.com'),\n rpcUrl: testnet('https://api.testnet.solana.com'),\n});\n\nexport const SolanaChainContext = createContext<SolanaChainContextProps>({} as SolanaChainContextProps);\n\nexport function useSolanaChain() {\n return useContext(SolanaChainContext);\n}\n","import { useCallback, useState } from 'react';\n\nexport function useLocalStorage<T>(key: string, initialValue: T) {\n // State to store our value\n const [storedValue, setStoredValue] = useState<T>(() => {\n try {\n // Check if we're on the client side\n if (typeof window === 'undefined') {\n return initialValue;\n }\n\n const item = window.localStorage.getItem(key);\n // For wallet-related data, validate the stored value\n if (key.includes('wallet') || key.includes('account')) {\n // Return initial value if stored data might be stale\n return initialValue;\n }\n return item ? JSON.parse(item) : initialValue;\n } catch (error) {\n console.warn(`Error reading localStorage key \"${key}\":`, error);\n return initialValue;\n }\n });\n\n // Return a wrapped version of useState's setter function that persists the new value to localStorage\n const setValue = useCallback(\n (value: T | ((val: T) => T)) => {\n try {\n // Allow value to be a function so we have same API as useState\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n\n // Save state\n setStoredValue(valueToStore);\n\n // Save to localStorage\n if (typeof window !== 'undefined') {\n if (valueToStore === undefined || valueToStore === null) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\n }\n }\n } catch (error) {\n console.warn(`Error setting localStorage key \"${key}\":`, error);\n }\n },\n [key, storedValue],\n );\n\n return [storedValue, setValue] as const;\n}\n","import { SolanaChain } from '@wallet-ui/core';\nimport React, { ReactNode, useMemo } from 'react';\n\nimport { SolanaChainContext } from './solana-chain-context';\nimport { useLocalStorage } from './use-local-storage';\n\nconst STORAGE_KEY = 'placeholder:selected-chain';\n\nexport function SolanaChainProvider({ chains, children }: { chains: SolanaChain[]; children: ReactNode }) {\n const [chainId, setChainId] = useLocalStorage(STORAGE_KEY, 'solana:devnet');\n\n if (!chains.length) {\n throw new Error('No chains provided');\n }\n\n const chain = useMemo<SolanaChain>(() => {\n for (const chain of chains) {\n if (chain.id === chainId) {\n return chain;\n }\n }\n return chains[0];\n }, [chainId, chains]);\n\n return (\n <SolanaChainContext.Provider\n value={useMemo(\n () => ({\n chain,\n chains,\n setChain(chain) {\n localStorage.setItem(STORAGE_KEY, chain);\n setChainId(chain);\n },\n }),\n [chain, chains],\n )}\n >\n {children}\n </SolanaChainContext.Provider>\n );\n}\n","import type { Rpc, RpcSubscriptions, SolanaRpcApiDevnet, SolanaRpcSubscriptionsApi } from '@solana/web3.js';\nimport { createSolanaRpc, createSolanaRpcSubscriptions, devnet } from '@solana/web3.js';\nimport { createContext, useContext } from 'react';\n\nexport type SolanaRpc = Rpc<SolanaRpcApiDevnet>;\n\nexport const SolanaRpcContext = createContext<{\n rpc: SolanaRpc; // Limit the API to only those methods found on Mainnet (ie. not `requestAirdrop`)\n rpcSubscriptions: RpcSubscriptions<SolanaRpcSubscriptionsApi>;\n}>({\n rpc: createSolanaRpc(devnet('https://api.devnet.solana.com')),\n rpcSubscriptions: createSolanaRpcSubscriptions(devnet('wss://api.devnet.solana.com')),\n});\n\nexport function useSolanaRpc() {\n return useContext(SolanaRpcContext);\n}\n","import { createSolanaRpc, createSolanaRpcSubscriptions } from '@solana/web3.js';\nimport React, { ReactNode, useMemo } from 'react';\n\nimport { useSolanaChain } from './solana-chain-context';\nimport { SolanaRpc, SolanaRpcContext } from './solana-rpc-context';\n\ntype Props = Readonly<{\n children: ReactNode;\n}>;\n\nexport function SolanaRpcProvider({ children }: Props) {\n const { chain } = useSolanaChain();\n\n return (\n <SolanaRpcContext.Provider\n value={useMemo(\n () => ({\n rpc: createSolanaRpc(chain.rpcUrl) as SolanaRpc,\n rpcSubscriptions: createSolanaRpcSubscriptions(\n chain.rpcSubscriptionsUrl\n ? chain.rpcSubscriptionsUrl\n : chain.rpcUrl.replace('https', 'wss').replace('8899', '8900'),\n ),\n }),\n [chain],\n )}\n >\n {children}\n </SolanaRpcContext.Provider>\n );\n}\n","import { address } from '@solana/web3.js';\nimport type { UiWalletAccount } from '@wallet-standard/react';\nimport { createContext, Dispatch, SetStateAction, useContext } from 'react';\n\nexport type SelectedWalletAccountState = UiWalletAccount | undefined;\n\nexport const SolanaWalletContext = createContext<\n readonly [\n selectedWalletAccount: SelectedWalletAccountState,\n setSelectedWalletAccount: Dispatch<SetStateAction<SelectedWalletAccountState>>,\n ]\n>([\n undefined /* selectedWalletAccount */,\n function setSelectedWalletAccount() {\n /* empty */\n },\n]);\n\nexport function useSolanaWallet() {\n return useContext(SolanaWalletContext);\n}\n\nexport function useSolanaWalletAddress() {\n const [wallet] = useSolanaWallet();\n if (!wallet?.address) {\n return null;\n }\n return address(wallet.address);\n}\n","import {\n getUiWalletAccountStorageKey,\n UiWallet,\n uiWalletAccountBelongsToUiWallet,\n uiWalletAccountsAreSame,\n useWallets,\n} from '@wallet-standard/react';\nimport React, { Dispatch, ReactNode, SetStateAction, useEffect, useMemo, useState } from 'react';\n\nimport { SelectedWalletAccountState, SolanaWalletContext } from './solana-wallet-context';\nimport { useLocalStorage } from './use-local-storage';\n\nconst STORAGE_KEY = 'placeholder:selected-wallet-and-address';\n\nlet wasSetterInvoked = false;\n\nfunction getSavedWalletAccount(wallets: readonly UiWallet[], savedWalletNameAndAddress: string | null) {\n if (wasSetterInvoked) {\n // After the user makes an explicit choice of wallet, stop trying to auto-select the\n // saved wallet, if and when it appears.\n return;\n }\n if (!savedWalletNameAndAddress || typeof savedWalletNameAndAddress !== 'string') {\n return;\n }\n const [savedWalletName, savedAccountAddress] = savedWalletNameAndAddress.split(':');\n if (!savedWalletName || !savedAccountAddress) {\n return;\n }\n for (const wallet of wallets) {\n if (wallet.name === savedWalletName) {\n for (const account of wallet.accounts) {\n if (account.address === savedAccountAddress) {\n return account;\n }\n }\n }\n }\n}\n\n/**\n * Saves the selected wallet account's storage key to the browser's local storage. In future\n * sessions it will try to return that same wallet account, or at least one from the same brand of\n * wallet if the wallet from which it came is still in the Wallet Standard registry.\n */\nexport function SolanaWalletProvider({ children }: { children: ReactNode }) {\n const [storedKey, setStoredKey] = useLocalStorage<string | null>(STORAGE_KEY, null);\n const wallets = useWallets();\n const [selectedWalletAccount, setSelectedWalletAccountInternal] = useState<SelectedWalletAccountState>(() =>\n getSavedWalletAccount(wallets, storedKey),\n );\n const setSelectedWalletAccount: Dispatch<SetStateAction<SelectedWalletAccountState>> = setStateAction => {\n setSelectedWalletAccountInternal(prevSelectedWalletAccount => {\n wasSetterInvoked = true;\n const nextWalletAccount =\n typeof setStateAction === 'function' ? setStateAction(prevSelectedWalletAccount) : setStateAction;\n const accountKey = nextWalletAccount ? getUiWalletAccountStorageKey(nextWalletAccount) : undefined;\n if (accountKey) {\n setStoredKey(accountKey);\n } else {\n setStoredKey(null);\n }\n return nextWalletAccount;\n });\n };\n useEffect(() => {\n const savedWalletAccount = getSavedWalletAccount(wallets, storedKey);\n if (savedWalletAccount) {\n setSelectedWalletAccountInternal(savedWalletAccount);\n }\n }, [wallets]);\n const walletAccount = useMemo(() => {\n if (selectedWalletAccount) {\n for (const uiWallet of wallets) {\n for (const uiWalletAccount of uiWallet.accounts) {\n if (uiWalletAccountsAreSame(selectedWalletAccount, uiWalletAccount)) {\n return uiWalletAccount;\n }\n }\n if (uiWalletAccountBelongsToUiWallet(selectedWalletAccount, uiWallet) && uiWallet.accounts[0]) {\n // If the selected account belongs to this connected wallet, at least, then\n // select one of its accounts.\n return uiWallet.accounts[0];\n }\n }\n }\n }, [selectedWalletAccount, wallets]);\n useEffect(() => {\n // If there is a selected wallet account but the wallet to which it belongs has since\n // disconnected, clear the selected wallet.\n if (selectedWalletAccount && !walletAccount) {\n setSelectedWalletAccountInternal(undefined);\n }\n }, [selectedWalletAccount, walletAccount]);\n return (\n <SolanaWalletContext.Provider value={useMemo(() => [walletAccount, setSelectedWalletAccount], [walletAccount])}>\n {children}\n </SolanaWalletContext.Provider>\n );\n}\n","import { SolanaChain } from '@wallet-ui/core';\nimport React, { ReactNode } from 'react';\n\nimport { SolanaChainProvider } from './solana-chain-provider';\nimport { SolanaRpcProvider } from './solana-rpc-provider';\nimport { SolanaWalletProvider } from './solana-wallet-provider';\n\nexport function SolanaProvider({ chains, children }: { chains: SolanaChain[]; children: ReactNode }) {\n return (\n <SolanaChainProvider chains={chains}>\n <SolanaRpcProvider>\n <SolanaWalletProvider>{children}</SolanaWalletProvider>\n </SolanaRpcProvider>\n </SolanaChainProvider>\n );\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './solana-chain-context';
|
|
2
|
+
export * from './solana-chain-provider';
|
|
3
|
+
export * from './solana-provider';
|
|
4
|
+
export * from './solana-rpc-context';
|
|
5
|
+
export * from './solana-rpc-provider';
|
|
6
|
+
export * from './solana-wallet-context';
|
|
7
|
+
export * from './solana-wallet-provider';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SolanaChain } from '@wallet-ui/core';
|
|
2
|
+
export type SolanaChainContextProps = Readonly<{
|
|
3
|
+
chain: SolanaChain;
|
|
4
|
+
chains: SolanaChain[];
|
|
5
|
+
setChain?(chain: `solana:${string}`): void;
|
|
6
|
+
}>;
|
|
7
|
+
export declare const CHAIN_CONFIG_DEVNET: SolanaChain;
|
|
8
|
+
export declare const CHAIN_CONFIG_LOCAL: SolanaChain;
|
|
9
|
+
export declare const CHAIN_CONFIG_TESTNET: SolanaChain;
|
|
10
|
+
export declare const SolanaChainContext: import("react").Context<Readonly<{
|
|
11
|
+
chain: SolanaChain;
|
|
12
|
+
chains: SolanaChain[];
|
|
13
|
+
setChain?(chain: `solana:${string}`): void;
|
|
14
|
+
}>>;
|
|
15
|
+
export declare function useSolanaChain(): Readonly<{
|
|
16
|
+
chain: SolanaChain;
|
|
17
|
+
chains: SolanaChain[];
|
|
18
|
+
setChain?(chain: `solana:${string}`): void;
|
|
19
|
+
}>;
|
|
20
|
+
//# sourceMappingURL=solana-chain-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-chain-context.d.ts","sourceRoot":"","sources":["../../src/solana-chain-context.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAC3C,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,CAAC,CAAC,KAAK,EAAE,UAAU,MAAM,EAAE,GAAG,IAAI,CAAC;CAC9C,CAAC,CAAC;AAEH,eAAO,MAAM,mBAAmB,EAAE,WAKhC,CAAC;AACH,eAAO,MAAM,kBAAkB,EAAE,WAK/B,CAAC;AACH,eAAO,MAAM,oBAAoB,EAAE,WAKjC,CAAC;AAEH,eAAO,MAAM,kBAAkB;WAxBpB,WAAW;YACV,WAAW,EAAE;qBACJ,UAAU,MAAM,EAAE,GAAG,IAAI;GAsByD,CAAC;AAExG,wBAAgB,cAAc;WA1BnB,WAAW;YACV,WAAW,EAAE;qBACJ,UAAU,MAAM,EAAE,GAAG,IAAI;GA0B7C"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SolanaChain } from '@wallet-ui/core';
|
|
2
|
+
import React, { ReactNode } from 'react';
|
|
3
|
+
export declare function SolanaChainProvider({ chains, children }: {
|
|
4
|
+
chains: SolanaChain[];
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
}): React.JSX.Element;
|
|
7
|
+
//# sourceMappingURL=solana-chain-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-chain-provider.d.ts","sourceRoot":"","sources":["../../src/solana-chain-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,EAAE,SAAS,EAAW,MAAM,OAAO,CAAC;AAOlD,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,qBAiCvG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SolanaChain } from '@wallet-ui/core';
|
|
2
|
+
import React, { ReactNode } from 'react';
|
|
3
|
+
export declare function SolanaProvider({ chains, children }: {
|
|
4
|
+
chains: SolanaChain[];
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
}): React.JSX.Element;
|
|
7
|
+
//# sourceMappingURL=solana-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-provider.d.ts","sourceRoot":"","sources":["../../src/solana-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMzC,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,qBAQlG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Rpc, RpcSubscriptions, SolanaRpcApiDevnet, SolanaRpcSubscriptionsApi } from '@solana/web3.js';
|
|
2
|
+
export type SolanaRpc = Rpc<SolanaRpcApiDevnet>;
|
|
3
|
+
export declare const SolanaRpcContext: import("react").Context<{
|
|
4
|
+
rpc: SolanaRpc;
|
|
5
|
+
rpcSubscriptions: RpcSubscriptions<SolanaRpcSubscriptionsApi>;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function useSolanaRpc(): {
|
|
8
|
+
rpc: SolanaRpc;
|
|
9
|
+
rpcSubscriptions: RpcSubscriptions<SolanaRpcSubscriptionsApi>;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=solana-rpc-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-rpc-context.d.ts","sourceRoot":"","sources":["../../src/solana-rpc-context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAI5G,MAAM,MAAM,SAAS,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAEhD,eAAO,MAAM,gBAAgB;SACpB,SAAS;sBACI,gBAAgB,CAAC,yBAAyB,CAAC;EAI/D,CAAC;AAEH,wBAAgB,YAAY;SAPnB,SAAS;sBACI,gBAAgB,CAAC,yBAAyB,CAAC;EAQhE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-rpc-provider.d.ts","sourceRoot":"","sources":["../../src/solana-rpc-provider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAW,MAAM,OAAO,CAAC;AAKlD,KAAK,KAAK,GAAG,QAAQ,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACvB,CAAC,CAAC;AAEH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,qBAoBpD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { UiWalletAccount } from '@wallet-standard/react';
|
|
2
|
+
import { Dispatch, SetStateAction } from 'react';
|
|
3
|
+
export type SelectedWalletAccountState = UiWalletAccount | undefined;
|
|
4
|
+
export declare const SolanaWalletContext: import("react").Context<readonly [selectedWalletAccount: SelectedWalletAccountState, setSelectedWalletAccount: Dispatch<SetStateAction<SelectedWalletAccountState>>]>;
|
|
5
|
+
export declare function useSolanaWallet(): readonly [selectedWalletAccount: SelectedWalletAccountState, setSelectedWalletAccount: Dispatch<SetStateAction<SelectedWalletAccountState>>];
|
|
6
|
+
export declare function useSolanaWalletAddress(): import("@solana/web3.js").Address<string> | null;
|
|
7
|
+
//# sourceMappingURL=solana-wallet-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-wallet-context.d.ts","sourceRoot":"","sources":["../../src/solana-wallet-context.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAiB,QAAQ,EAAE,cAAc,EAAc,MAAM,OAAO,CAAC;AAE5E,MAAM,MAAM,0BAA0B,GAAG,eAAe,GAAG,SAAS,CAAC;AAErE,eAAO,MAAM,mBAAmB,uKAU9B,CAAC;AAEH,wBAAgB,eAAe,iJAE9B;AAED,wBAAgB,sBAAsB,qDAMrC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React, { ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Saves the selected wallet account's storage key to the browser's local storage. In future
|
|
4
|
+
* sessions it will try to return that same wallet account, or at least one from the same brand of
|
|
5
|
+
* wallet if the wallet from which it came is still in the Wallet Standard registry.
|
|
6
|
+
*/
|
|
7
|
+
export declare function SolanaWalletProvider({ children }: {
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
}): React.JSX.Element;
|
|
10
|
+
//# sourceMappingURL=solana-wallet-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-wallet-provider.d.ts","sourceRoot":"","sources":["../../src/solana-wallet-provider.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EAAY,SAAS,EAAgD,MAAM,OAAO,CAAC;AAiCjG;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,qBAsDzE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-local-storage.d.ts","sourceRoot":"","sources":["../../src/use-local-storage.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,wBAwB/C,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,WAwBlC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@wallet-ui/react",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "React hooks for building Solana apps",
|
|
5
|
+
"exports": {
|
|
6
|
+
"edge-light": {
|
|
7
|
+
"import": "./dist/index.node.mjs",
|
|
8
|
+
"require": "./dist/index.node.cjs"
|
|
9
|
+
},
|
|
10
|
+
"workerd": {
|
|
11
|
+
"import": "./dist/index.node.mjs",
|
|
12
|
+
"require": "./dist/index.node.cjs"
|
|
13
|
+
},
|
|
14
|
+
"browser": {
|
|
15
|
+
"import": "./dist/index.browser.mjs",
|
|
16
|
+
"require": "./dist/index.browser.cjs"
|
|
17
|
+
},
|
|
18
|
+
"node": {
|
|
19
|
+
"import": "./dist/index.node.mjs",
|
|
20
|
+
"require": "./dist/index.node.cjs"
|
|
21
|
+
},
|
|
22
|
+
"react-native": "./dist/index.native.mjs",
|
|
23
|
+
"types": "./dist/types/index.d.ts"
|
|
24
|
+
},
|
|
25
|
+
"browser": {
|
|
26
|
+
"./dist/index.node.cjs": "./dist/index.browser.cjs",
|
|
27
|
+
"./dist/index.node.mjs": "./dist/index.browser.mjs"
|
|
28
|
+
},
|
|
29
|
+
"main": "./dist/index.node.cjs",
|
|
30
|
+
"module": "./dist/index.node.mjs",
|
|
31
|
+
"react-native": "./dist/index.native.mjs",
|
|
32
|
+
"types": "./dist/types/index.d.ts",
|
|
33
|
+
"type": "commonjs",
|
|
34
|
+
"files": [
|
|
35
|
+
"./dist/"
|
|
36
|
+
],
|
|
37
|
+
"sideEffects": false,
|
|
38
|
+
"keywords": [
|
|
39
|
+
"blockchain",
|
|
40
|
+
"solana",
|
|
41
|
+
"web3"
|
|
42
|
+
],
|
|
43
|
+
"author": "beeman <beeman@beeman.nl>",
|
|
44
|
+
"license": "MIT",
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "https://github.com/wallet-ui/wallet-ui"
|
|
48
|
+
},
|
|
49
|
+
"bugs": {
|
|
50
|
+
"url": "https://github.com/wallet-ui/wallet-ui/issues"
|
|
51
|
+
},
|
|
52
|
+
"browserslist": [
|
|
53
|
+
"supports bigint and not dead",
|
|
54
|
+
"maintained node versions"
|
|
55
|
+
],
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"@solana/web3.js": "2",
|
|
58
|
+
"@wallet-standard/react": "^1.0.0",
|
|
59
|
+
"@wallet-ui/core": "1.0.0"
|
|
60
|
+
},
|
|
61
|
+
"peerDependencies": {
|
|
62
|
+
"react": ">=18"
|
|
63
|
+
},
|
|
64
|
+
"engines": {
|
|
65
|
+
"node": ">=20.18.0"
|
|
66
|
+
},
|
|
67
|
+
"scripts": {
|
|
68
|
+
"compile:js": "tsup --config build-scripts/tsup.config.package.ts",
|
|
69
|
+
"compile:typedefs": "tsc -p ./tsconfig.declarations.json",
|
|
70
|
+
"dev": "jest -c ../../node_modules/@wallet-ui/test-config/jest-dev.config.ts --rootDir . --watch",
|
|
71
|
+
"publish-impl": "npm view $npm_package_name@$npm_package_version > /dev/null 2>&1 || (pnpm publish --tag ${PUBLISH_TAG:-canary} --access public --no-git-checks && (([ \"$PUBLISH_TAG\" != \"canary\" ] && pnpm dist-tag add $npm_package_name@$npm_package_version latest) || true))",
|
|
72
|
+
"publish-packages": "pnpm prepublishOnly && pnpm publish-impl",
|
|
73
|
+
"style:fix": "pnpm eslint --fix src && pnpm prettier --log-level warn --ignore-unknown --write ./*",
|
|
74
|
+
"test:lint": "TERM_OVERRIDE=\"${TURBO_HASH:+dumb}\" TERM=${TERM_OVERRIDE:-$TERM} jest -c ../../node_modules/@wallet-ui/test-config/jest-lint.config.ts --rootDir . --silent",
|
|
75
|
+
"test:prettier": "TERM_OVERRIDE=\"${TURBO_HASH:+dumb}\" TERM=${TERM_OVERRIDE:-$TERM} jest -c ../../node_modules/@wallet-ui/test-config/jest-prettier.config.ts --rootDir . --silent",
|
|
76
|
+
"test:treeshakability:browser": "true # agadoo dist/index.browser.mjs",
|
|
77
|
+
"test:treeshakability:native": "true # agadoo dist/index.native.mjs",
|
|
78
|
+
"test:treeshakability:node": "true # agadoo dist/index.node.mjs",
|
|
79
|
+
"test:typecheck": "tsc --noEmit",
|
|
80
|
+
"test:unit:browser": "TERM_OVERRIDE=\"${TURBO_HASH:+dumb}\" TERM=${TERM_OVERRIDE:-$TERM} jest -c ../../node_modules/@wallet-ui/test-config/jest-unit.config.browser.ts --rootDir . --silent",
|
|
81
|
+
"test:unit:node": "TERM_OVERRIDE=\"${TURBO_HASH:+dumb}\" TERM=${TERM_OVERRIDE:-$TERM} jest -c ../../node_modules/@wallet-ui/test-config/jest-unit.config.node.ts --rootDir . --silent"
|
|
82
|
+
}
|
|
83
|
+
}
|