@gluwa/connect-kit 0.1.0-next.0 → 0.1.0-next.2
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/CHANGELOG.md +12 -0
- package/dist/index.d.ts +52 -4
- package/dist/index.js +651 -308
- package/dist/package.json +3 -1
- package/package.json +3 -1
- package/src/ConnectKitProvider.tsx +169 -0
- package/src/ConnectModal.scss +38 -0
- package/src/ConnectModal.tsx +246 -199
- package/src/components/QRFrame.tsx +43 -0
- package/src/creditConnectConnector.ts +61 -13
- package/src/hooks/useWCState.ts +150 -0
- package/src/hooks/useWagmiConnect.ts +68 -45
- package/src/index.ts +13 -1
- package/src/types.ts +22 -4
- package/src/views/CreditWalletView.tsx +4 -17
- package/src/views/MetaMaskView.tsx +5 -30
- package/src/views/SwitchChainView.tsx +67 -0
- package/src/views/WalletConnectView.tsx +10 -70
- package/tsup.config.ts +12 -1
- package/dist/_esm-PE6HOEBI.js +0 -3909
- package/dist/ccip-UBX2BH3T.js +0 -15
- package/dist/chunk-6KUZ225H.js +0 -5259
- package/dist/chunk-EVEWD66F.js +0 -447
- package/dist/chunk-U2IU7TQD.js +0 -45
- package/dist/secp256k1-FYSVLDVL.js +0 -2311
package/dist/index.js
CHANGED
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
} from "./chunk-6KUZ225H.js";
|
|
5
|
-
import "./chunk-EVEWD66F.js";
|
|
6
|
-
import {
|
|
7
|
-
__name
|
|
8
|
-
} from "./chunk-U2IU7TQD.js";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
4
|
|
|
10
5
|
// src/ConnectModal.tsx
|
|
11
|
-
import { useState, useEffect as useEffect4, useCallback as
|
|
6
|
+
import { useState as useState3, useEffect as useEffect4, useCallback as useCallback3, useRef as useRef3, useMemo as useMemo4 } from "react";
|
|
12
7
|
|
|
13
8
|
// src/ConnectModal.scss
|
|
14
9
|
var css = `.ck-root {
|
|
@@ -146,6 +141,42 @@ var css = `.ck-root {
|
|
|
146
141
|
.ck-btn-primary:hover {
|
|
147
142
|
background: rgba(255, 255, 255, 0.22);
|
|
148
143
|
}
|
|
144
|
+
.ck-btn-primary:disabled {
|
|
145
|
+
opacity: 0.6;
|
|
146
|
+
cursor: not-allowed;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.ck-btn-secondary {
|
|
150
|
+
display: inline-flex;
|
|
151
|
+
align-items: center;
|
|
152
|
+
justify-content: center;
|
|
153
|
+
padding: 8px 16px;
|
|
154
|
+
border-radius: 8px;
|
|
155
|
+
font-size: 14px;
|
|
156
|
+
font-weight: 500;
|
|
157
|
+
cursor: pointer;
|
|
158
|
+
white-space: nowrap;
|
|
159
|
+
color: rgba(255, 255, 255, 0.75);
|
|
160
|
+
background: transparent;
|
|
161
|
+
border: 1px solid rgba(255, 255, 255, 0.18);
|
|
162
|
+
}
|
|
163
|
+
.ck-btn-secondary:hover {
|
|
164
|
+
color: #fff;
|
|
165
|
+
border-color: rgba(255, 255, 255, 0.32);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.ck-view__actions {
|
|
169
|
+
display: flex;
|
|
170
|
+
flex-direction: column;
|
|
171
|
+
gap: 8px;
|
|
172
|
+
width: 100%;
|
|
173
|
+
margin-top: 16px;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.ck-view__caption--error {
|
|
177
|
+
color: #ff8080;
|
|
178
|
+
margin-top: 8px;
|
|
179
|
+
}
|
|
149
180
|
|
|
150
181
|
.ck-connector-list {
|
|
151
182
|
display: flex;
|
|
@@ -589,7 +620,7 @@ var css = `.ck-root {
|
|
|
589
620
|
document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css));
|
|
590
621
|
|
|
591
622
|
// src/ConnectModal.tsx
|
|
592
|
-
import { useConfig as useConfig2 } from "wagmi";
|
|
623
|
+
import { useAccount, useConfig as useConfig2, useDisconnect } from "wagmi";
|
|
593
624
|
|
|
594
625
|
// assets/creditwallet.png
|
|
595
626
|
var creditwallet_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAAtNJREFUeAHVWDFs00AUfWe7oYVSWdAxQEfUCZiQqEQykDUdGBAL0IERlQGxMbAhBpDYGEBMMDCEtUtbqZXYuiHGCDEymDZqqZr4+N/OuW579jmO5aRPcs8+n68v/7//798BYwah65x23Rp8NOltjQa4UmIORfwzgbYE2kJSa+FTx/PWToyJP7iuO9eV+AiJGsqAQMsReOp5XvuwK0amJ7FalDWyc0LbtlBXpCz1gizzpmwyDHJh6JVDgpFmVjFKkJVYUw7fCx8P5GCfY/r9Ezjzl7TvvIVnGBg+FulvSEgKclUGRhM3r0b3cnsX/u8/xnE8ppcw7ggEbnMTWoj8aOJjVWdx/svz6Hnn3iscfP+pHXuhHUkCe2+/0dWCkY+E2+dC5p9xU/lMLjUgZs4e6dv/upFooanlxRN9+x9W4JNV09DZ9kQmQu7G66DNow0mN7XcDL71Da4zEjpzd4GuW2SNTXR//EKPrkHBrrbpqtA8bOXO43dII2SZJnNIoKyVPGQYbBX+noXuzF82jrcwZnB0nXbfMgwWLwxizIKDlS3KLObcotUQm5dD3BSylcYNbfTlBWvIwRCYXLoTWbIIQoyhCOmgUoQJOxRtukAZmaitY65WKNxCuRbWGIYixKK3qpsoEtoo48jhCOLEaFUvYu/lZ+M6ZMK5F/eDsN+luZKQmKm5tFDRwssHEvw9CCYa14MfacLpyNQKvA51aR2y+wtkUv2TBjtw+2zmQu10lR8KZRZoYQnLO8qULdA/mozNHs/C7MpkQs3oPnMJS/uzfhtYaIuaa6kfkIXi9QwXXKwPHZiEAuvGz1bkr3X+enUl6nUTIU4FcVFXKB1YCYTyiJ/3+yEvjNdGMchDwSkEmQyjAh06qJOQKDHSKcQjFjdKBouZT0DUc0SITx9sgTqzRVkgr8RPPsIuDVhTtN9/SFvsK8GuttgDK4/W2HUyRUt3YDV2+A99bkdtt/T4QQAAAABJRU5ErkJggg==";
|
|
@@ -645,46 +676,54 @@ var detectMetaMaskExtension = /* @__PURE__ */ __name(() => {
|
|
|
645
676
|
|
|
646
677
|
// src/hooks/useWagmiConnect.ts
|
|
647
678
|
import { useEffect, useRef, useCallback } from "react";
|
|
648
|
-
import { useConnect,
|
|
649
|
-
var
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
679
|
+
import { useConnect, useConfig } from "wagmi";
|
|
680
|
+
var hasMetaMaskKeyword = /* @__PURE__ */ __name((value) => value.toLowerCase().includes("metamask"), "hasMetaMaskKeyword");
|
|
681
|
+
var hasWalletConnectKeyword = /* @__PURE__ */ __name((value) => value.toLowerCase().includes("walletconnect"), "hasWalletConnectKeyword");
|
|
682
|
+
var isMetaMaskConnector = /* @__PURE__ */ __name((connector) => {
|
|
683
|
+
if (connector.id === "injected" || connector.id === "metaMaskSDK") return true;
|
|
684
|
+
if (hasMetaMaskKeyword(connector.id) || hasMetaMaskKeyword(connector.name)) return true;
|
|
685
|
+
if (connector.rdns) {
|
|
686
|
+
const rdnsList = Array.isArray(connector.rdns) ? connector.rdns : [
|
|
687
|
+
connector.rdns
|
|
688
|
+
];
|
|
689
|
+
if (rdnsList.some((rdns) => hasMetaMaskKeyword(rdns))) return true;
|
|
690
|
+
}
|
|
691
|
+
return false;
|
|
692
|
+
}, "isMetaMaskConnector");
|
|
693
|
+
var isWalletConnectConnector = /* @__PURE__ */ __name((connector) => {
|
|
694
|
+
if (connector.id === "walletConnect") return true;
|
|
695
|
+
if (hasWalletConnectKeyword(connector.id) || hasWalletConnectKeyword(connector.name)) return true;
|
|
696
|
+
return false;
|
|
697
|
+
}, "isWalletConnectConnector");
|
|
698
|
+
var resolveWagmiConnector = /* @__PURE__ */ __name((connectors, connectorId) => {
|
|
699
|
+
switch (connectorId) {
|
|
700
|
+
case "CREDIT_CONNECT":
|
|
701
|
+
return connectors.find((connector) => connector.id === "credit-connect");
|
|
702
|
+
case "METAMASK":
|
|
703
|
+
return connectors.find(isMetaMaskConnector);
|
|
704
|
+
case "CREDIT_WALLET":
|
|
705
|
+
case "WALLET_CONNECT":
|
|
706
|
+
return connectors.find(isWalletConnectConnector);
|
|
707
|
+
default:
|
|
708
|
+
return void 0;
|
|
709
|
+
}
|
|
710
|
+
}, "resolveWagmiConnector");
|
|
655
711
|
var useWagmiConnect = /* @__PURE__ */ __name(({ onConnect, onError, onQrUri }) => {
|
|
656
712
|
const config = useConfig();
|
|
657
|
-
const { address, status } = useAccount();
|
|
658
713
|
const pendingConnectorId = useRef(null);
|
|
659
714
|
const onConnectRef = useRef(onConnect);
|
|
660
715
|
const onErrorRef = useRef(onError);
|
|
661
716
|
const onQrUriRef = useRef(onQrUri);
|
|
662
717
|
useEffect(() => {
|
|
663
718
|
onConnectRef.current = onConnect;
|
|
664
|
-
}, [
|
|
665
|
-
onConnect
|
|
666
|
-
]);
|
|
667
|
-
useEffect(() => {
|
|
668
719
|
onErrorRef.current = onError;
|
|
669
|
-
}, [
|
|
670
|
-
onError
|
|
671
|
-
]);
|
|
672
|
-
useEffect(() => {
|
|
673
720
|
onQrUriRef.current = onQrUri;
|
|
674
721
|
}, [
|
|
722
|
+
onConnect,
|
|
723
|
+
onError,
|
|
675
724
|
onQrUri
|
|
676
725
|
]);
|
|
677
|
-
const {
|
|
678
|
-
mutation: {
|
|
679
|
-
onError(error) {
|
|
680
|
-
const id = pendingConnectorId.current;
|
|
681
|
-
if (id) {
|
|
682
|
-
onErrorRef.current(error, id);
|
|
683
|
-
pendingConnectorId.current = null;
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
}
|
|
687
|
-
});
|
|
726
|
+
const { connectAsync, reset, isPending } = useConnect();
|
|
688
727
|
useEffect(() => {
|
|
689
728
|
const handler = /* @__PURE__ */ __name((data) => {
|
|
690
729
|
const msg = data;
|
|
@@ -706,38 +745,36 @@ var useWagmiConnect = /* @__PURE__ */ __name(({ onConnect, onError, onQrUri }) =
|
|
|
706
745
|
}, [
|
|
707
746
|
config.connectors
|
|
708
747
|
]);
|
|
709
|
-
useEffect(() => {
|
|
710
|
-
if (status === "connected" && address && pendingConnectorId.current) {
|
|
711
|
-
const id = pendingConnectorId.current;
|
|
712
|
-
pendingConnectorId.current = null;
|
|
713
|
-
onConnectRef.current({
|
|
714
|
-
address,
|
|
715
|
-
connectorId: id
|
|
716
|
-
});
|
|
717
|
-
}
|
|
718
|
-
}, [
|
|
719
|
-
status,
|
|
720
|
-
address
|
|
721
|
-
]);
|
|
722
748
|
const triggerConnect = useCallback((connectorId) => {
|
|
723
|
-
const
|
|
724
|
-
if (!wagmiId) {
|
|
725
|
-
onErrorRef.current(new Error(`No wagmi connector mapped for ${connectorId}`), connectorId);
|
|
726
|
-
return;
|
|
727
|
-
}
|
|
728
|
-
const connector = config.connectors.find((c) => c.id === wagmiId);
|
|
749
|
+
const connector = resolveWagmiConnector(config.connectors, connectorId);
|
|
729
750
|
if (!connector) {
|
|
730
|
-
onErrorRef.current(new Error(`
|
|
751
|
+
onErrorRef.current(new Error(`No wagmi connector found for ${connectorId}`), connectorId);
|
|
731
752
|
return;
|
|
732
753
|
}
|
|
733
754
|
onQrUriRef.current(null);
|
|
734
755
|
pendingConnectorId.current = connectorId;
|
|
735
|
-
|
|
756
|
+
connectAsync({
|
|
736
757
|
connector
|
|
758
|
+
}).then((result) => {
|
|
759
|
+
var _a;
|
|
760
|
+
if (pendingConnectorId.current !== connectorId) return;
|
|
761
|
+
const address = (_a = result.accounts) == null ? void 0 : _a[0];
|
|
762
|
+
if (!address) {
|
|
763
|
+
throw new Error("Connected but no account returned");
|
|
764
|
+
}
|
|
765
|
+
pendingConnectorId.current = null;
|
|
766
|
+
onConnectRef.current({
|
|
767
|
+
address,
|
|
768
|
+
connectorId
|
|
769
|
+
});
|
|
770
|
+
}).catch((error) => {
|
|
771
|
+
if (pendingConnectorId.current !== connectorId) return;
|
|
772
|
+
pendingConnectorId.current = null;
|
|
773
|
+
onErrorRef.current(error, connectorId);
|
|
737
774
|
});
|
|
738
775
|
}, [
|
|
739
776
|
config.connectors,
|
|
740
|
-
|
|
777
|
+
connectAsync
|
|
741
778
|
]);
|
|
742
779
|
const cancelConnect = useCallback(() => {
|
|
743
780
|
pendingConnectorId.current = null;
|
|
@@ -753,6 +790,111 @@ var useWagmiConnect = /* @__PURE__ */ __name(({ onConnect, onError, onQrUri }) =
|
|
|
753
790
|
};
|
|
754
791
|
}, "useWagmiConnect");
|
|
755
792
|
|
|
793
|
+
// src/hooks/useWCState.ts
|
|
794
|
+
import { useState, useRef as useRef2, useCallback as useCallback2 } from "react";
|
|
795
|
+
var fetchWCWalletList = /* @__PURE__ */ __name(async (projectId) => {
|
|
796
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
|
|
797
|
+
const all = [];
|
|
798
|
+
let page = 1;
|
|
799
|
+
const entries = 100;
|
|
800
|
+
while (page <= 10) {
|
|
801
|
+
const url = new URL("https://explorer-api.walletconnect.com/v3/wallets");
|
|
802
|
+
url.searchParams.set("projectId", projectId);
|
|
803
|
+
url.searchParams.set("entries", String(entries));
|
|
804
|
+
url.searchParams.set("page", String(page));
|
|
805
|
+
const res = await fetch(url.toString());
|
|
806
|
+
if (!res.ok) throw new Error(`Failed to fetch wallet list: ${res.status}`);
|
|
807
|
+
const json = await res.json();
|
|
808
|
+
const listings = Object.values((_a = json.listings) != null ? _a : {});
|
|
809
|
+
for (const w of listings) {
|
|
810
|
+
all.push({
|
|
811
|
+
id: w.id,
|
|
812
|
+
name: w.name,
|
|
813
|
+
imageUrl: (_e = (_d = (_b = w.image_url) == null ? void 0 : _b.md) != null ? _d : (_c = w.image_url) == null ? void 0 : _c.sm) != null ? _e : "",
|
|
814
|
+
mobileNative: (_g = (_f = w.mobile) == null ? void 0 : _f.native) != null ? _g : "",
|
|
815
|
+
mobileUniversal: (_i = (_h = w.mobile) == null ? void 0 : _h.universal) != null ? _i : "",
|
|
816
|
+
desktopNative: (_k = (_j = w.desktop) == null ? void 0 : _j.native) != null ? _k : "",
|
|
817
|
+
desktopUniversal: (_m = (_l = w.desktop) == null ? void 0 : _l.universal) != null ? _m : "",
|
|
818
|
+
appIos: (_o = (_n = w.app) == null ? void 0 : _n.ios) != null ? _o : "",
|
|
819
|
+
appAndroid: (_q = (_p = w.app) == null ? void 0 : _p.android) != null ? _q : "",
|
|
820
|
+
homepage: (_r = w.homepage) != null ? _r : ""
|
|
821
|
+
});
|
|
822
|
+
}
|
|
823
|
+
if (listings.length < entries || all.length >= json.total) break;
|
|
824
|
+
page += 1;
|
|
825
|
+
}
|
|
826
|
+
return all;
|
|
827
|
+
}, "fetchWCWalletList");
|
|
828
|
+
var useWCState = /* @__PURE__ */ __name(() => {
|
|
829
|
+
const [subView, setSubView] = useState("qr");
|
|
830
|
+
const [walletList, setWalletList] = useState([]);
|
|
831
|
+
const [walletListLoading, setWalletListLoading] = useState(false);
|
|
832
|
+
const [walletListSearch, setWalletListSearch] = useState("");
|
|
833
|
+
const [filterActive, setFilterActive] = useState(false);
|
|
834
|
+
const [selectedWallet, setSelectedWallet] = useState(null);
|
|
835
|
+
const loadedRef = useRef2(false);
|
|
836
|
+
const loadWalletList = useCallback2(async (projectId) => {
|
|
837
|
+
if (loadedRef.current) return;
|
|
838
|
+
loadedRef.current = true;
|
|
839
|
+
setWalletListLoading(true);
|
|
840
|
+
try {
|
|
841
|
+
const list = await fetchWCWalletList(projectId);
|
|
842
|
+
setWalletList(list);
|
|
843
|
+
} catch {
|
|
844
|
+
loadedRef.current = false;
|
|
845
|
+
} finally {
|
|
846
|
+
setWalletListLoading(false);
|
|
847
|
+
}
|
|
848
|
+
}, []);
|
|
849
|
+
const onShowList = useCallback2(() => setSubView("list"), []);
|
|
850
|
+
const onSelectWallet = useCallback2((wallet) => {
|
|
851
|
+
setSelectedWallet(wallet);
|
|
852
|
+
setSubView("wallet");
|
|
853
|
+
}, []);
|
|
854
|
+
const onSearchChange = useCallback2((q) => setWalletListSearch(q), []);
|
|
855
|
+
const onFilterToggle = useCallback2(() => setFilterActive((prev) => !prev), []);
|
|
856
|
+
const handleBack = useCallback2(() => {
|
|
857
|
+
if (subView === "wallet") {
|
|
858
|
+
setSelectedWallet(null);
|
|
859
|
+
setSubView("list");
|
|
860
|
+
return true;
|
|
861
|
+
}
|
|
862
|
+
if (subView === "list") {
|
|
863
|
+
setSubView("qr");
|
|
864
|
+
return true;
|
|
865
|
+
}
|
|
866
|
+
return false;
|
|
867
|
+
}, [
|
|
868
|
+
subView
|
|
869
|
+
]);
|
|
870
|
+
const resetView = useCallback2(() => {
|
|
871
|
+
setSubView("qr");
|
|
872
|
+
setSelectedWallet(null);
|
|
873
|
+
}, []);
|
|
874
|
+
const reset = useCallback2(() => {
|
|
875
|
+
setSubView("qr");
|
|
876
|
+
setWalletListSearch("");
|
|
877
|
+
setFilterActive(false);
|
|
878
|
+
setSelectedWallet(null);
|
|
879
|
+
}, []);
|
|
880
|
+
return {
|
|
881
|
+
subView,
|
|
882
|
+
walletList,
|
|
883
|
+
walletListLoading,
|
|
884
|
+
walletListSearch,
|
|
885
|
+
filterActive,
|
|
886
|
+
selectedWallet,
|
|
887
|
+
loadWalletList,
|
|
888
|
+
onShowList,
|
|
889
|
+
onSelectWallet,
|
|
890
|
+
onSearchChange,
|
|
891
|
+
onFilterToggle,
|
|
892
|
+
handleBack,
|
|
893
|
+
resetView,
|
|
894
|
+
reset
|
|
895
|
+
};
|
|
896
|
+
}, "useWCState");
|
|
897
|
+
|
|
756
898
|
// assets/graphic.png
|
|
757
899
|
var graphic_default = "data:image/png;base64,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";
|
|
758
900
|
|
|
@@ -771,11 +913,41 @@ var IdleView = /* @__PURE__ */ __name(() => /* @__PURE__ */ React.createElement(
|
|
|
771
913
|
}, "Choose a wallet on the left to start connecting.")), "IdleView");
|
|
772
914
|
|
|
773
915
|
// src/views/CreditWalletView.tsx
|
|
774
|
-
import { useEffect as useEffect2 } from "react";
|
|
916
|
+
import { useEffect as useEffect2, useMemo } from "react";
|
|
917
|
+
|
|
918
|
+
// src/components/QRFrame.tsx
|
|
775
919
|
import { QRCodeSVG } from "qrcode.react";
|
|
920
|
+
var QRFrame = /* @__PURE__ */ __name(({ qrUri, logoUrl }) => /* @__PURE__ */ React.createElement("div", {
|
|
921
|
+
className: `ck-qr-frame ${!qrUri ? "ck-qr-frame--loading" : ""}`
|
|
922
|
+
}, qrUri ? /* @__PURE__ */ React.createElement(QRCodeSVG, {
|
|
923
|
+
value: qrUri,
|
|
924
|
+
size: 196,
|
|
925
|
+
level: "H",
|
|
926
|
+
imageSettings: logoUrl ? {
|
|
927
|
+
src: logoUrl,
|
|
928
|
+
width: 40,
|
|
929
|
+
height: 40,
|
|
930
|
+
excavate: true
|
|
931
|
+
} : void 0
|
|
932
|
+
}) : /* @__PURE__ */ React.createElement("div", {
|
|
933
|
+
className: "ck-qr-spinner",
|
|
934
|
+
"aria-label": "Loading QR code"
|
|
935
|
+
})), "QRFrame");
|
|
936
|
+
var CopyLinkButton = /* @__PURE__ */ __name(({ qrUri }) => {
|
|
937
|
+
if (!qrUri) return null;
|
|
938
|
+
return /* @__PURE__ */ React.createElement("button", {
|
|
939
|
+
type: "button",
|
|
940
|
+
className: "ck-copy-link",
|
|
941
|
+
onClick: /* @__PURE__ */ __name(() => {
|
|
942
|
+
navigator.clipboard.writeText(qrUri);
|
|
943
|
+
}, "onClick")
|
|
944
|
+
}, "Copy link");
|
|
945
|
+
}, "CopyLinkButton");
|
|
946
|
+
|
|
947
|
+
// src/views/CreditWalletView.tsx
|
|
776
948
|
var CreditWalletView = /* @__PURE__ */ __name(({ connectorId, qrUri }) => {
|
|
777
949
|
const { downloadUrl: downloadUrl2, logoUrl, deepLinkBase: deepLinkBase2 } = CONNECTOR_META[connectorId];
|
|
778
|
-
const isMobile = isMobileDevice();
|
|
950
|
+
const isMobile = useMemo(() => isMobileDevice(), []);
|
|
779
951
|
useEffect2(() => {
|
|
780
952
|
if (isMobile && qrUri && deepLinkBase2) {
|
|
781
953
|
tryOpenDeepLink(qrUri, deepLinkBase2);
|
|
@@ -792,22 +964,10 @@ var CreditWalletView = /* @__PURE__ */ __name(({ connectorId, qrUri }) => {
|
|
|
792
964
|
}
|
|
793
965
|
return /* @__PURE__ */ React.createElement("div", {
|
|
794
966
|
className: "ck-view ck-view--qr"
|
|
795
|
-
}, /* @__PURE__ */ React.createElement(
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
size: 196,
|
|
800
|
-
level: "H",
|
|
801
|
-
imageSettings: logoUrl ? {
|
|
802
|
-
src: logoUrl,
|
|
803
|
-
width: 40,
|
|
804
|
-
height: 40,
|
|
805
|
-
excavate: true
|
|
806
|
-
} : void 0
|
|
807
|
-
}) : /* @__PURE__ */ React.createElement("div", {
|
|
808
|
-
className: "ck-qr-spinner",
|
|
809
|
-
"aria-label": "Loading QR code"
|
|
810
|
-
})), /* @__PURE__ */ React.createElement("p", {
|
|
967
|
+
}, /* @__PURE__ */ React.createElement(QRFrame, {
|
|
968
|
+
qrUri,
|
|
969
|
+
logoUrl
|
|
970
|
+
}), /* @__PURE__ */ React.createElement("p", {
|
|
811
971
|
className: "ck-view__caption"
|
|
812
972
|
}, "Open the Credit Wallet app and scan the QR"), downloadUrl2 && /* @__PURE__ */ React.createElement("div", {
|
|
813
973
|
className: "ck-download-card"
|
|
@@ -826,11 +986,10 @@ var CreditWalletView = /* @__PURE__ */ __name(({ connectorId, qrUri }) => {
|
|
|
826
986
|
}, "CreditWalletView");
|
|
827
987
|
|
|
828
988
|
// src/views/MetaMaskView.tsx
|
|
829
|
-
import { useEffect as useEffect3 } from "react";
|
|
830
|
-
import { QRCodeSVG as QRCodeSVG2 } from "qrcode.react";
|
|
989
|
+
import { useEffect as useEffect3, useMemo as useMemo2 } from "react";
|
|
831
990
|
var { downloadUrl, deepLinkBase } = CONNECTOR_META.METAMASK;
|
|
832
991
|
var MetaMaskView = /* @__PURE__ */ __name(({ qrUri, hasExtension, logoUrl }) => {
|
|
833
|
-
const isMobile = isMobileDevice();
|
|
992
|
+
const isMobile = useMemo2(() => isMobileDevice(), []);
|
|
834
993
|
useEffect3(() => {
|
|
835
994
|
if (isMobile && qrUri && deepLinkBase) {
|
|
836
995
|
tryOpenDeepLink(qrUri, deepLinkBase);
|
|
@@ -861,28 +1020,12 @@ var MetaMaskView = /* @__PURE__ */ __name(({ qrUri, hasExtension, logoUrl }) =>
|
|
|
861
1020
|
}
|
|
862
1021
|
return /* @__PURE__ */ React.createElement("div", {
|
|
863
1022
|
className: "ck-view ck-view--qr"
|
|
864
|
-
}, /* @__PURE__ */ React.createElement(
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
imageSettings: logoUrl ? {
|
|
871
|
-
src: logoUrl,
|
|
872
|
-
width: 40,
|
|
873
|
-
height: 40,
|
|
874
|
-
excavate: true
|
|
875
|
-
} : void 0
|
|
876
|
-
}) : /* @__PURE__ */ React.createElement("div", {
|
|
877
|
-
className: "ck-qr-spinner",
|
|
878
|
-
"aria-label": "Loading QR code"
|
|
879
|
-
})), qrUri && /* @__PURE__ */ React.createElement("button", {
|
|
880
|
-
type: "button",
|
|
881
|
-
className: "ck-copy-link",
|
|
882
|
-
onClick: /* @__PURE__ */ __name(() => {
|
|
883
|
-
navigator.clipboard.writeText(qrUri);
|
|
884
|
-
}, "onClick")
|
|
885
|
-
}, "Copy link"), downloadUrl && /* @__PURE__ */ React.createElement("div", {
|
|
1023
|
+
}, /* @__PURE__ */ React.createElement(QRFrame, {
|
|
1024
|
+
qrUri,
|
|
1025
|
+
logoUrl
|
|
1026
|
+
}), /* @__PURE__ */ React.createElement(CopyLinkButton, {
|
|
1027
|
+
qrUri
|
|
1028
|
+
}), downloadUrl && /* @__PURE__ */ React.createElement("div", {
|
|
886
1029
|
className: "ck-download-card"
|
|
887
1030
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
888
1031
|
className: "ck-download-card__text"
|
|
@@ -897,8 +1040,7 @@ var MetaMaskView = /* @__PURE__ */ __name(({ qrUri, hasExtension, logoUrl }) =>
|
|
|
897
1040
|
}, "MetaMaskView");
|
|
898
1041
|
|
|
899
1042
|
// src/views/WalletConnectView.tsx
|
|
900
|
-
import { useMemo } from "react";
|
|
901
|
-
import { QRCodeSVG as QRCodeSVG3 } from "qrcode.react";
|
|
1043
|
+
import { useMemo as useMemo3 } from "react";
|
|
902
1044
|
|
|
903
1045
|
// assets/deeplink.png
|
|
904
1046
|
var deeplink_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAAj5JREFUeAGVU0FoE0EU/TO7aVJMTKwUoSDmUqWC2B6EhFwSwYonCYp4UoonKUWiJ/GwG0+9JdKG6ikVz9JepLRSEpB0rZeGKlRtDxak0FOTwzYtuzvf+ZtujLU09JOwM/PnvT9/5j0Gh8L4OJFkQrkNHKOIUEMGEUBRZ3IBfDwbTz3+1b6feYOVUjGyb5saCqwHdoP5ofRI7R/iuakocEdHzne61f3sUCpTaxEQeM8yZ4BhNn5jrAzHRGWhMMgBcwGflSYSTotUWQDLdAJTJIZHq1SoYfs19wRGaSrKLKHFhkdH4ARhzE/owKGsggSjw7PtyUZj+frW1++Ljmj2iEJgMHIq03f53itvz16Xnfdbqu62EL/192ZfPL1//nd1bVEoyruLsYesX/59PvWlWTfz7UVS1D/jF2BpfnLWW9xen9Hlh3vzb59eX1368OYKjZPJpEq57R/unoM2Jqc5Z2znYM4d29HWjWmLxpW5wjW/Gqj29vhXiaRcLouNz5QTmkfAOAurQEJphugbuKtsrb13fhpFi8m0/I3bjtXVe9a/urH8FkOR0+zcpbTiEZDQuECxuVLKtZHc4eGesAvujz14PpB49My2nPFQJOSBhXt8ej06BUlXCEgmbo7pcHxwD+wSLBSKIF+Pk3iYbIOIOhC0wJVSYRBB1On1mkr02Tog075ImXYgcc3GLcx1m0Gd5i0zleQ9kDCk68JHuc71i737BFGcIbBnNvZfBc91DEEKJUw3TS2CA5uoiNnDfvkDT/YDNH96aT8AAAAASUVORK5CYII=";
|
|
@@ -915,30 +1057,14 @@ var WalletConnectView = /* @__PURE__ */ __name((props) => {
|
|
|
915
1057
|
}, "WalletConnectView");
|
|
916
1058
|
var WCQRView = /* @__PURE__ */ __name(({ qrUri, logoUrl, walletList, onShowList }) => /* @__PURE__ */ React.createElement("div", {
|
|
917
1059
|
className: "ck-view ck-view--qr"
|
|
918
|
-
}, /* @__PURE__ */ React.createElement(
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
size: 196,
|
|
923
|
-
level: "H",
|
|
924
|
-
imageSettings: logoUrl ? {
|
|
925
|
-
src: logoUrl,
|
|
926
|
-
width: 40,
|
|
927
|
-
height: 40,
|
|
928
|
-
excavate: true
|
|
929
|
-
} : void 0
|
|
930
|
-
}) : /* @__PURE__ */ React.createElement("div", {
|
|
931
|
-
className: "ck-qr-spinner",
|
|
932
|
-
"aria-label": "Loading QR code"
|
|
933
|
-
})), /* @__PURE__ */ React.createElement("p", {
|
|
1060
|
+
}, /* @__PURE__ */ React.createElement(QRFrame, {
|
|
1061
|
+
qrUri,
|
|
1062
|
+
logoUrl
|
|
1063
|
+
}), /* @__PURE__ */ React.createElement("p", {
|
|
934
1064
|
className: "ck-view__caption"
|
|
935
|
-
}, "Scan this QR Code with your phone"),
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
onClick: /* @__PURE__ */ __name(() => {
|
|
939
|
-
navigator.clipboard.writeText(qrUri);
|
|
940
|
-
}, "onClick")
|
|
941
|
-
}, "Copy link"), /* @__PURE__ */ React.createElement("button", {
|
|
1065
|
+
}, "Scan this QR Code with your phone"), /* @__PURE__ */ React.createElement(CopyLinkButton, {
|
|
1066
|
+
qrUri
|
|
1067
|
+
}), /* @__PURE__ */ React.createElement("button", {
|
|
942
1068
|
type: "button",
|
|
943
1069
|
className: "ck-all-wallets-btn",
|
|
944
1070
|
onClick: onShowList
|
|
@@ -950,10 +1076,10 @@ var WCQRView = /* @__PURE__ */ __name(({ qrUri, logoUrl, walletList, onShowList
|
|
|
950
1076
|
}, "All Wallets"), walletList.length > 0 && /* @__PURE__ */ React.createElement("span", {
|
|
951
1077
|
className: "ck-all-wallets-btn__count"
|
|
952
1078
|
}, walletList.length, "+"))), "WCQRView");
|
|
953
|
-
var CREDIT_WALLET_NAME =
|
|
1079
|
+
var CREDIT_WALLET_NAME = CONNECTOR_META.CREDIT_WALLET.label;
|
|
954
1080
|
var WalletListView = /* @__PURE__ */ __name(({ walletList, walletListLoading, walletListSearch, walletListFilterActive, logoUrl, qrUri, onSelectWallet, onSearchChange, onFilterToggle }) => {
|
|
955
|
-
const isMobile = isMobileDevice();
|
|
956
|
-
const filtered =
|
|
1081
|
+
const isMobile = useMemo3(() => isMobileDevice(), []);
|
|
1082
|
+
const filtered = useMemo3(() => {
|
|
957
1083
|
const q = walletListSearch.trim().toLowerCase();
|
|
958
1084
|
let list = walletList;
|
|
959
1085
|
if (walletListFilterActive) {
|
|
@@ -975,11 +1101,10 @@ var WalletListView = /* @__PURE__ */ __name(({ walletList, walletListLoading, wa
|
|
|
975
1101
|
walletListFilterActive
|
|
976
1102
|
]);
|
|
977
1103
|
const handleClickWallet = /* @__PURE__ */ __name((wallet) => {
|
|
978
|
-
|
|
979
|
-
if (isMobile && uri) {
|
|
1104
|
+
if (isMobile && qrUri) {
|
|
980
1105
|
const target = wallet.mobileNative || wallet.mobileUniversal;
|
|
981
1106
|
if (target) {
|
|
982
|
-
tryOpenDeepLink(
|
|
1107
|
+
tryOpenDeepLink(qrUri, target);
|
|
983
1108
|
return;
|
|
984
1109
|
}
|
|
985
1110
|
}
|
|
@@ -1058,32 +1183,14 @@ var WalletQRView = /* @__PURE__ */ __name(({ wallet, qrUri }) => {
|
|
|
1058
1183
|
const logoSrc = wallet.imageUrl;
|
|
1059
1184
|
return /* @__PURE__ */ React.createElement("div", {
|
|
1060
1185
|
className: "ck-view ck-view--qr"
|
|
1061
|
-
}, /* @__PURE__ */ React.createElement(
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
size: 196,
|
|
1066
|
-
level: "H",
|
|
1067
|
-
...logoSrc && {
|
|
1068
|
-
imageSettings: {
|
|
1069
|
-
src: logoSrc,
|
|
1070
|
-
width: 40,
|
|
1071
|
-
height: 40,
|
|
1072
|
-
excavate: true
|
|
1073
|
-
}
|
|
1074
|
-
}
|
|
1075
|
-
}) : /* @__PURE__ */ React.createElement("div", {
|
|
1076
|
-
className: "ck-qr-spinner",
|
|
1077
|
-
"aria-label": "Loading QR code"
|
|
1078
|
-
})), /* @__PURE__ */ React.createElement("p", {
|
|
1186
|
+
}, /* @__PURE__ */ React.createElement(QRFrame, {
|
|
1187
|
+
qrUri,
|
|
1188
|
+
logoUrl: logoSrc
|
|
1189
|
+
}), /* @__PURE__ */ React.createElement("p", {
|
|
1079
1190
|
className: "ck-view__caption"
|
|
1080
|
-
}, "Scan this QR Code with your phone"),
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
onClick: /* @__PURE__ */ __name(() => {
|
|
1084
|
-
navigator.clipboard.writeText(qrUri);
|
|
1085
|
-
}, "onClick")
|
|
1086
|
-
}, "Copy link"), downloadUrl2 && /* @__PURE__ */ React.createElement("div", {
|
|
1191
|
+
}, "Scan this QR Code with your phone"), /* @__PURE__ */ React.createElement(CopyLinkButton, {
|
|
1192
|
+
qrUri
|
|
1193
|
+
}), downloadUrl2 && /* @__PURE__ */ React.createElement("div", {
|
|
1087
1194
|
className: "ck-download-card"
|
|
1088
1195
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
1089
1196
|
className: "ck-download-card__text"
|
|
@@ -1097,6 +1204,50 @@ var WalletQRView = /* @__PURE__ */ __name(({ wallet, qrUri }) => {
|
|
|
1097
1204
|
}, "Download")));
|
|
1098
1205
|
}, "WalletQRView");
|
|
1099
1206
|
|
|
1207
|
+
// src/views/SwitchChainView.tsx
|
|
1208
|
+
import { useState as useState2 } from "react";
|
|
1209
|
+
import { useSwitchChain } from "wagmi";
|
|
1210
|
+
var SwitchChainView = /* @__PURE__ */ __name(({ currentChainId, requiredChainId, requiredChainName, onDisconnect, onLog }) => {
|
|
1211
|
+
const { switchChainAsync, isPending } = useSwitchChain();
|
|
1212
|
+
const [error, setError] = useState2(null);
|
|
1213
|
+
const targetLabel = requiredChainName != null ? requiredChainName : `chain ${requiredChainId}`;
|
|
1214
|
+
const handleSwitch = /* @__PURE__ */ __name(() => {
|
|
1215
|
+
setError(null);
|
|
1216
|
+
switchChainAsync({
|
|
1217
|
+
chainId: requiredChainId
|
|
1218
|
+
}).catch((err) => {
|
|
1219
|
+
const normalized = err instanceof Error ? err : new Error(String(err));
|
|
1220
|
+
const code = typeof err === "object" && err !== null && "code" in err ? err.code : void 0;
|
|
1221
|
+
if (code === 4902) {
|
|
1222
|
+
onLog == null ? void 0 : onLog("[connect-kit] chain not registered in wallet (4902)", normalized);
|
|
1223
|
+
} else {
|
|
1224
|
+
onLog == null ? void 0 : onLog(`[connect-kit] switch chain failed: ${normalized.message}`, normalized);
|
|
1225
|
+
}
|
|
1226
|
+
setError(normalized);
|
|
1227
|
+
});
|
|
1228
|
+
}, "handleSwitch");
|
|
1229
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
1230
|
+
className: "ck-view ck-view--switch-chain"
|
|
1231
|
+
}, /* @__PURE__ */ React.createElement("h4", {
|
|
1232
|
+
className: "ck-view__title"
|
|
1233
|
+
}, "Wrong network"), /* @__PURE__ */ React.createElement("p", {
|
|
1234
|
+
className: "ck-view__description"
|
|
1235
|
+
}, currentChainId != null ? `Connected to chain ${currentChainId}. Please switch to ${targetLabel} to continue.` : `Please switch to ${targetLabel} to continue.`), /* @__PURE__ */ React.createElement("div", {
|
|
1236
|
+
className: "ck-view__actions"
|
|
1237
|
+
}, /* @__PURE__ */ React.createElement("button", {
|
|
1238
|
+
type: "button",
|
|
1239
|
+
className: "ck-btn-primary",
|
|
1240
|
+
onClick: handleSwitch,
|
|
1241
|
+
disabled: isPending
|
|
1242
|
+
}, isPending ? "Waiting for wallet\u2026" : `Switch to ${targetLabel}`), /* @__PURE__ */ React.createElement("button", {
|
|
1243
|
+
type: "button",
|
|
1244
|
+
className: "ck-btn-secondary",
|
|
1245
|
+
onClick: onDisconnect
|
|
1246
|
+
}, "Disconnect")), error && /* @__PURE__ */ React.createElement("p", {
|
|
1247
|
+
className: "ck-view__caption ck-view__caption--error"
|
|
1248
|
+
}, error.message));
|
|
1249
|
+
}, "SwitchChainView");
|
|
1250
|
+
|
|
1100
1251
|
// src/ConnectModal.tsx
|
|
1101
1252
|
var RECENT_KEY = "connect-kit:recent";
|
|
1102
1253
|
var readRecentConnector = /* @__PURE__ */ __name(() => {
|
|
@@ -1112,39 +1263,15 @@ var writeRecentConnector = /* @__PURE__ */ __name((id) => {
|
|
|
1112
1263
|
} catch {
|
|
1113
1264
|
}
|
|
1114
1265
|
}, "writeRecentConnector");
|
|
1115
|
-
var
|
|
1116
|
-
var _a, _b
|
|
1117
|
-
const
|
|
1118
|
-
|
|
1119
|
-
const
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
url.searchParams.set("page", String(page));
|
|
1125
|
-
const res = await fetch(url.toString());
|
|
1126
|
-
if (!res.ok) throw new Error(`Failed to fetch wallet list: ${res.status}`);
|
|
1127
|
-
const json = await res.json();
|
|
1128
|
-
const listings = Object.values((_a = json.listings) != null ? _a : {});
|
|
1129
|
-
for (const w of listings) {
|
|
1130
|
-
all.push({
|
|
1131
|
-
id: w.id,
|
|
1132
|
-
name: w.name,
|
|
1133
|
-
imageUrl: (_e = (_d = (_b = w.image_url) == null ? void 0 : _b.md) != null ? _d : (_c = w.image_url) == null ? void 0 : _c.sm) != null ? _e : "",
|
|
1134
|
-
mobileNative: (_g = (_f = w.mobile) == null ? void 0 : _f.native) != null ? _g : "",
|
|
1135
|
-
mobileUniversal: (_i = (_h = w.mobile) == null ? void 0 : _h.universal) != null ? _i : "",
|
|
1136
|
-
desktopNative: (_k = (_j = w.desktop) == null ? void 0 : _j.native) != null ? _k : "",
|
|
1137
|
-
desktopUniversal: (_m = (_l = w.desktop) == null ? void 0 : _l.universal) != null ? _m : "",
|
|
1138
|
-
appIos: (_o = (_n = w.app) == null ? void 0 : _n.ios) != null ? _o : "",
|
|
1139
|
-
appAndroid: (_q = (_p = w.app) == null ? void 0 : _p.android) != null ? _q : "",
|
|
1140
|
-
homepage: (_r = w.homepage) != null ? _r : ""
|
|
1141
|
-
});
|
|
1142
|
-
}
|
|
1143
|
-
if (listings.length < entries || all.length >= json.total) break;
|
|
1144
|
-
page += 1;
|
|
1145
|
-
}
|
|
1146
|
-
return all;
|
|
1147
|
-
}, "fetchWCWalletList");
|
|
1266
|
+
var classifyError = /* @__PURE__ */ __name((error) => {
|
|
1267
|
+
var _a, _b;
|
|
1268
|
+
const code = typeof error === "object" && error !== null && "code" in error ? error.code : void 0;
|
|
1269
|
+
if (code === 4001) return "rejected";
|
|
1270
|
+
const message = (_b = (_a = error.message) == null ? void 0 : _a.toLowerCase()) != null ? _b : "";
|
|
1271
|
+
if (message.includes("user rejected") || message.includes("user denied")) return "rejected";
|
|
1272
|
+
if (message.includes("unsupported") || message.includes("not installed")) return "unsupported";
|
|
1273
|
+
return "unknown";
|
|
1274
|
+
}, "classifyError");
|
|
1148
1275
|
var SelectorPane = /* @__PURE__ */ __name(({ connectors, selected, recentConnector, onSelect, onClose }) => {
|
|
1149
1276
|
const hasRecent = recentConnector !== null && connectors.includes(recentConnector);
|
|
1150
1277
|
const recentConnectors = hasRecent ? [
|
|
@@ -1210,8 +1337,8 @@ var ConnectorItem = /* @__PURE__ */ __name(({ id, isSelected, isRecent, onSelect
|
|
|
1210
1337
|
className: "ck-connector-item__badge"
|
|
1211
1338
|
}, "Recent"));
|
|
1212
1339
|
}, "ConnectorItem");
|
|
1213
|
-
var DetailPane = /* @__PURE__ */ __name(({ selectedConnector, qrUri, hasMetaMaskExtension, connectorLogoMap,
|
|
1214
|
-
const title = getDetailTitle(selectedConnector, hasMetaMaskExtension,
|
|
1340
|
+
var DetailPane = /* @__PURE__ */ __name(({ selectedConnector, qrUri, hasMetaMaskExtension, connectorLogoMap, wc, errorOverride, onBack, onClose }) => {
|
|
1341
|
+
const title = getDetailTitle(selectedConnector, hasMetaMaskExtension, wc.subView, wc.selectedWallet);
|
|
1215
1342
|
const showBack = selectedConnector !== null;
|
|
1216
1343
|
return /* @__PURE__ */ React.createElement("div", {
|
|
1217
1344
|
className: "ck-pane ck-pane--detail"
|
|
@@ -1231,7 +1358,7 @@ var DetailPane = /* @__PURE__ */ __name(({ selectedConnector, qrUri, hasMetaMask
|
|
|
1231
1358
|
"aria-label": "Close"
|
|
1232
1359
|
})), /* @__PURE__ */ React.createElement("div", {
|
|
1233
1360
|
className: "ck-pane__body"
|
|
1234
|
-
}, !selectedConnector && /* @__PURE__ */ React.createElement(IdleView, null), (selectedConnector === "CREDIT_CONNECT" || selectedConnector === "CREDIT_WALLET") && /* @__PURE__ */ React.createElement(CreditWalletView, {
|
|
1361
|
+
}, errorOverride || /* @__PURE__ */ React.createElement(React.Fragment, null, !selectedConnector && /* @__PURE__ */ React.createElement(IdleView, null), (selectedConnector === "CREDIT_CONNECT" || selectedConnector === "CREDIT_WALLET") && /* @__PURE__ */ React.createElement(CreditWalletView, {
|
|
1235
1362
|
connectorId: selectedConnector,
|
|
1236
1363
|
qrUri
|
|
1237
1364
|
}), selectedConnector === "METAMASK" && /* @__PURE__ */ React.createElement(MetaMaskView, {
|
|
@@ -1239,19 +1366,19 @@ var DetailPane = /* @__PURE__ */ __name(({ selectedConnector, qrUri, hasMetaMask
|
|
|
1239
1366
|
hasExtension: hasMetaMaskExtension,
|
|
1240
1367
|
logoUrl: connectorLogoMap.METAMASK
|
|
1241
1368
|
}), selectedConnector === "WALLET_CONNECT" && /* @__PURE__ */ React.createElement(WalletConnectView, {
|
|
1242
|
-
subView:
|
|
1369
|
+
subView: wc.subView,
|
|
1243
1370
|
qrUri,
|
|
1244
1371
|
logoUrl: connectorLogoMap.WALLET_CONNECT,
|
|
1245
|
-
walletList:
|
|
1246
|
-
walletListLoading:
|
|
1247
|
-
walletListSearch:
|
|
1248
|
-
walletListFilterActive:
|
|
1249
|
-
selectedWallet:
|
|
1250
|
-
onShowList:
|
|
1251
|
-
onSelectWallet:
|
|
1252
|
-
onSearchChange:
|
|
1253
|
-
onFilterToggle:
|
|
1254
|
-
})));
|
|
1372
|
+
walletList: wc.walletList,
|
|
1373
|
+
walletListLoading: wc.walletListLoading,
|
|
1374
|
+
walletListSearch: wc.walletListSearch,
|
|
1375
|
+
walletListFilterActive: wc.filterActive,
|
|
1376
|
+
selectedWallet: wc.selectedWallet,
|
|
1377
|
+
onShowList: wc.onShowList,
|
|
1378
|
+
onSelectWallet: wc.onSelectWallet,
|
|
1379
|
+
onSearchChange: wc.onSearchChange,
|
|
1380
|
+
onFilterToggle: wc.onFilterToggle
|
|
1381
|
+
}))));
|
|
1255
1382
|
}, "DetailPane");
|
|
1256
1383
|
var getDetailTitle = /* @__PURE__ */ __name((connector, hasMetaMaskExtension, wcSubView, wcSelectedWallet) => {
|
|
1257
1384
|
if (!connector) return "";
|
|
@@ -1263,28 +1390,51 @@ var getDetailTitle = /* @__PURE__ */ __name((connector, hasMetaMaskExtension, wc
|
|
|
1263
1390
|
if (connector === "METAMASK" && hasMetaMaskExtension) return "MetaMask";
|
|
1264
1391
|
return CONNECTOR_META[connector].detailTitle;
|
|
1265
1392
|
}, "getDetailTitle");
|
|
1393
|
+
var resolveConnectorsFromConfig = /* @__PURE__ */ __name((connectorsConfig) => {
|
|
1394
|
+
if (!connectorsConfig) return [];
|
|
1395
|
+
const connectors = [];
|
|
1396
|
+
if (connectorsConfig.creditWallet === "walletConnect") connectors.push("CREDIT_WALLET");
|
|
1397
|
+
if (connectorsConfig.creditWallet === "creditConnect") connectors.push("CREDIT_CONNECT");
|
|
1398
|
+
if (connectorsConfig.metamask) connectors.push("METAMASK");
|
|
1399
|
+
if (connectorsConfig.walletConnect) connectors.push("WALLET_CONNECT");
|
|
1400
|
+
return connectors;
|
|
1401
|
+
}, "resolveConnectorsFromConfig");
|
|
1266
1402
|
var ConnectModal = /* @__PURE__ */ __name((props) => {
|
|
1267
|
-
if (props.
|
|
1403
|
+
if (!props.open) return null;
|
|
1404
|
+
const resolvedConnectors = resolveConnectorsFromConfig(props.connectors);
|
|
1405
|
+
if (resolvedConnectors.includes("CREDIT_WALLET") && resolvedConnectors.includes("CREDIT_CONNECT")) {
|
|
1268
1406
|
throw new Error("CREDIT_WALLET and CREDIT_CONNECT cannot be used together");
|
|
1269
1407
|
}
|
|
1270
|
-
if (
|
|
1271
|
-
|
|
1408
|
+
if (resolvedConnectors.length === 0) {
|
|
1409
|
+
throw new Error("At least one connector must be configured");
|
|
1410
|
+
}
|
|
1411
|
+
return /* @__PURE__ */ React.createElement(ConnectModalInner, {
|
|
1412
|
+
...props,
|
|
1413
|
+
connectors: resolvedConnectors
|
|
1414
|
+
});
|
|
1272
1415
|
}, "ConnectModal");
|
|
1273
|
-
var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, onClose, onLog, wcProjectId }) => {
|
|
1416
|
+
var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, onClose, onLog, wcProjectId, requiredChainId, renderConnectError }) => {
|
|
1274
1417
|
var _a;
|
|
1275
|
-
const [selectedConnector, setSelectedConnector] =
|
|
1276
|
-
const [qrUriMap, setQrUriMap] =
|
|
1277
|
-
const pendingQrConnectorRef =
|
|
1278
|
-
const [recentConnector, setRecentConnector] =
|
|
1279
|
-
const [hasMetaMaskExtension, setHasMetaMaskExtension] =
|
|
1280
|
-
const [
|
|
1281
|
-
const
|
|
1282
|
-
const
|
|
1283
|
-
const
|
|
1284
|
-
const
|
|
1285
|
-
const
|
|
1286
|
-
const
|
|
1287
|
-
|
|
1418
|
+
const [selectedConnector, setSelectedConnector] = useState3(null);
|
|
1419
|
+
const [qrUriMap, setQrUriMap] = useState3({});
|
|
1420
|
+
const pendingQrConnectorRef = useRef3(null);
|
|
1421
|
+
const [recentConnector, setRecentConnector] = useState3(null);
|
|
1422
|
+
const [hasMetaMaskExtension, setHasMetaMaskExtension] = useState3(false);
|
|
1423
|
+
const [errorState, setErrorState] = useState3(null);
|
|
1424
|
+
const wc = useWCState();
|
|
1425
|
+
const account = useAccount();
|
|
1426
|
+
const { disconnectAsync } = useDisconnect();
|
|
1427
|
+
const wagmiConfig = useConfig2();
|
|
1428
|
+
const chainMismatch = requiredChainId != null && account.status === "connected" && account.chainId != null && account.chainId !== requiredChainId;
|
|
1429
|
+
const requiredChainName = useMemo4(() => {
|
|
1430
|
+
var _a2;
|
|
1431
|
+
if (requiredChainId == null) return void 0;
|
|
1432
|
+
return (_a2 = wagmiConfig.chains.find((chain) => chain.id === requiredChainId)) == null ? void 0 : _a2.name;
|
|
1433
|
+
}, [
|
|
1434
|
+
wagmiConfig.chains,
|
|
1435
|
+
requiredChainId
|
|
1436
|
+
]);
|
|
1437
|
+
const handleQrUri = useCallback3((uri) => {
|
|
1288
1438
|
if (uri) {
|
|
1289
1439
|
const id = pendingQrConnectorRef.current;
|
|
1290
1440
|
if (id) setQrUriMap((prev) => ({
|
|
@@ -1293,16 +1443,17 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1293
1443
|
}));
|
|
1294
1444
|
}
|
|
1295
1445
|
}, []);
|
|
1296
|
-
const handleConnect =
|
|
1446
|
+
const handleConnect = useCallback3((result) => {
|
|
1447
|
+
setErrorState(null);
|
|
1297
1448
|
onConnect(result);
|
|
1298
1449
|
onClose();
|
|
1299
1450
|
}, [
|
|
1300
1451
|
onConnect,
|
|
1301
1452
|
onClose
|
|
1302
1453
|
]);
|
|
1303
|
-
const handleError =
|
|
1304
|
-
|
|
1305
|
-
|
|
1454
|
+
const handleError = useCallback3((error, connectorId) => {
|
|
1455
|
+
const normalizedError = error instanceof Error ? error : new Error(String(error));
|
|
1456
|
+
onLog == null ? void 0 : onLog(`[connect-kit] connection failed (${connectorId}): ${normalizedError.message}`, normalizedError);
|
|
1306
1457
|
setQrUriMap((prev) => {
|
|
1307
1458
|
const next = {
|
|
1308
1459
|
...prev
|
|
@@ -1310,21 +1461,35 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1310
1461
|
delete next[connectorId];
|
|
1311
1462
|
return next;
|
|
1312
1463
|
});
|
|
1313
|
-
|
|
1314
|
-
|
|
1464
|
+
wc.resetView();
|
|
1465
|
+
if (renderConnectError) {
|
|
1466
|
+
setErrorState({
|
|
1467
|
+
connectorId,
|
|
1468
|
+
error: normalizedError
|
|
1469
|
+
});
|
|
1470
|
+
} else {
|
|
1471
|
+
setSelectedConnector(null);
|
|
1472
|
+
}
|
|
1315
1473
|
}, [
|
|
1316
|
-
onLog
|
|
1474
|
+
onLog,
|
|
1475
|
+
wc.resetView,
|
|
1476
|
+
renderConnectError
|
|
1317
1477
|
]);
|
|
1318
1478
|
const { triggerConnect, cancelConnect } = useWagmiConnect({
|
|
1319
1479
|
onConnect: handleConnect,
|
|
1320
1480
|
onError: handleError,
|
|
1321
1481
|
onQrUri: handleQrUri
|
|
1322
1482
|
});
|
|
1323
|
-
const
|
|
1324
|
-
const connectorLogoMap = useMemo2(() => {
|
|
1483
|
+
const connectorLogoMap = useMemo4(() => {
|
|
1325
1484
|
const map = {};
|
|
1326
|
-
|
|
1327
|
-
|
|
1485
|
+
const connectorIds = [
|
|
1486
|
+
"CREDIT_CONNECT",
|
|
1487
|
+
"CREDIT_WALLET",
|
|
1488
|
+
"METAMASK",
|
|
1489
|
+
"WALLET_CONNECT"
|
|
1490
|
+
];
|
|
1491
|
+
for (const connectorId of connectorIds) {
|
|
1492
|
+
const wagmiConnector = resolveWagmiConnector(wagmiConfig.connectors, connectorId);
|
|
1328
1493
|
if (wagmiConnector == null ? void 0 : wagmiConnector.icon) map[connectorId] = wagmiConnector.icon;
|
|
1329
1494
|
}
|
|
1330
1495
|
return map;
|
|
@@ -1340,86 +1505,144 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1340
1505
|
setSelectedConnector(null);
|
|
1341
1506
|
setQrUriMap({});
|
|
1342
1507
|
pendingQrConnectorRef.current = null;
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
setWcFilterActive(false);
|
|
1346
|
-
setWcSelectedWallet(null);
|
|
1508
|
+
setErrorState(null);
|
|
1509
|
+
wc.reset();
|
|
1347
1510
|
cancelConnect();
|
|
1348
1511
|
}
|
|
1349
1512
|
}, [
|
|
1350
1513
|
open,
|
|
1351
|
-
cancelConnect
|
|
1514
|
+
cancelConnect,
|
|
1515
|
+
wc.reset
|
|
1352
1516
|
]);
|
|
1353
|
-
const
|
|
1354
|
-
if (
|
|
1355
|
-
wcLoadedRef.current = true;
|
|
1356
|
-
setWcWalletListLoading(true);
|
|
1357
|
-
try {
|
|
1358
|
-
const list = await fetchWCWalletList(projectId);
|
|
1359
|
-
setWcWalletList(list);
|
|
1360
|
-
} catch {
|
|
1361
|
-
wcLoadedRef.current = false;
|
|
1362
|
-
} finally {
|
|
1363
|
-
setWcWalletListLoading(false);
|
|
1364
|
-
}
|
|
1365
|
-
}, []);
|
|
1366
|
-
const handleSelectConnector = useCallback2((id) => {
|
|
1367
|
-
if (id === selectedConnector) return;
|
|
1517
|
+
const handleSelectConnector = useCallback3((id) => {
|
|
1518
|
+
if (id === selectedConnector && !errorState) return;
|
|
1368
1519
|
pendingQrConnectorRef.current = id;
|
|
1369
1520
|
setSelectedConnector(id);
|
|
1370
|
-
|
|
1371
|
-
|
|
1521
|
+
setErrorState(null);
|
|
1522
|
+
wc.resetView();
|
|
1372
1523
|
writeRecentConnector(id);
|
|
1373
1524
|
setRecentConnector(id);
|
|
1374
1525
|
if (id === "WALLET_CONNECT" && wcProjectId) {
|
|
1375
|
-
|
|
1526
|
+
wc.loadWalletList(wcProjectId);
|
|
1376
1527
|
}
|
|
1377
1528
|
cancelConnect();
|
|
1378
1529
|
triggerConnect(id);
|
|
1379
1530
|
}, [
|
|
1380
1531
|
selectedConnector,
|
|
1532
|
+
errorState,
|
|
1381
1533
|
triggerConnect,
|
|
1382
1534
|
cancelConnect,
|
|
1383
1535
|
wcProjectId,
|
|
1384
|
-
|
|
1536
|
+
wc.resetView,
|
|
1537
|
+
wc.loadWalletList
|
|
1385
1538
|
]);
|
|
1386
|
-
const
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
setWcSubView("wallet");
|
|
1392
|
-
}, []);
|
|
1393
|
-
const handleWCFilterToggle = useCallback2(() => {
|
|
1394
|
-
setWcFilterActive((prev) => !prev);
|
|
1395
|
-
}, []);
|
|
1396
|
-
const handleBack = useCallback2(() => {
|
|
1397
|
-
if (selectedConnector === "WALLET_CONNECT") {
|
|
1398
|
-
if (wcSubView === "wallet") {
|
|
1399
|
-
setWcSelectedWallet(null);
|
|
1400
|
-
setWcSubView("list");
|
|
1401
|
-
return;
|
|
1402
|
-
}
|
|
1403
|
-
if (wcSubView === "list") {
|
|
1404
|
-
setWcSubView("qr");
|
|
1405
|
-
return;
|
|
1406
|
-
}
|
|
1539
|
+
const handleBack = useCallback3(() => {
|
|
1540
|
+
if (errorState) {
|
|
1541
|
+
setErrorState(null);
|
|
1542
|
+
setSelectedConnector(null);
|
|
1543
|
+
return;
|
|
1407
1544
|
}
|
|
1545
|
+
if (selectedConnector === "WALLET_CONNECT" && wc.handleBack()) return;
|
|
1408
1546
|
pendingQrConnectorRef.current = null;
|
|
1409
1547
|
setSelectedConnector(null);
|
|
1410
1548
|
cancelConnect();
|
|
1411
1549
|
}, [
|
|
1412
1550
|
selectedConnector,
|
|
1413
|
-
|
|
1551
|
+
errorState,
|
|
1552
|
+
wc.handleBack,
|
|
1553
|
+
cancelConnect
|
|
1554
|
+
]);
|
|
1555
|
+
const handleSwitchChainDisconnect = useCallback3(() => {
|
|
1556
|
+
disconnectAsync().catch((err) => {
|
|
1557
|
+
const normalized = err instanceof Error ? err : new Error(String(err));
|
|
1558
|
+
onLog == null ? void 0 : onLog(`[connect-kit] disconnect failed: ${normalized.message}`, normalized);
|
|
1559
|
+
});
|
|
1560
|
+
}, [
|
|
1561
|
+
disconnectAsync,
|
|
1562
|
+
onLog
|
|
1563
|
+
]);
|
|
1564
|
+
const handleOverlayClick = useCallback3(() => {
|
|
1565
|
+
if (chainMismatch) return;
|
|
1566
|
+
onClose();
|
|
1567
|
+
}, [
|
|
1568
|
+
chainMismatch,
|
|
1569
|
+
onClose
|
|
1570
|
+
]);
|
|
1571
|
+
const handleCloseClick = useCallback3(() => {
|
|
1572
|
+
if (chainMismatch) {
|
|
1573
|
+
handleSwitchChainDisconnect();
|
|
1574
|
+
return;
|
|
1575
|
+
}
|
|
1576
|
+
onClose();
|
|
1577
|
+
}, [
|
|
1578
|
+
chainMismatch,
|
|
1579
|
+
handleSwitchChainDisconnect,
|
|
1580
|
+
onClose
|
|
1581
|
+
]);
|
|
1582
|
+
const renderedError = useMemo4(() => {
|
|
1583
|
+
if (!errorState || !renderConnectError) return null;
|
|
1584
|
+
const ctx = {
|
|
1585
|
+
connectorId: errorState.connectorId,
|
|
1586
|
+
reason: classifyError(errorState.error),
|
|
1587
|
+
error: errorState.error,
|
|
1588
|
+
retry: /* @__PURE__ */ __name(() => {
|
|
1589
|
+
const id = errorState.connectorId;
|
|
1590
|
+
setErrorState(null);
|
|
1591
|
+
pendingQrConnectorRef.current = id;
|
|
1592
|
+
cancelConnect();
|
|
1593
|
+
triggerConnect(id);
|
|
1594
|
+
}, "retry"),
|
|
1595
|
+
dismiss: /* @__PURE__ */ __name(() => {
|
|
1596
|
+
setErrorState(null);
|
|
1597
|
+
setSelectedConnector(null);
|
|
1598
|
+
}, "dismiss")
|
|
1599
|
+
};
|
|
1600
|
+
return renderConnectError(ctx);
|
|
1601
|
+
}, [
|
|
1602
|
+
errorState,
|
|
1603
|
+
renderConnectError,
|
|
1604
|
+
triggerConnect,
|
|
1414
1605
|
cancelConnect
|
|
1415
1606
|
]);
|
|
1607
|
+
if (chainMismatch && requiredChainId != null) {
|
|
1608
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
1609
|
+
className: "ck-root"
|
|
1610
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
1611
|
+
className: "ck-overlay",
|
|
1612
|
+
onClick: handleOverlayClick
|
|
1613
|
+
}), /* @__PURE__ */ React.createElement("div", {
|
|
1614
|
+
className: "ck-modal ck-modal--switch-chain",
|
|
1615
|
+
role: "dialog",
|
|
1616
|
+
"aria-modal": "true",
|
|
1617
|
+
"aria-label": "Switch network"
|
|
1618
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
1619
|
+
className: "ck-pane"
|
|
1620
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
1621
|
+
className: "ck-pane__header"
|
|
1622
|
+
}, /* @__PURE__ */ React.createElement("h3", {
|
|
1623
|
+
className: "ck-pane__title"
|
|
1624
|
+
}, "Switch network"), /* @__PURE__ */ React.createElement("button", {
|
|
1625
|
+
type: "button",
|
|
1626
|
+
className: "ck-btn-close",
|
|
1627
|
+
onClick: handleCloseClick,
|
|
1628
|
+
"aria-label": "Cancel and disconnect"
|
|
1629
|
+
})), /* @__PURE__ */ React.createElement("div", {
|
|
1630
|
+
className: "ck-pane__body"
|
|
1631
|
+
}, /* @__PURE__ */ React.createElement(SwitchChainView, {
|
|
1632
|
+
currentChainId: account.chainId,
|
|
1633
|
+
requiredChainId,
|
|
1634
|
+
requiredChainName,
|
|
1635
|
+
onDisconnect: handleSwitchChainDisconnect,
|
|
1636
|
+
onLog
|
|
1637
|
+
})))));
|
|
1638
|
+
}
|
|
1416
1639
|
return /* @__PURE__ */ React.createElement("div", {
|
|
1417
1640
|
className: "ck-root"
|
|
1418
1641
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
1419
1642
|
className: "ck-overlay",
|
|
1420
|
-
onClick:
|
|
1643
|
+
onClick: handleOverlayClick
|
|
1421
1644
|
}), /* @__PURE__ */ React.createElement("div", {
|
|
1422
|
-
className: `ck-modal${selectedConnector ? " ck-modal--has-detail" : ""}`,
|
|
1645
|
+
className: `ck-modal${(selectedConnector != null ? selectedConnector : errorState) ? " ck-modal--has-detail" : ""}`,
|
|
1423
1646
|
role: "dialog",
|
|
1424
1647
|
"aria-modal": "true",
|
|
1425
1648
|
"aria-label": "Connect Wallet"
|
|
@@ -1428,38 +1651,128 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1428
1651
|
selected: selectedConnector,
|
|
1429
1652
|
recentConnector,
|
|
1430
1653
|
onSelect: handleSelectConnector,
|
|
1431
|
-
onClose
|
|
1654
|
+
onClose: handleCloseClick
|
|
1432
1655
|
}), /* @__PURE__ */ React.createElement(DetailPane, {
|
|
1433
1656
|
selectedConnector,
|
|
1434
1657
|
qrUri: selectedConnector ? (_a = qrUriMap[selectedConnector]) != null ? _a : null : null,
|
|
1435
1658
|
hasMetaMaskExtension,
|
|
1436
1659
|
connectorLogoMap,
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
wcWalletListLoading,
|
|
1440
|
-
wcWalletListSearch,
|
|
1441
|
-
wcFilterActive,
|
|
1442
|
-
wcSelectedWallet,
|
|
1660
|
+
wc,
|
|
1661
|
+
errorOverride: renderedError,
|
|
1443
1662
|
onBack: handleBack,
|
|
1444
|
-
onClose
|
|
1445
|
-
onWCShowList: handleWCShowList,
|
|
1446
|
-
onWCSelectWallet: handleWCSelectWallet,
|
|
1447
|
-
onWCSearchChange: setWcWalletListSearch,
|
|
1448
|
-
onWCFilterToggle: handleWCFilterToggle
|
|
1663
|
+
onClose: handleCloseClick
|
|
1449
1664
|
})));
|
|
1450
1665
|
}, "ConnectModalInner");
|
|
1451
1666
|
|
|
1452
|
-
//
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
__name(
|
|
1667
|
+
// src/ConnectKitProvider.tsx
|
|
1668
|
+
import { createContext, useCallback as useCallback4, useContext, useEffect as useEffect5, useMemo as useMemo5, useRef as useRef4, useState as useState4 } from "react";
|
|
1669
|
+
import { useAccount as useAccount2, useDisconnect as useDisconnect2 } from "wagmi";
|
|
1670
|
+
var ConnectKitContext = /* @__PURE__ */ createContext(null);
|
|
1671
|
+
var resolveConnectorId = /* @__PURE__ */ __name((wagmiConnectorId) => {
|
|
1672
|
+
if (!wagmiConnectorId) return null;
|
|
1673
|
+
if (wagmiConnectorId === "credit-connect") return "CREDIT_CONNECT";
|
|
1674
|
+
if (wagmiConnectorId === "walletConnect") return "WALLET_CONNECT";
|
|
1675
|
+
const lower = wagmiConnectorId.toLowerCase();
|
|
1676
|
+
if (lower.includes("metamask") || wagmiConnectorId === "injected") return "METAMASK";
|
|
1677
|
+
if (lower.includes("walletconnect")) return "WALLET_CONNECT";
|
|
1678
|
+
return null;
|
|
1679
|
+
}, "resolveConnectorId");
|
|
1680
|
+
var ConnectKitProvider = /* @__PURE__ */ __name(({ children, connectors, wcProjectId, requiredChainId, onConnect, onLog, renderConnectError }) => {
|
|
1681
|
+
var _a;
|
|
1682
|
+
const [isOpen, setIsOpen] = useState4(false);
|
|
1683
|
+
const [pendingResult, setPendingResult] = useState4(null);
|
|
1684
|
+
const account = useAccount2();
|
|
1685
|
+
const { disconnectAsync } = useDisconnect2();
|
|
1686
|
+
const onConnectRef = useRef4(onConnect);
|
|
1687
|
+
useEffect5(() => {
|
|
1688
|
+
onConnectRef.current = onConnect;
|
|
1689
|
+
}, [
|
|
1690
|
+
onConnect
|
|
1691
|
+
]);
|
|
1692
|
+
const chainMismatch = requiredChainId != null && account.status === "connected" && account.chainId != null && account.chainId !== requiredChainId;
|
|
1693
|
+
const effectiveOpen = isOpen || chainMismatch;
|
|
1694
|
+
const open = useCallback4(() => {
|
|
1695
|
+
setIsOpen(true);
|
|
1696
|
+
}, []);
|
|
1697
|
+
const close = useCallback4(() => {
|
|
1698
|
+
setIsOpen(false);
|
|
1699
|
+
}, []);
|
|
1700
|
+
const disconnect = useCallback4(async () => {
|
|
1701
|
+
await disconnectAsync();
|
|
1702
|
+
}, [
|
|
1703
|
+
disconnectAsync
|
|
1704
|
+
]);
|
|
1705
|
+
const handleModalConnect = useCallback4((result) => {
|
|
1706
|
+
setPendingResult(result);
|
|
1707
|
+
}, []);
|
|
1708
|
+
useEffect5(() => {
|
|
1709
|
+
var _a2;
|
|
1710
|
+
if (!pendingResult) return;
|
|
1711
|
+
if (account.status !== "connected") {
|
|
1712
|
+
setPendingResult(null);
|
|
1713
|
+
return;
|
|
1714
|
+
}
|
|
1715
|
+
if (requiredChainId != null && account.chainId !== requiredChainId) {
|
|
1716
|
+
return;
|
|
1717
|
+
}
|
|
1718
|
+
(_a2 = onConnectRef.current) == null ? void 0 : _a2.call(onConnectRef, pendingResult);
|
|
1719
|
+
setPendingResult(null);
|
|
1720
|
+
setIsOpen(false);
|
|
1721
|
+
}, [
|
|
1722
|
+
pendingResult,
|
|
1723
|
+
account.status,
|
|
1724
|
+
account.chainId,
|
|
1725
|
+
requiredChainId
|
|
1726
|
+
]);
|
|
1727
|
+
const value = useMemo5(() => {
|
|
1728
|
+
var _a2;
|
|
1729
|
+
return {
|
|
1730
|
+
isOpen: effectiveOpen,
|
|
1731
|
+
open,
|
|
1732
|
+
close,
|
|
1733
|
+
isConnected: account.status === "connected",
|
|
1734
|
+
address: account.address,
|
|
1735
|
+
connectorId: resolveConnectorId((_a2 = account.connector) == null ? void 0 : _a2.id),
|
|
1736
|
+
disconnect
|
|
1737
|
+
};
|
|
1738
|
+
}, [
|
|
1739
|
+
effectiveOpen,
|
|
1740
|
+
open,
|
|
1741
|
+
close,
|
|
1742
|
+
account.status,
|
|
1743
|
+
account.address,
|
|
1744
|
+
(_a = account.connector) == null ? void 0 : _a.id,
|
|
1745
|
+
disconnect
|
|
1746
|
+
]);
|
|
1747
|
+
return /* @__PURE__ */ React.createElement(ConnectKitContext.Provider, {
|
|
1748
|
+
value
|
|
1749
|
+
}, children, /* @__PURE__ */ React.createElement(ConnectModal, {
|
|
1750
|
+
open: effectiveOpen,
|
|
1751
|
+
connectors,
|
|
1752
|
+
wcProjectId,
|
|
1753
|
+
requiredChainId,
|
|
1754
|
+
renderConnectError,
|
|
1755
|
+
onConnect: handleModalConnect,
|
|
1756
|
+
onClose: close,
|
|
1757
|
+
onLog
|
|
1758
|
+
}));
|
|
1759
|
+
}, "ConnectKitProvider");
|
|
1760
|
+
var useConnectKit = /* @__PURE__ */ __name(() => {
|
|
1761
|
+
const ctx = useContext(ConnectKitContext);
|
|
1762
|
+
if (!ctx) {
|
|
1763
|
+
throw new Error("useConnectKit must be used within a ConnectKitProvider");
|
|
1764
|
+
}
|
|
1765
|
+
return ctx;
|
|
1766
|
+
}, "useConnectKit");
|
|
1457
1767
|
|
|
1458
1768
|
// src/creditConnectConnector.ts
|
|
1769
|
+
import { createConnector } from "@wagmi/core";
|
|
1770
|
+
import { getAddress } from "viem";
|
|
1459
1771
|
import { DappSessionManager } from "@gluwa/credit-connect-sdk/dapp";
|
|
1460
1772
|
var CONNECTOR_ID = "credit-connect";
|
|
1461
1773
|
var CONNECTOR_NAME = "Credit Wallet";
|
|
1462
1774
|
var CONNECTOR_TYPE = "credit-connect";
|
|
1775
|
+
var castConnectResult = /* @__PURE__ */ __name((value) => value, "castConnectResult");
|
|
1463
1776
|
var creditConnectConnector = /* @__PURE__ */ __name((options) => {
|
|
1464
1777
|
let manager = null;
|
|
1465
1778
|
let selectedChainId = null;
|
|
@@ -1565,10 +1878,19 @@ var creditConnectConnector = /* @__PURE__ */ __name((options) => {
|
|
|
1565
1878
|
const chainId2 = Number.parseInt(getEvmAddressInfo(session2)[0].networkIdentifier, 10);
|
|
1566
1879
|
if (!Number.isFinite(chainId2)) throw new Error(`Invalid chainId: ${chainId2}`);
|
|
1567
1880
|
selectedChainId = chainId2;
|
|
1568
|
-
|
|
1881
|
+
if ((parameters == null ? void 0 : parameters.withCapabilities) === true) {
|
|
1882
|
+
return castConnectResult({
|
|
1883
|
+
accounts: accounts2.map((address) => ({
|
|
1884
|
+
address,
|
|
1885
|
+
capabilities: {}
|
|
1886
|
+
})),
|
|
1887
|
+
chainId: chainId2
|
|
1888
|
+
});
|
|
1889
|
+
}
|
|
1890
|
+
return castConnectResult({
|
|
1569
1891
|
accounts: accounts2,
|
|
1570
1892
|
chainId: chainId2
|
|
1571
|
-
};
|
|
1893
|
+
});
|
|
1572
1894
|
}
|
|
1573
1895
|
if (m.state.status === "CONNECTING" && m.state.connectingPayload) {
|
|
1574
1896
|
(_a = options.onDisplayUri) == null ? void 0 : _a.call(options, m.state.connectingPayload);
|
|
@@ -1604,10 +1926,19 @@ var creditConnectConnector = /* @__PURE__ */ __name((options) => {
|
|
|
1604
1926
|
const chainId = Number.parseInt(getEvmAddressInfo(session)[0].networkIdentifier, 10);
|
|
1605
1927
|
if (!Number.isFinite(chainId)) throw new Error(`Invalid chainId: ${chainId}`);
|
|
1606
1928
|
selectedChainId = chainId;
|
|
1607
|
-
|
|
1929
|
+
if ((parameters == null ? void 0 : parameters.withCapabilities) === true) {
|
|
1930
|
+
return castConnectResult({
|
|
1931
|
+
accounts: accounts.map((address) => ({
|
|
1932
|
+
address,
|
|
1933
|
+
capabilities: {}
|
|
1934
|
+
})),
|
|
1935
|
+
chainId
|
|
1936
|
+
});
|
|
1937
|
+
}
|
|
1938
|
+
return castConnectResult({
|
|
1608
1939
|
accounts,
|
|
1609
1940
|
chainId
|
|
1610
|
-
};
|
|
1941
|
+
});
|
|
1611
1942
|
} catch (error) {
|
|
1612
1943
|
resetState();
|
|
1613
1944
|
throw error;
|
|
@@ -1669,9 +2000,14 @@ var creditConnectConnector = /* @__PURE__ */ __name((options) => {
|
|
|
1669
2000
|
async getProvider() {
|
|
1670
2001
|
if (provider) return provider;
|
|
1671
2002
|
await ensureManagerInitialized();
|
|
1672
|
-
|
|
2003
|
+
const createdProvider = {
|
|
1673
2004
|
request: /* @__PURE__ */ __name(async (args) => {
|
|
1674
|
-
const { method, params } = args;
|
|
2005
|
+
const { method, params: rawParams } = args;
|
|
2006
|
+
const params = Array.isArray(rawParams) ? [
|
|
2007
|
+
...rawParams
|
|
2008
|
+
] : rawParams === void 0 ? [] : [
|
|
2009
|
+
rawParams
|
|
2010
|
+
];
|
|
1675
2011
|
const session = getCurrentSession();
|
|
1676
2012
|
const getSelectedAddressInfo = /* @__PURE__ */ __name((address) => {
|
|
1677
2013
|
if (!session) throw new Error("No active session");
|
|
@@ -1778,16 +2114,21 @@ var creditConnectConnector = /* @__PURE__ */ __name((options) => {
|
|
|
1778
2114
|
throw new Error(`Unsupported provider method: ${method}`);
|
|
1779
2115
|
}, "request"),
|
|
1780
2116
|
on: /* @__PURE__ */ __name((event, listener) => {
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
2117
|
+
let listeners = providerListeners.get(event);
|
|
2118
|
+
if (!listeners) {
|
|
2119
|
+
listeners = /* @__PURE__ */ new Set();
|
|
2120
|
+
providerListeners.set(event, listeners);
|
|
2121
|
+
}
|
|
2122
|
+
listeners.add(listener);
|
|
2123
|
+
return createdProvider;
|
|
1784
2124
|
}, "on"),
|
|
1785
2125
|
removeListener: /* @__PURE__ */ __name((event, listener) => {
|
|
1786
2126
|
var _a;
|
|
1787
2127
|
(_a = providerListeners.get(event)) == null ? void 0 : _a.delete(listener);
|
|
1788
|
-
return
|
|
2128
|
+
return createdProvider;
|
|
1789
2129
|
}, "removeListener")
|
|
1790
2130
|
};
|
|
2131
|
+
provider = createdProvider;
|
|
1791
2132
|
return provider;
|
|
1792
2133
|
},
|
|
1793
2134
|
onAccountsChanged(accounts) {
|
|
@@ -1815,6 +2156,8 @@ var creditConnectConnector = /* @__PURE__ */ __name((options) => {
|
|
|
1815
2156
|
});
|
|
1816
2157
|
}, "creditConnectConnector");
|
|
1817
2158
|
export {
|
|
2159
|
+
ConnectKitProvider,
|
|
1818
2160
|
ConnectModal,
|
|
1819
|
-
creditConnectConnector
|
|
2161
|
+
creditConnectConnector,
|
|
2162
|
+
useConnectKit
|
|
1820
2163
|
};
|