@flarenetwork/multichain-wallet-connector 0.0.1-rc.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.
@@ -0,0 +1,885 @@
1
+ import { _ as objectFromEntries, g as objectEntries, h as ChainGuards, m as evmCaip2s, v as objectKeys, y as objectValues } from "./multichain-C5wKiJke.mjs";
2
+ import { createStore } from "@xstate/store";
3
+ import { c } from "react/compiler-runtime";
4
+ import { createContext, useContext, useEffect, useRef, useState } from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ import { useSelector } from "@xstate/store-react";
7
+
8
+ //#region src/core/stores/multichain/multichain-context.tsx
9
+ const MultichainContext = createContext(void 0);
10
+
11
+ //#endregion
12
+ //#region src/core/stores/multichain/multichain-provider.tsx
13
+ const MultichainProvider = (t0) => {
14
+ const $ = c(6);
15
+ const { multichain, children } = t0;
16
+ let t1;
17
+ let t2;
18
+ if ($[0] !== multichain) {
19
+ t1 = () => {
20
+ multichain.mount();
21
+ };
22
+ t2 = [multichain];
23
+ $[0] = multichain;
24
+ $[1] = t1;
25
+ $[2] = t2;
26
+ } else {
27
+ t1 = $[1];
28
+ t2 = $[2];
29
+ }
30
+ useEffect(t1, t2);
31
+ let t3;
32
+ if ($[3] !== children || $[4] !== multichain) {
33
+ t3 = /* @__PURE__ */ jsx(MultichainContext.Provider, {
34
+ value: multichain,
35
+ children
36
+ });
37
+ $[3] = children;
38
+ $[4] = multichain;
39
+ $[5] = t3;
40
+ } else t3 = $[5];
41
+ return t3;
42
+ };
43
+
44
+ //#endregion
45
+ //#region src/core/stores/multichain/use-multichain-context.tsx
46
+ const useMultichainContext = () => {
47
+ const context = useContext(MultichainContext);
48
+ if (context === void 0) throw new Error("useMultichainContext must be used within a WalletContextProvider");
49
+ return context;
50
+ };
51
+
52
+ //#endregion
53
+ //#region src/core/wallets/wallet-registry.ts
54
+ function defineWalletRegistry(registry) {
55
+ return registry;
56
+ }
57
+ const walletRegistry = defineWalletRegistry({
58
+ metamask: {
59
+ label: "MetaMask",
60
+ chains: evmCaip2s,
61
+ canConnect: "single-at-once"
62
+ },
63
+ "wallet-connect": {
64
+ label: "WalletConnect",
65
+ chains: [
66
+ ...evmCaip2s,
67
+ "xrpl:0",
68
+ "xrpl:1"
69
+ ],
70
+ canConnect: "all-at-once"
71
+ },
72
+ ledger: {
73
+ label: "Ledger",
74
+ chains: [
75
+ "eip155:1",
76
+ "eip155:11155111",
77
+ "eip155:14",
78
+ "eip155:16",
79
+ "eip155:114",
80
+ "eip155:19",
81
+ "xrpl:0",
82
+ "xrpl:1"
83
+ ],
84
+ canConnect: "single-at-once"
85
+ },
86
+ xaman: {
87
+ label: "Xaman",
88
+ chains: ["xrpl:0", "xrpl:1"],
89
+ canConnect: "single-at-once"
90
+ },
91
+ dcent: {
92
+ label: "D'CENT",
93
+ chains: ["xrpl:0", "xrpl:1"],
94
+ canConnect: "single-at-once"
95
+ }
96
+ });
97
+ const walletLabels = objectFromEntries(objectEntries(walletRegistry).map(([walletType, wallet]) => [walletType, wallet.label]));
98
+ const walletSupportForChain = objectFromEntries(objectEntries(walletRegistry).map(([walletType, wallet]) => [walletType, {
99
+ chains: wallet.chains,
100
+ canConnect: wallet.canConnect
101
+ }]));
102
+
103
+ //#endregion
104
+ //#region src/react/hooks/use-chain-support/use-chain-support.ts
105
+ /**
106
+ * Hook to access chain configuration.
107
+ *
108
+ * @example
109
+ * ```tsx
110
+ * // Get all chains
111
+ * const allChains = useChainSupport();
112
+ *
113
+ * // Get EVM chains only
114
+ * const evmChains = useChainSupport({ chainType: 'evm' });
115
+ *
116
+ * // Get XRPL chains only
117
+ * const xrplChains = useChainSupport({ chainType: 'xrpl' });
118
+ *
119
+ * // Get chains supported by a wallet
120
+ * const ledgerChains = useChainSupport({ wallet: 'ledger' });
121
+ * ```
122
+ */
123
+ function useChainSupport(filter) {
124
+ const $ = c(6);
125
+ const multichain = useMultichainContext();
126
+ let allChains;
127
+ let t0;
128
+ if ($[0] !== filter || $[1] !== multichain) {
129
+ t0 = Symbol.for("react.early_return_sentinel");
130
+ bb0: {
131
+ const configResolver = multichain.getConfigResolver();
132
+ const filterChainType = filter && "chainType" in filter ? filter.chainType : void 0;
133
+ const filterWallet = filter && "wallet" in filter ? filter.wallet : void 0;
134
+ const firstWallet = multichain.getWalletTypes()[0];
135
+ const resolvedConfig = firstWallet ? configResolver.resolveForWallet(firstWallet) : null;
136
+ if (!resolvedConfig) {
137
+ t0 = [];
138
+ break bb0;
139
+ }
140
+ allChains = objectValues(resolvedConfig.chains);
141
+ if (!filterChainType && !filterWallet) {
142
+ t0 = allChains;
143
+ break bb0;
144
+ }
145
+ if (filterChainType === "evm") {
146
+ t0 = allChains.filter(_temp$4);
147
+ break bb0;
148
+ }
149
+ if (filterChainType === "xrpl") {
150
+ t0 = allChains.filter(_temp2$1);
151
+ break bb0;
152
+ }
153
+ if (filterWallet) {
154
+ const supportedCaip2s = walletSupportForChain[filterWallet].chains;
155
+ let t1;
156
+ if ($[4] !== supportedCaip2s) {
157
+ t1 = (chain_1) => supportedCaip2s.includes(chain_1.caip2);
158
+ $[4] = supportedCaip2s;
159
+ $[5] = t1;
160
+ } else t1 = $[5];
161
+ t0 = allChains.filter(t1);
162
+ break bb0;
163
+ }
164
+ }
165
+ $[0] = filter;
166
+ $[1] = multichain;
167
+ $[2] = allChains;
168
+ $[3] = t0;
169
+ } else {
170
+ allChains = $[2];
171
+ t0 = $[3];
172
+ }
173
+ if (t0 !== Symbol.for("react.early_return_sentinel")) return t0;
174
+ return allChains;
175
+ }
176
+ function _temp2$1(chain_0) {
177
+ return ChainGuards.isXrplCaip2(chain_0.caip2);
178
+ }
179
+ function _temp$4(chain) {
180
+ return ChainGuards.isEvmCaip2(chain.caip2);
181
+ }
182
+
183
+ //#endregion
184
+ //#region src/react/hooks/use-chain/use-chain.tsx
185
+ function useChain(caip2, options) {
186
+ const $ = c(9);
187
+ const multichain = useMultichainContext();
188
+ let t0;
189
+ if ($[0] !== multichain) {
190
+ t0 = multichain.getAggregateStore();
191
+ $[0] = multichain;
192
+ $[1] = t0;
193
+ } else t0 = $[1];
194
+ const wallets = useSelector(t0, _temp$3);
195
+ let t1;
196
+ if ($[2] !== caip2 || $[3] !== multichain || $[4] !== options || $[5] !== wallets) {
197
+ t1 = Symbol.for("react.early_return_sentinel");
198
+ bb0: for (const [walletType, context] of objectEntries(wallets)) {
199
+ if (options?.wallet && walletType !== options.wallet) continue;
200
+ if (context?.caip2 === caip2 && context.connectionState === "connected") {
201
+ const narrowedWalletType = walletType;
202
+ const client = multichain.getConnector(narrowedWalletType).getClient();
203
+ t1 = {
204
+ exists: true,
205
+ address: context.activeAddress,
206
+ state: context,
207
+ walletType: narrowedWalletType,
208
+ caip2,
209
+ client
210
+ };
211
+ break bb0;
212
+ }
213
+ }
214
+ $[2] = caip2;
215
+ $[3] = multichain;
216
+ $[4] = options;
217
+ $[5] = wallets;
218
+ $[6] = t1;
219
+ } else t1 = $[6];
220
+ if (t1 !== Symbol.for("react.early_return_sentinel")) return t1;
221
+ let t2;
222
+ if ($[7] !== caip2) {
223
+ t2 = {
224
+ exists: false,
225
+ address: void 0,
226
+ state: void 0,
227
+ walletType: void 0,
228
+ caip2,
229
+ client: null
230
+ };
231
+ $[7] = caip2;
232
+ $[8] = t2;
233
+ } else t2 = $[8];
234
+ return t2;
235
+ }
236
+ function _temp$3(s) {
237
+ return s.context.wallets;
238
+ }
239
+
240
+ //#endregion
241
+ //#region src/react/hooks/use-ledger-selection/use-ledger-selection.ts
242
+ const DEFAULT_HD_STANDARD = "bip44";
243
+ function useLedgerSelection(selectedCaip2, options) {
244
+ const $ = c(17);
245
+ const multichain = useMultichainContext();
246
+ let t0;
247
+ if ($[0] !== multichain) {
248
+ t0 = multichain.getConnector("ledger").getSession();
249
+ $[0] = multichain;
250
+ $[1] = t0;
251
+ } else t0 = $[1];
252
+ const session = t0;
253
+ const resolvedHdStandard = options?.initialHdStandard ?? session?.hdStandard ?? DEFAULT_HD_STANDARD;
254
+ let t1;
255
+ if ($[2] !== options?.initialSelections || $[3] !== session) {
256
+ t1 = options?.initialSelections ?? (session ? { [session.caip2]: session.account } : {});
257
+ $[2] = options?.initialSelections;
258
+ $[3] = session;
259
+ $[4] = t1;
260
+ } else t1 = $[4];
261
+ const resolvedSelections = t1;
262
+ const [hdStandard, setHdStandard] = useState(resolvedHdStandard);
263
+ const [selections, setSelections] = useState(resolvedSelections);
264
+ const selectedAddress = selections[selectedCaip2] ?? null;
265
+ let t2;
266
+ if ($[5] !== selectedCaip2) {
267
+ t2 = (address) => {
268
+ setSelections((prev) => {
269
+ if (prev[selectedCaip2] === address) return prev;
270
+ return {
271
+ ...prev,
272
+ [selectedCaip2]: address
273
+ };
274
+ });
275
+ };
276
+ $[5] = selectedCaip2;
277
+ $[6] = t2;
278
+ } else t2 = $[6];
279
+ const selectAddress = t2;
280
+ let t3;
281
+ if ($[7] !== selectedCaip2) {
282
+ t3 = () => {
283
+ setSelections((prev_0) => {
284
+ if (!prev_0[selectedCaip2]) return prev_0;
285
+ const next = { ...prev_0 };
286
+ delete next[selectedCaip2];
287
+ return next;
288
+ });
289
+ };
290
+ $[7] = selectedCaip2;
291
+ $[8] = t3;
292
+ } else t3 = $[8];
293
+ const clearSelection = t3;
294
+ let t4;
295
+ if ($[9] !== clearSelection || $[10] !== hdStandard || $[11] !== selectAddress || $[12] !== selectedAddress) {
296
+ t4 = {
297
+ selectedAddress,
298
+ hdStandard,
299
+ selectAddress,
300
+ setHdStandard,
301
+ clearSelection
302
+ };
303
+ $[9] = clearSelection;
304
+ $[10] = hdStandard;
305
+ $[11] = selectAddress;
306
+ $[12] = selectedAddress;
307
+ $[13] = t4;
308
+ } else t4 = $[13];
309
+ const selection = t4;
310
+ let t5;
311
+ if ($[14] !== selection || $[15] !== selections) {
312
+ t5 = {
313
+ selection,
314
+ selections
315
+ };
316
+ $[14] = selection;
317
+ $[15] = selections;
318
+ $[16] = t5;
319
+ } else t5 = $[16];
320
+ return t5;
321
+ }
322
+
323
+ //#endregion
324
+ //#region src/react/hooks/use-multichain-events/use-multichain-events.tsx
325
+ const useMultichainEvents = (options) => {
326
+ const $ = c(5);
327
+ const multichain = useMultichainContext();
328
+ const optionsRef = useRef(options);
329
+ let t0;
330
+ if ($[0] !== options) {
331
+ t0 = () => {
332
+ optionsRef.current = options;
333
+ };
334
+ $[0] = options;
335
+ $[1] = t0;
336
+ } else t0 = $[1];
337
+ useEffect(t0);
338
+ let t1;
339
+ let t2;
340
+ if ($[2] !== multichain) {
341
+ t1 = () => {
342
+ const subscriptions = [];
343
+ const wallets = multichain.getWalletTypes();
344
+ for (const walletType of wallets) {
345
+ const connectSub = multichain.onWalletEvent(walletType, "walletConnected", (event) => {
346
+ optionsRef.current.onConnect?.({
347
+ walletType,
348
+ caip2: event.caip2,
349
+ address: event.activeAddress,
350
+ availableAddresses: event.availableAddresses,
351
+ isReconnect: event.isReconnect
352
+ });
353
+ });
354
+ if (connectSub) subscriptions.push(connectSub);
355
+ const disconnectSub = multichain.onWalletEvent(walletType, "walletDisconnected", () => {
356
+ optionsRef.current.onDisconnect?.({ walletType });
357
+ });
358
+ if (disconnectSub) subscriptions.push(disconnectSub);
359
+ const errorSub = multichain.onWalletEvent(walletType, "walletError", (event_0) => {
360
+ optionsRef.current.onError?.({
361
+ walletType,
362
+ error: new Error(event_0.error.message)
363
+ });
364
+ });
365
+ if (errorSub) subscriptions.push(errorSub);
366
+ const chainChangedSub = multichain.onWalletEvent(walletType, "walletChainChanged", (event_1) => {
367
+ optionsRef.current.onChainChanged?.({
368
+ walletType,
369
+ caip2: event_1.caip2
370
+ });
371
+ });
372
+ if (chainChangedSub) subscriptions.push(chainChangedSub);
373
+ const addressChangedSub = multichain.onWalletEvent(walletType, "walletAddressChanged", (event_2) => {
374
+ optionsRef.current.onAccountChanged?.({
375
+ walletType,
376
+ address: event_2.activeAddress
377
+ });
378
+ });
379
+ if (addressChangedSub) subscriptions.push(addressChangedSub);
380
+ }
381
+ return () => {
382
+ for (const sub of subscriptions) sub.unsubscribe();
383
+ };
384
+ };
385
+ t2 = [multichain];
386
+ $[2] = multichain;
387
+ $[3] = t1;
388
+ $[4] = t2;
389
+ } else {
390
+ t1 = $[3];
391
+ t2 = $[4];
392
+ }
393
+ useEffect(t1, t2);
394
+ };
395
+
396
+ //#endregion
397
+ //#region src/core/connectors/connector-types.ts
398
+ function getChainSelectionMode(wallet, walletSupport) {
399
+ if (!wallet) return null;
400
+ return walletSupport[wallet].canConnect === "all-at-once" ? "multi" : "single";
401
+ }
402
+ function buildConnectArgs(wallet, chains) {
403
+ if (!wallet) return null;
404
+ switch (wallet) {
405
+ case "wallet-connect": return chains.length ? {
406
+ wallet,
407
+ chains
408
+ } : null;
409
+ case "metamask": return chains.length ? {
410
+ wallet,
411
+ chain: chains[0]
412
+ } : null;
413
+ case "ledger": return chains.length ? {
414
+ wallet,
415
+ chain: chains[0]
416
+ } : null;
417
+ case "xaman": return { wallet };
418
+ case "dcent": return { wallet };
419
+ }
420
+ }
421
+
422
+ //#endregion
423
+ //#region src/react/hooks/use-wallet-selection/wallet-selection.store.ts
424
+ const INITIAL = {
425
+ selectedWalletType: null,
426
+ selectedCaip2s: []
427
+ };
428
+ function createMultichainSelectionStore(fixedCaip2) {
429
+ const getSelectionMode = (walletType) => walletType ? walletSupportForChain[walletType].canConnect === "all-at-once" ? "multi" : "single" : null;
430
+ return createStore({
431
+ context: INITIAL,
432
+ on: {
433
+ selectWallet: (_ctx, { walletType, preselect }) => ({
434
+ selectedWalletType: walletType,
435
+ selectedCaip2s: preselect
436
+ }),
437
+ clearWallet: () => INITIAL,
438
+ toggleCaip2: (ctx, { caip2 }) => {
439
+ if (fixedCaip2) return ctx;
440
+ if (getSelectionMode(ctx.selectedWalletType) === "single") return {
441
+ ...ctx,
442
+ selectedCaip2s: ctx.selectedCaip2s[0] === caip2 ? [] : [caip2]
443
+ };
444
+ const has = ctx.selectedCaip2s.includes(caip2);
445
+ return {
446
+ ...ctx,
447
+ selectedCaip2s: has ? ctx.selectedCaip2s.filter((selected) => selected !== caip2) : [...ctx.selectedCaip2s, caip2]
448
+ };
449
+ },
450
+ setSelectedCaip2s: (ctx, { caip2s }) => {
451
+ if (fixedCaip2) return {
452
+ ...ctx,
453
+ selectedCaip2s: [fixedCaip2]
454
+ };
455
+ if (getSelectionMode(ctx.selectedWalletType) === "single") return {
456
+ ...ctx,
457
+ selectedCaip2s: caip2s.length ? [caip2s[0]] : []
458
+ };
459
+ return {
460
+ ...ctx,
461
+ selectedCaip2s: [...caip2s]
462
+ };
463
+ },
464
+ reset: () => INITIAL
465
+ }
466
+ });
467
+ }
468
+
469
+ //#endregion
470
+ //#region src/react/hooks/use-wallet-selection/wallet-selection.utils.ts
471
+ function isSingleChainMode(config) {
472
+ return config.mode.includes("single-chain");
473
+ }
474
+ function deriveSelectionWallets(walletTypes, walletStates, chainOptions) {
475
+ return walletTypes.map((type) => {
476
+ const state = walletStates[type];
477
+ return {
478
+ type,
479
+ name: walletLabels[type],
480
+ caip2s: chainOptions[type] ?? [],
481
+ multiChain: walletSupportForChain[type].canConnect === "all-at-once",
482
+ isConnecting: state?.connectionState === "connecting",
483
+ isConnected: state?.connectionState === "connected",
484
+ caip2: state?.caip2 ?? null
485
+ };
486
+ });
487
+ }
488
+
489
+ //#endregion
490
+ //#region src/react/hooks/use-wallet-selection/wallet-selection.provider.tsx
491
+ const MultichainSelectionContext = createContext(null);
492
+ function buildChainOptions(wallets, fixedCaip2) {
493
+ const options = {};
494
+ for (const [walletType, setting] of objectEntries(wallets)) {
495
+ if (!setting) continue;
496
+ const supported = walletSupportForChain[walletType].chains;
497
+ const requested = setting === "all" ? supported : setting.filter((caip2) => supported.includes(caip2));
498
+ if (fixedCaip2) {
499
+ if (requested.includes(fixedCaip2)) options[walletType] = [fixedCaip2];
500
+ } else options[walletType] = [...requested];
501
+ }
502
+ return options;
503
+ }
504
+ function MultichainSelectionProvider(t0) {
505
+ const $ = c(5);
506
+ const { config, children } = t0;
507
+ let t1;
508
+ if ($[0] !== config) {
509
+ t1 = () => {
510
+ const fixedCaip2 = isSingleChainMode(config) ? config.caip2 : null;
511
+ const chainOptions = buildChainOptions(config.wallets, fixedCaip2);
512
+ return {
513
+ store: createMultichainSelectionStore(fixedCaip2),
514
+ mode: config.mode,
515
+ fixedCaip2,
516
+ chainOptions,
517
+ wallets: objectKeys(chainOptions)
518
+ };
519
+ };
520
+ $[0] = config;
521
+ $[1] = t1;
522
+ } else t1 = $[1];
523
+ const [ctx] = useState(t1);
524
+ let t2;
525
+ if ($[2] !== children || $[3] !== ctx) {
526
+ t2 = /* @__PURE__ */ jsx(MultichainSelectionContext.Provider, {
527
+ value: ctx,
528
+ children
529
+ });
530
+ $[2] = children;
531
+ $[3] = ctx;
532
+ $[4] = t2;
533
+ } else t2 = $[4];
534
+ return t2;
535
+ }
536
+
537
+ //#endregion
538
+ //#region src/react/hooks/use-wallet-selection/use-wallet-selection.ts
539
+ function useMultichainSelection() {
540
+ const $ = c(46);
541
+ const ctx = useContext(MultichainSelectionContext);
542
+ if (!ctx) throw new Error("useMultichainSelection must be used within MultichainSelectionProvider");
543
+ const { store, mode, fixedCaip2, chainOptions, wallets: walletTypes } = ctx;
544
+ const { selectedWalletType, selectedCaip2s } = useSelector(store, _temp$2);
545
+ const multichain = useMultichainContext();
546
+ let t0;
547
+ if ($[0] !== multichain) {
548
+ t0 = multichain.getAggregateStore();
549
+ $[0] = multichain;
550
+ $[1] = t0;
551
+ } else t0 = $[1];
552
+ const walletStates = useSelector(t0, _temp2);
553
+ let t1;
554
+ let wallets;
555
+ if ($[2] !== chainOptions || $[3] !== selectedWalletType || $[4] !== walletStates || $[5] !== walletTypes) {
556
+ wallets = deriveSelectionWallets(walletTypes, walletStates, chainOptions);
557
+ t1 = selectedWalletType ? wallets.find((wallet) => wallet.type === selectedWalletType) ?? null : null;
558
+ $[2] = chainOptions;
559
+ $[3] = selectedWalletType;
560
+ $[4] = walletStates;
561
+ $[5] = walletTypes;
562
+ $[6] = t1;
563
+ $[7] = wallets;
564
+ } else {
565
+ t1 = $[6];
566
+ wallets = $[7];
567
+ }
568
+ const selectedWallet = t1;
569
+ let t2;
570
+ if ($[8] !== selectedWalletType) {
571
+ t2 = getChainSelectionMode(selectedWalletType, walletSupportForChain);
572
+ $[8] = selectedWalletType;
573
+ $[9] = t2;
574
+ } else t2 = $[9];
575
+ const chainSelectionMode = t2;
576
+ let t3;
577
+ if ($[10] !== selectedCaip2s || $[11] !== selectedWalletType) {
578
+ t3 = buildConnectArgs(selectedWalletType, selectedCaip2s);
579
+ $[10] = selectedCaip2s;
580
+ $[11] = selectedWalletType;
581
+ $[12] = t3;
582
+ } else t3 = $[12];
583
+ const connectArgs = t3;
584
+ let t4;
585
+ if ($[13] !== fixedCaip2 || $[14] !== walletStates) {
586
+ t4 = (walletType) => {
587
+ const state = walletStates[walletType];
588
+ const caip2 = fixedCaip2 ?? state?.caip2;
589
+ return caip2 ? [caip2] : [];
590
+ };
591
+ $[13] = fixedCaip2;
592
+ $[14] = walletStates;
593
+ $[15] = t4;
594
+ } else t4 = $[15];
595
+ const preselectFor = t4;
596
+ let t5;
597
+ if ($[16] !== preselectFor || $[17] !== store) {
598
+ t5 = (walletType_0) => {
599
+ const preselect = preselectFor(walletType_0);
600
+ const args = buildConnectArgs(walletType_0, preselect);
601
+ if (!args) throw new Error(`Cannot build connect args for "${walletType_0}": no chains available. Ensure the wallet has chains configured or a chain is selected.`);
602
+ store.trigger.selectWallet({
603
+ walletType: walletType_0,
604
+ preselect
605
+ });
606
+ return args;
607
+ };
608
+ $[16] = preselectFor;
609
+ $[17] = store;
610
+ $[18] = t5;
611
+ } else t5 = $[18];
612
+ const selectWallet = t5;
613
+ let t6;
614
+ if ($[19] !== store) {
615
+ t6 = () => store.trigger.clearWallet();
616
+ $[19] = store;
617
+ $[20] = t6;
618
+ } else t6 = $[20];
619
+ const clearWallet = t6;
620
+ let t7;
621
+ if ($[21] !== store) {
622
+ t7 = (caip2_0) => store.trigger.toggleCaip2({ caip2: caip2_0 });
623
+ $[21] = store;
624
+ $[22] = t7;
625
+ } else t7 = $[22];
626
+ const toggleCaip2 = t7;
627
+ let t8;
628
+ if ($[23] !== store) {
629
+ t8 = (caip2s) => store.trigger.setSelectedCaip2s({ caip2s });
630
+ $[23] = store;
631
+ $[24] = t8;
632
+ } else t8 = $[24];
633
+ const setSelectedCaip2s = t8;
634
+ let t9;
635
+ if ($[25] !== store) {
636
+ t9 = () => store.trigger.reset();
637
+ $[25] = store;
638
+ $[26] = t9;
639
+ } else t9 = $[26];
640
+ const reset = t9;
641
+ let t10;
642
+ if ($[27] !== selectedWallet?.caip2s) {
643
+ t10 = selectedWallet?.caip2s ?? [];
644
+ $[27] = selectedWallet?.caip2s;
645
+ $[28] = t10;
646
+ } else t10 = $[28];
647
+ let t11;
648
+ if ($[29] !== chainSelectionMode || $[30] !== clearWallet || $[31] !== fixedCaip2 || $[32] !== mode || $[33] !== reset || $[34] !== selectWallet || $[35] !== selectedCaip2s || $[36] !== selectedWallet || $[37] !== selectedWalletType || $[38] !== setSelectedCaip2s || $[39] !== t10 || $[40] !== toggleCaip2 || $[41] !== wallets) {
649
+ t11 = {
650
+ mode,
651
+ fixedCaip2,
652
+ wallets,
653
+ selectedWalletType,
654
+ selectedWallet,
655
+ selectedCaip2s,
656
+ availableCaip2s: t10,
657
+ chainSelectionMode,
658
+ selectWallet,
659
+ clearWallet,
660
+ toggleCaip2,
661
+ setSelectedCaip2s,
662
+ reset
663
+ };
664
+ $[29] = chainSelectionMode;
665
+ $[30] = clearWallet;
666
+ $[31] = fixedCaip2;
667
+ $[32] = mode;
668
+ $[33] = reset;
669
+ $[34] = selectWallet;
670
+ $[35] = selectedCaip2s;
671
+ $[36] = selectedWallet;
672
+ $[37] = selectedWalletType;
673
+ $[38] = setSelectedCaip2s;
674
+ $[39] = t10;
675
+ $[40] = toggleCaip2;
676
+ $[41] = wallets;
677
+ $[42] = t11;
678
+ } else t11 = $[42];
679
+ const base = t11;
680
+ let t12;
681
+ if ($[43] !== base || $[44] !== connectArgs) {
682
+ t12 = connectArgs ? {
683
+ ...base,
684
+ canConnect: true,
685
+ connectArgs
686
+ } : {
687
+ ...base,
688
+ canConnect: false,
689
+ connectArgs: null
690
+ };
691
+ $[43] = base;
692
+ $[44] = connectArgs;
693
+ $[45] = t12;
694
+ } else t12 = $[45];
695
+ return t12;
696
+ }
697
+ function _temp2(snapshot_0) {
698
+ return snapshot_0.context.wallets;
699
+ }
700
+ function _temp$2(snapshot) {
701
+ return snapshot.context;
702
+ }
703
+
704
+ //#endregion
705
+ //#region src/react/hooks/use-multichain/use-multichain.tsx
706
+ /**
707
+ * Hook for wallet connection actions.
708
+ *
709
+ * Use this for connect/disconnect operations.
710
+ * For connection state, use useWallet() instead.
711
+ *
712
+ * @example
713
+ * ```tsx
714
+ * const { connect, disconnect, getConnector } = useMultichain();
715
+ *
716
+ * // Connect MetaMask to a single chain
717
+ * await connect({ wallet: 'metamask', chain: 'eip155:14' });
718
+ *
719
+ * // Connect WalletConnect to multiple chains
720
+ * await connect({ wallet: 'wallet-connect', chains: ['eip155:14', 'eip155:1'] });
721
+ *
722
+ * // Connect Ledger with options
723
+ * await connect({ wallet: 'ledger', chain: 'eip155:14', options: { bip44, ledgerHDStandard } });
724
+ *
725
+ * // Disconnect
726
+ * await disconnect('metamask');
727
+ *
728
+ * // Get connector for advanced operations
729
+ * const connector = getConnector('metamask');
730
+ * const client = connector.getClient();
731
+ * ```
732
+ */
733
+ function useMultichain() {
734
+ const $ = c(2);
735
+ const multichain = useMultichainContext();
736
+ let t0;
737
+ if ($[0] !== multichain) {
738
+ t0 = {
739
+ connect: (args) => multichain.connect(args),
740
+ disconnect: (wallet) => multichain.disconnect(wallet),
741
+ disconnectAll: () => multichain.disconnectAll(),
742
+ getConnector: (wallet_0) => multichain.getConnector(wallet_0)
743
+ };
744
+ $[0] = multichain;
745
+ $[1] = t0;
746
+ } else t0 = $[1];
747
+ return t0;
748
+ }
749
+
750
+ //#endregion
751
+ //#region src/react/hooks/use-wallet-support/use-wallet-support.ts
752
+ /**
753
+ * Hook to access wallet support configuration.
754
+ *
755
+ * @example
756
+ * ```tsx
757
+ * // Get all wallets
758
+ * const wallets = useWalletSupport();
759
+ *
760
+ * // Exclude specific wallets
761
+ * const simpleWallets = useWalletSupport({ exclude: ['ledger'] });
762
+ *
763
+ * // All wallet info with chains and mode
764
+ * wallets // [{ type: 'metamask', name: 'MetaMask', chains: [...], singleChain: true }, ...]
765
+ *
766
+ * // Find specific wallet
767
+ * const mm = wallets.find(w => w.type === 'metamask');
768
+ * mm.chains // ['eip155:14', 'eip155:16', ...]
769
+ * mm.singleChain // true
770
+ * ```
771
+ */
772
+ function useWalletSupport(filter) {
773
+ const $ = c(3);
774
+ const multichain = useMultichainContext();
775
+ const excludeList = filter?.exclude;
776
+ let t0;
777
+ if ($[0] !== excludeList || $[1] !== multichain) {
778
+ const walletTypes = multichain.getWalletTypes();
779
+ t0 = (excludeList ? walletTypes.filter((type) => !excludeList.includes(type)) : walletTypes).map(_temp$1);
780
+ $[0] = excludeList;
781
+ $[1] = multichain;
782
+ $[2] = t0;
783
+ } else t0 = $[2];
784
+ return t0;
785
+ }
786
+ function _temp$1(type_0) {
787
+ return {
788
+ type: type_0,
789
+ name: walletLabels[type_0],
790
+ chains: [...walletSupportForChain[type_0].chains],
791
+ singleChain: walletSupportForChain[type_0].canConnect === "single-at-once"
792
+ };
793
+ }
794
+
795
+ //#endregion
796
+ //#region src/react/hooks/use-wallet/use-wallet.tsx
797
+ /**
798
+ * Hook to access a specific wallet's state and connector.
799
+ *
800
+ * @example
801
+ * ```tsx
802
+ * const { state, connector, isConnected } = useWallet('metamask');
803
+ *
804
+ * if (isConnected) {
805
+ * const client = connector.getClient();
806
+ * await client.getPublicClient().readContract({...});
807
+ * }
808
+ * ```
809
+ */
810
+ function useWallet(walletType) {
811
+ const $ = c(13);
812
+ const multichain = useMultichainContext();
813
+ let t0;
814
+ if ($[0] !== multichain) {
815
+ t0 = multichain.getAggregateStore();
816
+ $[0] = multichain;
817
+ $[1] = t0;
818
+ } else t0 = $[1];
819
+ let t1;
820
+ if ($[2] !== walletType) {
821
+ t1 = (s) => s.context.wallets[walletType];
822
+ $[2] = walletType;
823
+ $[3] = t1;
824
+ } else t1 = $[3];
825
+ const state = useSelector(t0, t1);
826
+ let t2;
827
+ if ($[4] !== multichain || $[5] !== walletType) {
828
+ t2 = multichain.getConnector(walletType);
829
+ $[4] = multichain;
830
+ $[5] = walletType;
831
+ $[6] = t2;
832
+ } else t2 = $[6];
833
+ const connector = t2;
834
+ const t3 = state?.connectionState === "connected";
835
+ const t4 = state?.connectionState === "connecting";
836
+ let t5;
837
+ if ($[7] !== connector || $[8] !== state || $[9] !== t3 || $[10] !== t4 || $[11] !== walletType) {
838
+ t5 = {
839
+ state,
840
+ connector,
841
+ walletType,
842
+ isConnected: t3,
843
+ isConnecting: t4
844
+ };
845
+ $[7] = connector;
846
+ $[8] = state;
847
+ $[9] = t3;
848
+ $[10] = t4;
849
+ $[11] = walletType;
850
+ $[12] = t5;
851
+ } else t5 = $[12];
852
+ return t5;
853
+ }
854
+
855
+ //#endregion
856
+ //#region src/react/hooks/use-wallets/use-wallets.ts
857
+ const useWallets = () => {
858
+ const $ = c(4);
859
+ const multichain = useMultichainContext();
860
+ const walletTypes = multichain.getWalletTypes();
861
+ let t0;
862
+ if ($[0] !== multichain) {
863
+ t0 = multichain.getAggregateStore();
864
+ $[0] = multichain;
865
+ $[1] = t0;
866
+ } else t0 = $[1];
867
+ const wallets = useSelector(t0, _temp);
868
+ let t1;
869
+ if ($[2] !== wallets) {
870
+ t1 = (type) => ({
871
+ state: wallets[type],
872
+ type
873
+ });
874
+ $[2] = wallets;
875
+ $[3] = t1;
876
+ } else t1 = $[3];
877
+ return walletTypes.map(t1);
878
+ };
879
+ function _temp(s) {
880
+ return s.context.wallets;
881
+ }
882
+
883
+ //#endregion
884
+ export { useMultichainSelection as a, useLedgerSelection as c, MultichainProvider as d, useMultichain as i, useChain as l, useWallet as n, MultichainSelectionProvider as o, useWalletSupport as r, useMultichainEvents as s, useWallets as t, useChainSupport as u };
885
+ //# sourceMappingURL=use-wallets-DXRPNM7H.mjs.map