@solana/connector 0.1.8 → 0.1.10
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/README.md +97 -0
- package/dist/chunk-4JT24DIX.js +466 -0
- package/dist/chunk-4JT24DIX.js.map +1 -0
- package/dist/chunk-4KD6HQQG.js +69 -0
- package/dist/chunk-4KD6HQQG.js.map +1 -0
- package/dist/{chunk-DSUCH44G.js → chunk-64LV76OK.js} +2 -67
- package/dist/chunk-64LV76OK.js.map +1 -0
- package/dist/{chunk-FTXIXM43.js → chunk-6AJJJG5B.js} +614 -138
- package/dist/chunk-6AJJJG5B.js.map +1 -0
- package/dist/chunk-7XHVZW2L.mjs +460 -0
- package/dist/chunk-7XHVZW2L.mjs.map +1 -0
- package/dist/{chunk-K3BNIGPX.js → chunk-ATYK5OKR.js} +81 -33
- package/dist/chunk-ATYK5OKR.js.map +1 -0
- package/dist/{chunk-J7DHGLW6.mjs → chunk-DKCZA2QI.mjs} +3 -61
- package/dist/chunk-DKCZA2QI.mjs.map +1 -0
- package/dist/chunk-FVA4TUI4.mjs +178 -0
- package/dist/chunk-FVA4TUI4.mjs.map +1 -0
- package/dist/chunk-HO6QNKFM.mjs +61 -0
- package/dist/chunk-HO6QNKFM.mjs.map +1 -0
- package/dist/chunk-MN7XNCYI.js +230 -0
- package/dist/chunk-MN7XNCYI.js.map +1 -0
- package/dist/{chunk-6F6M6L7R.mjs → chunk-QOIQBWMP.mjs} +524 -56
- package/dist/chunk-QOIQBWMP.mjs.map +1 -0
- package/dist/{chunk-TTOKQAPX.mjs → chunk-WGZYKDXF.mjs} +57 -11
- package/dist/chunk-WGZYKDXF.mjs.map +1 -0
- package/dist/compat.js +10 -9
- package/dist/compat.js.map +1 -1
- package/dist/compat.mjs +2 -1
- package/dist/compat.mjs.map +1 -1
- package/dist/headless.d.mts +217 -100
- package/dist/headless.d.ts +217 -100
- package/dist/headless.js +190 -168
- package/dist/headless.mjs +5 -3
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +233 -203
- package/dist/index.mjs +6 -4
- package/dist/react.d.mts +72 -4
- package/dist/react.d.ts +72 -4
- package/dist/react.js +52 -36
- package/dist/react.mjs +2 -2
- package/dist/{standard-shim-CT49DM5l.d.mts → standard-shim-BTUm7cur.d.mts} +280 -1
- package/dist/{standard-shim-D9guL5fz.d.ts → standard-shim-LsQ97i9T.d.ts} +280 -1
- package/dist/walletconnect-D4JN6H2O.js +28 -0
- package/dist/walletconnect-D4JN6H2O.js.map +1 -0
- package/dist/walletconnect-I3PZUBTA.mjs +3 -0
- package/dist/walletconnect-I3PZUBTA.mjs.map +1 -0
- package/package.json +6 -2
- package/dist/chunk-6F6M6L7R.mjs.map +0 -1
- package/dist/chunk-AOIXHVRH.js +0 -535
- package/dist/chunk-AOIXHVRH.js.map +0 -1
- package/dist/chunk-DSUCH44G.js.map +0 -1
- package/dist/chunk-FTXIXM43.js.map +0 -1
- package/dist/chunk-G575OAT4.mjs +0 -476
- package/dist/chunk-G575OAT4.mjs.map +0 -1
- package/dist/chunk-J7DHGLW6.mjs.map +0 -1
- package/dist/chunk-K3BNIGPX.js.map +0 -1
- package/dist/chunk-TTOKQAPX.mjs.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunk6AJJJG5B_js = require('./chunk-6AJJJG5B.js');
|
|
4
|
+
var chunk64LV76OK_js = require('./chunk-64LV76OK.js');
|
|
5
5
|
var React = require('react');
|
|
6
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
7
|
var addresses = require('@solana/addresses');
|
|
@@ -11,8 +11,35 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
11
11
|
|
|
12
12
|
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
13
13
|
|
|
14
|
-
var
|
|
15
|
-
|
|
14
|
+
var WalletConnectContext = React.createContext(null);
|
|
15
|
+
function WalletConnectProvider({ children }) {
|
|
16
|
+
let [uri, setUriState] = React.useState(null), isMountedRef = React.useRef(false), pendingUriRef = React.useRef(null);
|
|
17
|
+
React.useEffect(() => (isMountedRef.current = true, pendingUriRef.current !== null && (setUriState(pendingUriRef.current), pendingUriRef.current = null), () => {
|
|
18
|
+
isMountedRef.current = false;
|
|
19
|
+
}), []);
|
|
20
|
+
let setUri = React.useCallback((newUri) => {
|
|
21
|
+
if (!isMountedRef.current) {
|
|
22
|
+
pendingUriRef.current = newUri;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
setUriState(newUri);
|
|
26
|
+
}, []), clearUri = React.useCallback(() => {
|
|
27
|
+
pendingUriRef.current = null, isMountedRef.current && setUriState(null);
|
|
28
|
+
}, []);
|
|
29
|
+
return /* @__PURE__ */ jsxRuntime.jsx(WalletConnectContext.Provider, { value: { uri, setUri, clearUri }, children });
|
|
30
|
+
}
|
|
31
|
+
function useWalletConnectUri() {
|
|
32
|
+
let context = React.useContext(WalletConnectContext);
|
|
33
|
+
return context || {
|
|
34
|
+
uri: null,
|
|
35
|
+
setUri: () => {
|
|
36
|
+
},
|
|
37
|
+
clearUri: () => {
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
var logger = chunk64LV76OK_js.createLogger("ConnectorProvider");
|
|
42
|
+
chunk6AJJJG5B_js.installPolyfills();
|
|
16
43
|
var ConnectorContext = React.createContext(null);
|
|
17
44
|
ConnectorContext.displayName = "ConnectorContext";
|
|
18
45
|
function ConnectorProviderInternal({
|
|
@@ -23,7 +50,7 @@ function ConnectorProviderInternal({
|
|
|
23
50
|
let clientRef = React.useRef(null), client = React__default.default.useCallback(() => {
|
|
24
51
|
if (!clientRef.current)
|
|
25
52
|
try {
|
|
26
|
-
clientRef.current = new
|
|
53
|
+
clientRef.current = new chunk6AJJJG5B_js.ConnectorClient(config), typeof window < "u" && (window.__connectorClient = clientRef.current), config?.debug && logger.info("Client initialized successfully");
|
|
27
54
|
} catch (error) {
|
|
28
55
|
let err = error;
|
|
29
56
|
logger.error("Failed to initialize client", { error: err });
|
|
@@ -83,7 +110,7 @@ function ConnectorProvider({
|
|
|
83
110
|
}) {
|
|
84
111
|
let errorBoundaryConfig = config?.errorBoundary;
|
|
85
112
|
return errorBoundaryConfig?.enabled ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
86
|
-
|
|
113
|
+
chunk6AJJJG5B_js.ConnectorErrorBoundary,
|
|
87
114
|
{
|
|
88
115
|
maxRetries: errorBoundaryConfig.maxRetries ?? 3,
|
|
89
116
|
onError: errorBoundaryConfig.onError,
|
|
@@ -98,7 +125,7 @@ function useConnector() {
|
|
|
98
125
|
throw new Error(
|
|
99
126
|
"useConnector must be used within ConnectorProvider. Wrap your app with <ConnectorProvider> or <UnifiedProvider> to use connector hooks."
|
|
100
127
|
);
|
|
101
|
-
let state = React.useSyncExternalStore(
|
|
128
|
+
let { uri: walletConnectUri, clearUri: clearWalletConnectUri } = useWalletConnectUri(), state = React.useSyncExternalStore(
|
|
102
129
|
React__default.default.useCallback((cb) => client.subscribe(cb), [client]),
|
|
103
130
|
React__default.default.useCallback(() => client.getSnapshot(), [client]),
|
|
104
131
|
React__default.default.useCallback(() => client.getSnapshot(), [client])
|
|
@@ -113,22 +140,41 @@ function useConnector() {
|
|
|
113
140
|
return React.useMemo(
|
|
114
141
|
() => ({
|
|
115
142
|
...state,
|
|
116
|
-
...methods
|
|
143
|
+
...methods,
|
|
144
|
+
walletConnectUri,
|
|
145
|
+
clearWalletConnectUri
|
|
117
146
|
}),
|
|
118
|
-
[state, methods]
|
|
147
|
+
[state, methods, walletConnectUri, clearWalletConnectUri]
|
|
119
148
|
);
|
|
120
149
|
}
|
|
121
150
|
function useConnectorClient() {
|
|
122
151
|
return React.useContext(ConnectorContext);
|
|
123
152
|
}
|
|
124
|
-
function
|
|
125
|
-
let
|
|
153
|
+
function AppProviderInner({ children, connectorConfig, mobile, providers = [] }) {
|
|
154
|
+
let { setUri, clearUri } = useWalletConnectUri(), enhancedConfig = React.useMemo(() => {
|
|
155
|
+
if (!connectorConfig?.walletConnect?.enabled)
|
|
156
|
+
return connectorConfig;
|
|
157
|
+
let wcConfig = connectorConfig.walletConnect;
|
|
158
|
+
return {
|
|
159
|
+
...connectorConfig,
|
|
160
|
+
walletConnect: {
|
|
161
|
+
...wcConfig,
|
|
162
|
+
// Auto-wire callbacks - use provided ones or fall back to context-based ones
|
|
163
|
+
onDisplayUri: wcConfig.onDisplayUri ?? setUri,
|
|
164
|
+
onSessionEstablished: wcConfig.onSessionEstablished ?? clearUri,
|
|
165
|
+
onSessionDisconnected: wcConfig.onSessionDisconnected ?? clearUri
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
}, [connectorConfig, setUri, clearUri]), content = /* @__PURE__ */ jsxRuntime.jsx(ConnectorProvider, { config: enhancedConfig, mobile, children });
|
|
126
169
|
for (let i = providers.length - 1; i >= 0; i--) {
|
|
127
170
|
let { component: Provider, props = {} } = providers[i];
|
|
128
171
|
content = /* @__PURE__ */ jsxRuntime.jsx(Provider, { ...props, children: content });
|
|
129
172
|
}
|
|
130
173
|
return content;
|
|
131
174
|
}
|
|
175
|
+
function AppProvider(props) {
|
|
176
|
+
return props.connectorConfig?.walletConnect?.enabled ? /* @__PURE__ */ jsxRuntime.jsx(WalletConnectProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(AppProviderInner, { ...props }) }) : /* @__PURE__ */ jsxRuntime.jsx(AppProviderInner, { ...props });
|
|
177
|
+
}
|
|
132
178
|
var UnifiedProvider = AppProvider;
|
|
133
179
|
function useCluster() {
|
|
134
180
|
let { cluster, clusters } = useConnector(), client = useConnectorClient();
|
|
@@ -141,7 +187,7 @@ function useCluster() {
|
|
|
141
187
|
[client]
|
|
142
188
|
);
|
|
143
189
|
return React.useMemo(() => {
|
|
144
|
-
let isMainnet = cluster ?
|
|
190
|
+
let isMainnet = cluster ? chunk6AJJJG5B_js.isMainnetCluster(cluster) : false, isDevnet = cluster ? chunk6AJJJG5B_js.isDevnetCluster(cluster) : false, isTestnet = cluster ? chunk6AJJJG5B_js.isTestnetCluster(cluster) : false, isLocal = cluster ? chunk6AJJJG5B_js.isLocalCluster(cluster) : false, explorerUrl = cluster ? chunk6AJJJG5B_js.getClusterExplorerUrl(cluster) : "", type = cluster ? chunk6AJJJG5B_js.getClusterType(cluster) : null;
|
|
145
191
|
return {
|
|
146
192
|
cluster,
|
|
147
193
|
clusters,
|
|
@@ -159,7 +205,7 @@ function useAccount() {
|
|
|
159
205
|
let { selectedAccount, accounts, connected, selectAccount } = useConnector(), [copied, setCopied] = React.useState(false), copyTimeoutRef = React__default.default.useRef(void 0), account = React.useMemo(
|
|
160
206
|
() => accounts.find((a) => a.address === selectedAccount) ?? null,
|
|
161
207
|
[accounts, selectedAccount]
|
|
162
|
-
), formatted = React.useMemo(() => selectedAccount ?
|
|
208
|
+
), formatted = React.useMemo(() => selectedAccount ? chunk6AJJJG5B_js.formatAddress(selectedAccount) : "", [selectedAccount]), copy = React.useCallback(async () => selectedAccount ? (copyTimeoutRef.current && clearTimeout(copyTimeoutRef.current), await chunk6AJJJG5B_js.copyAddressToClipboard(selectedAccount, {
|
|
163
209
|
onSuccess: () => {
|
|
164
210
|
setCopied(true), copyTimeoutRef.current = setTimeout(() => setCopied(false), 2e3);
|
|
165
211
|
}
|
|
@@ -225,7 +271,7 @@ function useTransactionSigner() {
|
|
|
225
271
|
let { selectedWallet, selectedAccount, accounts, cluster, connected } = useConnector(), client = useConnectorClient(), account = React.useMemo(
|
|
226
272
|
() => accounts.find((a) => a.address === selectedAccount)?.raw ?? null,
|
|
227
273
|
[accounts, selectedAccount]
|
|
228
|
-
), signer = React.useMemo(() => !connected || !selectedWallet || !account ? null :
|
|
274
|
+
), signer = React.useMemo(() => !connected || !selectedWallet || !account ? null : chunk6AJJJG5B_js.createTransactionSigner({
|
|
229
275
|
wallet: selectedWallet,
|
|
230
276
|
account,
|
|
231
277
|
cluster: cluster ?? void 0,
|
|
@@ -253,20 +299,20 @@ function useTransactionSigner() {
|
|
|
253
299
|
function useKitTransactionSigner() {
|
|
254
300
|
let { signer: connectorSigner, ready } = useTransactionSigner();
|
|
255
301
|
return {
|
|
256
|
-
signer: React.useMemo(() => connectorSigner ?
|
|
302
|
+
signer: React.useMemo(() => connectorSigner ? chunk6AJJJG5B_js.createKitTransactionSigner(connectorSigner) : null, [connectorSigner]),
|
|
257
303
|
ready
|
|
258
304
|
};
|
|
259
305
|
}
|
|
260
306
|
var useGillTransactionSigner = useKitTransactionSigner;
|
|
261
|
-
var logger2 =
|
|
307
|
+
var logger2 = chunk64LV76OK_js.createLogger("useSolanaClient");
|
|
262
308
|
function useSolanaClient() {
|
|
263
309
|
let { type } = useCluster(), connectorClient = useConnectorClient(), client = React.useMemo(() => {
|
|
264
310
|
if (!type || !connectorClient) return null;
|
|
265
311
|
try {
|
|
266
312
|
let rpcUrl = connectorClient.getRpcUrl();
|
|
267
|
-
return rpcUrl ?
|
|
313
|
+
return rpcUrl ? chunk64LV76OK_js.createSolanaClient({
|
|
268
314
|
urlOrMoniker: rpcUrl
|
|
269
|
-
}) : type !== "custom" ?
|
|
315
|
+
}) : type !== "custom" ? chunk64LV76OK_js.createSolanaClient({
|
|
270
316
|
urlOrMoniker: type
|
|
271
317
|
}) : null;
|
|
272
318
|
} catch (error) {
|
|
@@ -287,8 +333,8 @@ function useTransactionPreparer() {
|
|
|
287
333
|
let { client, ready } = useSolanaClient(), prepare = React.useCallback(
|
|
288
334
|
async (transaction, options = {}) => {
|
|
289
335
|
if (!client)
|
|
290
|
-
throw new
|
|
291
|
-
return
|
|
336
|
+
throw new chunk64LV76OK_js.NetworkError("RPC_ERROR", "Solana client not available. Cannot prepare transaction.");
|
|
337
|
+
return chunk64LV76OK_js.prepareTransaction({
|
|
292
338
|
transaction,
|
|
293
339
|
rpc: client.rpc,
|
|
294
340
|
computeUnitLimitMultiplier: options.computeUnitLimitMultiplier,
|
|
@@ -638,7 +684,7 @@ function getBalanceQueryKey(rpcUrl, address) {
|
|
|
638
684
|
}
|
|
639
685
|
var LAMPORTS_PER_SOL2 = 1000000000n;
|
|
640
686
|
function formatTokenAccount(account) {
|
|
641
|
-
let formatted =
|
|
687
|
+
let formatted = chunk6AJJJG5B_js.formatBigIntBalance(account.amount, account.decimals, {
|
|
642
688
|
maxDecimals: Math.min(account.decimals, 6)
|
|
643
689
|
});
|
|
644
690
|
return {
|
|
@@ -682,7 +728,7 @@ function useBalance(options = {}) {
|
|
|
682
728
|
refetchIntervalMs: autoRefresh ? refreshInterval : false,
|
|
683
729
|
client: clientOverride,
|
|
684
730
|
select: selectBalance
|
|
685
|
-
}), lamports = data?.lamports ?? 0n, tokens = data?.tokens ?? [], solBalance = React.useMemo(() => Number(lamports) / Number(LAMPORTS_PER_SOL2), [lamports]), formattedSol = React.useMemo(() =>
|
|
731
|
+
}), lamports = data?.lamports ?? 0n, tokens = data?.tokens ?? [], solBalance = React.useMemo(() => Number(lamports) / Number(LAMPORTS_PER_SOL2), [lamports]), formattedSol = React.useMemo(() => chunk6AJJJG5B_js.formatLamportsToSolSafe(lamports, { maxDecimals: 4, suffix: true }), [lamports]), visibleError = updatedAt ? null : error, refetch = React.useCallback(
|
|
686
732
|
async (opts) => {
|
|
687
733
|
await sharedRefetch(opts);
|
|
688
734
|
},
|
|
@@ -1151,7 +1197,7 @@ function useTransactions(options = {}) {
|
|
|
1151
1197
|
blockTimeNum,
|
|
1152
1198
|
Number(sig.slot),
|
|
1153
1199
|
sig.err,
|
|
1154
|
-
|
|
1200
|
+
chunk6AJJJG5B_js.getTransactionUrl(String(sig.signature), currentCluster)
|
|
1155
1201
|
);
|
|
1156
1202
|
});
|
|
1157
1203
|
} else
|
|
@@ -1166,7 +1212,7 @@ function useTransactions(options = {}) {
|
|
|
1166
1212
|
type: "unknown",
|
|
1167
1213
|
formattedDate: date,
|
|
1168
1214
|
formattedTime: time,
|
|
1169
|
-
explorerUrl:
|
|
1215
|
+
explorerUrl: chunk6AJJJG5B_js.getTransactionUrl(String(sig.signature), currentCluster)
|
|
1170
1216
|
};
|
|
1171
1217
|
});
|
|
1172
1218
|
let mintsToFetch = [
|
|
@@ -1180,7 +1226,7 @@ function useTransactions(options = {}) {
|
|
|
1180
1226
|
throwIfAborted(signal);
|
|
1181
1227
|
let tokenMetadata = await fetchTransactionTokenMetadata(mintsToFetch, {
|
|
1182
1228
|
signal,
|
|
1183
|
-
cluster:
|
|
1229
|
+
cluster: chunk6AJJJG5B_js.getClusterType(currentCluster)
|
|
1184
1230
|
});
|
|
1185
1231
|
tokenMetadata.size > 0 && (newTransactions = newTransactions.map((tx) => {
|
|
1186
1232
|
let enrichedTx = { ...tx };
|
|
@@ -1287,10 +1333,10 @@ function getTokensQueryKey(rpcUrl, address) {
|
|
|
1287
1333
|
}
|
|
1288
1334
|
var CACHE_MAX_SIZE = 500, PRICE_CACHE_TTL = 6e4, STALE_CLEANUP_INTERVAL = 12e4, COINGECKO_DEFAULT_MAX_RETRIES = 3, COINGECKO_DEFAULT_BASE_DELAY = 1e3, COINGECKO_DEFAULT_MAX_TIMEOUT = 3e4, COINGECKO_API_BASE_URL = "https://api.coingecko.com/api/v3", LRUCache = class {
|
|
1289
1335
|
constructor(maxSize, options) {
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1336
|
+
chunk64LV76OK_js.__publicField(this, "cache", /* @__PURE__ */ new Map());
|
|
1337
|
+
chunk64LV76OK_js.__publicField(this, "maxSize");
|
|
1338
|
+
chunk64LV76OK_js.__publicField(this, "getTtl");
|
|
1339
|
+
chunk64LV76OK_js.__publicField(this, "getTimestamp");
|
|
1294
1340
|
this.maxSize = maxSize, this.getTtl = options?.getTtl, this.getTimestamp = options?.getTimestamp;
|
|
1295
1341
|
}
|
|
1296
1342
|
get(key) {
|
|
@@ -1460,12 +1506,12 @@ async function fetchTokenMetadataHybrid(mints, coingeckoConfig, options) {
|
|
|
1460
1506
|
return didUpdatePrices && options?.onUpdate?.(), didUpdate;
|
|
1461
1507
|
}
|
|
1462
1508
|
function formatBalance(amount, decimals) {
|
|
1463
|
-
return
|
|
1509
|
+
return chunk6AJJJG5B_js.formatBigIntBalance(amount, decimals, {
|
|
1464
1510
|
maxDecimals: Math.min(decimals, 6)
|
|
1465
1511
|
});
|
|
1466
1512
|
}
|
|
1467
1513
|
function formatUsd(amount, decimals, usdPrice) {
|
|
1468
|
-
return
|
|
1514
|
+
return chunk6AJJJG5B_js.formatBigIntUsd(amount, decimals, usdPrice);
|
|
1469
1515
|
}
|
|
1470
1516
|
function selectTokens(assets, address) {
|
|
1471
1517
|
return {
|
|
@@ -2806,6 +2852,7 @@ exports.SkeletonShine = SkeletonShine;
|
|
|
2806
2852
|
exports.TokenListElement = TokenListElement;
|
|
2807
2853
|
exports.TransactionHistoryElement = TransactionHistoryElement;
|
|
2808
2854
|
exports.UnifiedProvider = UnifiedProvider;
|
|
2855
|
+
exports.WalletConnectProvider = WalletConnectProvider;
|
|
2809
2856
|
exports.WalletListElement = WalletListElement;
|
|
2810
2857
|
exports.clearSharedQueryCache = clearSharedQueryCache;
|
|
2811
2858
|
exports.clearTokenCaches = clearTokenCaches;
|
|
@@ -2827,6 +2874,7 @@ exports.useTokens = useTokens;
|
|
|
2827
2874
|
exports.useTransactionPreparer = useTransactionPreparer;
|
|
2828
2875
|
exports.useTransactionSigner = useTransactionSigner;
|
|
2829
2876
|
exports.useTransactions = useTransactions;
|
|
2877
|
+
exports.useWalletConnectUri = useWalletConnectUri;
|
|
2830
2878
|
exports.useWalletInfo = useWalletInfo;
|
|
2831
|
-
//# sourceMappingURL=chunk-
|
|
2832
|
-
//# sourceMappingURL=chunk-
|
|
2879
|
+
//# sourceMappingURL=chunk-ATYK5OKR.js.map
|
|
2880
|
+
//# sourceMappingURL=chunk-ATYK5OKR.js.map
|