@gluwa/connect-kit 0.1.0-next.0 → 0.1.0-next.1
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 +6 -0
- package/dist/index.d.ts +8 -3
- package/dist/index.js +333 -298
- package/dist/package.json +3 -1
- package/package.json +3 -1
- package/src/ConnectModal.tsx +79 -173
- 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 +9 -1
- package/src/types.ts +8 -4
- package/src/views/CreditWalletView.tsx +4 -17
- package/src/views/MetaMaskView.tsx +5 -30
- 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 useState2, 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 {
|
|
@@ -645,46 +640,54 @@ var detectMetaMaskExtension = /* @__PURE__ */ __name(() => {
|
|
|
645
640
|
|
|
646
641
|
// src/hooks/useWagmiConnect.ts
|
|
647
642
|
import { useEffect, useRef, useCallback } from "react";
|
|
648
|
-
import { useConnect,
|
|
649
|
-
var
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
643
|
+
import { useConnect, useConfig } from "wagmi";
|
|
644
|
+
var hasMetaMaskKeyword = /* @__PURE__ */ __name((value) => value.toLowerCase().includes("metamask"), "hasMetaMaskKeyword");
|
|
645
|
+
var hasWalletConnectKeyword = /* @__PURE__ */ __name((value) => value.toLowerCase().includes("walletconnect"), "hasWalletConnectKeyword");
|
|
646
|
+
var isMetaMaskConnector = /* @__PURE__ */ __name((connector) => {
|
|
647
|
+
if (connector.id === "injected" || connector.id === "metaMaskSDK") return true;
|
|
648
|
+
if (hasMetaMaskKeyword(connector.id) || hasMetaMaskKeyword(connector.name)) return true;
|
|
649
|
+
if (connector.rdns) {
|
|
650
|
+
const rdnsList = Array.isArray(connector.rdns) ? connector.rdns : [
|
|
651
|
+
connector.rdns
|
|
652
|
+
];
|
|
653
|
+
if (rdnsList.some((rdns) => hasMetaMaskKeyword(rdns))) return true;
|
|
654
|
+
}
|
|
655
|
+
return false;
|
|
656
|
+
}, "isMetaMaskConnector");
|
|
657
|
+
var isWalletConnectConnector = /* @__PURE__ */ __name((connector) => {
|
|
658
|
+
if (connector.id === "walletConnect") return true;
|
|
659
|
+
if (hasWalletConnectKeyword(connector.id) || hasWalletConnectKeyword(connector.name)) return true;
|
|
660
|
+
return false;
|
|
661
|
+
}, "isWalletConnectConnector");
|
|
662
|
+
var resolveWagmiConnector = /* @__PURE__ */ __name((connectors, connectorId) => {
|
|
663
|
+
switch (connectorId) {
|
|
664
|
+
case "CREDIT_CONNECT":
|
|
665
|
+
return connectors.find((connector) => connector.id === "credit-connect");
|
|
666
|
+
case "METAMASK":
|
|
667
|
+
return connectors.find(isMetaMaskConnector);
|
|
668
|
+
case "CREDIT_WALLET":
|
|
669
|
+
case "WALLET_CONNECT":
|
|
670
|
+
return connectors.find(isWalletConnectConnector);
|
|
671
|
+
default:
|
|
672
|
+
return void 0;
|
|
673
|
+
}
|
|
674
|
+
}, "resolveWagmiConnector");
|
|
655
675
|
var useWagmiConnect = /* @__PURE__ */ __name(({ onConnect, onError, onQrUri }) => {
|
|
656
676
|
const config = useConfig();
|
|
657
|
-
const { address, status } = useAccount();
|
|
658
677
|
const pendingConnectorId = useRef(null);
|
|
659
678
|
const onConnectRef = useRef(onConnect);
|
|
660
679
|
const onErrorRef = useRef(onError);
|
|
661
680
|
const onQrUriRef = useRef(onQrUri);
|
|
662
681
|
useEffect(() => {
|
|
663
682
|
onConnectRef.current = onConnect;
|
|
664
|
-
}, [
|
|
665
|
-
onConnect
|
|
666
|
-
]);
|
|
667
|
-
useEffect(() => {
|
|
668
683
|
onErrorRef.current = onError;
|
|
669
|
-
}, [
|
|
670
|
-
onError
|
|
671
|
-
]);
|
|
672
|
-
useEffect(() => {
|
|
673
684
|
onQrUriRef.current = onQrUri;
|
|
674
685
|
}, [
|
|
686
|
+
onConnect,
|
|
687
|
+
onError,
|
|
675
688
|
onQrUri
|
|
676
689
|
]);
|
|
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
|
-
});
|
|
690
|
+
const { connectAsync, reset, isPending } = useConnect();
|
|
688
691
|
useEffect(() => {
|
|
689
692
|
const handler = /* @__PURE__ */ __name((data) => {
|
|
690
693
|
const msg = data;
|
|
@@ -706,38 +709,36 @@ var useWagmiConnect = /* @__PURE__ */ __name(({ onConnect, onError, onQrUri }) =
|
|
|
706
709
|
}, [
|
|
707
710
|
config.connectors
|
|
708
711
|
]);
|
|
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
712
|
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);
|
|
713
|
+
const connector = resolveWagmiConnector(config.connectors, connectorId);
|
|
729
714
|
if (!connector) {
|
|
730
|
-
onErrorRef.current(new Error(`
|
|
715
|
+
onErrorRef.current(new Error(`No wagmi connector found for ${connectorId}`), connectorId);
|
|
731
716
|
return;
|
|
732
717
|
}
|
|
733
718
|
onQrUriRef.current(null);
|
|
734
719
|
pendingConnectorId.current = connectorId;
|
|
735
|
-
|
|
720
|
+
connectAsync({
|
|
736
721
|
connector
|
|
722
|
+
}).then((result) => {
|
|
723
|
+
var _a;
|
|
724
|
+
if (pendingConnectorId.current !== connectorId) return;
|
|
725
|
+
const address = (_a = result.accounts) == null ? void 0 : _a[0];
|
|
726
|
+
if (!address) {
|
|
727
|
+
throw new Error("Connected but no account returned");
|
|
728
|
+
}
|
|
729
|
+
pendingConnectorId.current = null;
|
|
730
|
+
onConnectRef.current({
|
|
731
|
+
address,
|
|
732
|
+
connectorId
|
|
733
|
+
});
|
|
734
|
+
}).catch((error) => {
|
|
735
|
+
if (pendingConnectorId.current !== connectorId) return;
|
|
736
|
+
pendingConnectorId.current = null;
|
|
737
|
+
onErrorRef.current(error, connectorId);
|
|
737
738
|
});
|
|
738
739
|
}, [
|
|
739
740
|
config.connectors,
|
|
740
|
-
|
|
741
|
+
connectAsync
|
|
741
742
|
]);
|
|
742
743
|
const cancelConnect = useCallback(() => {
|
|
743
744
|
pendingConnectorId.current = null;
|
|
@@ -753,6 +754,111 @@ var useWagmiConnect = /* @__PURE__ */ __name(({ onConnect, onError, onQrUri }) =
|
|
|
753
754
|
};
|
|
754
755
|
}, "useWagmiConnect");
|
|
755
756
|
|
|
757
|
+
// src/hooks/useWCState.ts
|
|
758
|
+
import { useState, useRef as useRef2, useCallback as useCallback2 } from "react";
|
|
759
|
+
var fetchWCWalletList = /* @__PURE__ */ __name(async (projectId) => {
|
|
760
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
|
|
761
|
+
const all = [];
|
|
762
|
+
let page = 1;
|
|
763
|
+
const entries = 100;
|
|
764
|
+
while (page <= 10) {
|
|
765
|
+
const url = new URL("https://explorer-api.walletconnect.com/v3/wallets");
|
|
766
|
+
url.searchParams.set("projectId", projectId);
|
|
767
|
+
url.searchParams.set("entries", String(entries));
|
|
768
|
+
url.searchParams.set("page", String(page));
|
|
769
|
+
const res = await fetch(url.toString());
|
|
770
|
+
if (!res.ok) throw new Error(`Failed to fetch wallet list: ${res.status}`);
|
|
771
|
+
const json = await res.json();
|
|
772
|
+
const listings = Object.values((_a = json.listings) != null ? _a : {});
|
|
773
|
+
for (const w of listings) {
|
|
774
|
+
all.push({
|
|
775
|
+
id: w.id,
|
|
776
|
+
name: w.name,
|
|
777
|
+
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 : "",
|
|
778
|
+
mobileNative: (_g = (_f = w.mobile) == null ? void 0 : _f.native) != null ? _g : "",
|
|
779
|
+
mobileUniversal: (_i = (_h = w.mobile) == null ? void 0 : _h.universal) != null ? _i : "",
|
|
780
|
+
desktopNative: (_k = (_j = w.desktop) == null ? void 0 : _j.native) != null ? _k : "",
|
|
781
|
+
desktopUniversal: (_m = (_l = w.desktop) == null ? void 0 : _l.universal) != null ? _m : "",
|
|
782
|
+
appIos: (_o = (_n = w.app) == null ? void 0 : _n.ios) != null ? _o : "",
|
|
783
|
+
appAndroid: (_q = (_p = w.app) == null ? void 0 : _p.android) != null ? _q : "",
|
|
784
|
+
homepage: (_r = w.homepage) != null ? _r : ""
|
|
785
|
+
});
|
|
786
|
+
}
|
|
787
|
+
if (listings.length < entries || all.length >= json.total) break;
|
|
788
|
+
page += 1;
|
|
789
|
+
}
|
|
790
|
+
return all;
|
|
791
|
+
}, "fetchWCWalletList");
|
|
792
|
+
var useWCState = /* @__PURE__ */ __name(() => {
|
|
793
|
+
const [subView, setSubView] = useState("qr");
|
|
794
|
+
const [walletList, setWalletList] = useState([]);
|
|
795
|
+
const [walletListLoading, setWalletListLoading] = useState(false);
|
|
796
|
+
const [walletListSearch, setWalletListSearch] = useState("");
|
|
797
|
+
const [filterActive, setFilterActive] = useState(false);
|
|
798
|
+
const [selectedWallet, setSelectedWallet] = useState(null);
|
|
799
|
+
const loadedRef = useRef2(false);
|
|
800
|
+
const loadWalletList = useCallback2(async (projectId) => {
|
|
801
|
+
if (loadedRef.current) return;
|
|
802
|
+
loadedRef.current = true;
|
|
803
|
+
setWalletListLoading(true);
|
|
804
|
+
try {
|
|
805
|
+
const list = await fetchWCWalletList(projectId);
|
|
806
|
+
setWalletList(list);
|
|
807
|
+
} catch {
|
|
808
|
+
loadedRef.current = false;
|
|
809
|
+
} finally {
|
|
810
|
+
setWalletListLoading(false);
|
|
811
|
+
}
|
|
812
|
+
}, []);
|
|
813
|
+
const onShowList = useCallback2(() => setSubView("list"), []);
|
|
814
|
+
const onSelectWallet = useCallback2((wallet) => {
|
|
815
|
+
setSelectedWallet(wallet);
|
|
816
|
+
setSubView("wallet");
|
|
817
|
+
}, []);
|
|
818
|
+
const onSearchChange = useCallback2((q) => setWalletListSearch(q), []);
|
|
819
|
+
const onFilterToggle = useCallback2(() => setFilterActive((prev) => !prev), []);
|
|
820
|
+
const handleBack = useCallback2(() => {
|
|
821
|
+
if (subView === "wallet") {
|
|
822
|
+
setSelectedWallet(null);
|
|
823
|
+
setSubView("list");
|
|
824
|
+
return true;
|
|
825
|
+
}
|
|
826
|
+
if (subView === "list") {
|
|
827
|
+
setSubView("qr");
|
|
828
|
+
return true;
|
|
829
|
+
}
|
|
830
|
+
return false;
|
|
831
|
+
}, [
|
|
832
|
+
subView
|
|
833
|
+
]);
|
|
834
|
+
const resetView = useCallback2(() => {
|
|
835
|
+
setSubView("qr");
|
|
836
|
+
setSelectedWallet(null);
|
|
837
|
+
}, []);
|
|
838
|
+
const reset = useCallback2(() => {
|
|
839
|
+
setSubView("qr");
|
|
840
|
+
setWalletListSearch("");
|
|
841
|
+
setFilterActive(false);
|
|
842
|
+
setSelectedWallet(null);
|
|
843
|
+
}, []);
|
|
844
|
+
return {
|
|
845
|
+
subView,
|
|
846
|
+
walletList,
|
|
847
|
+
walletListLoading,
|
|
848
|
+
walletListSearch,
|
|
849
|
+
filterActive,
|
|
850
|
+
selectedWallet,
|
|
851
|
+
loadWalletList,
|
|
852
|
+
onShowList,
|
|
853
|
+
onSelectWallet,
|
|
854
|
+
onSearchChange,
|
|
855
|
+
onFilterToggle,
|
|
856
|
+
handleBack,
|
|
857
|
+
resetView,
|
|
858
|
+
reset
|
|
859
|
+
};
|
|
860
|
+
}, "useWCState");
|
|
861
|
+
|
|
756
862
|
// assets/graphic.png
|
|
757
863
|
var graphic_default = "data:image/png;base64,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";
|
|
758
864
|
|
|
@@ -771,11 +877,41 @@ var IdleView = /* @__PURE__ */ __name(() => /* @__PURE__ */ React.createElement(
|
|
|
771
877
|
}, "Choose a wallet on the left to start connecting.")), "IdleView");
|
|
772
878
|
|
|
773
879
|
// src/views/CreditWalletView.tsx
|
|
774
|
-
import { useEffect as useEffect2 } from "react";
|
|
880
|
+
import { useEffect as useEffect2, useMemo } from "react";
|
|
881
|
+
|
|
882
|
+
// src/components/QRFrame.tsx
|
|
775
883
|
import { QRCodeSVG } from "qrcode.react";
|
|
884
|
+
var QRFrame = /* @__PURE__ */ __name(({ qrUri, logoUrl }) => /* @__PURE__ */ React.createElement("div", {
|
|
885
|
+
className: `ck-qr-frame ${!qrUri ? "ck-qr-frame--loading" : ""}`
|
|
886
|
+
}, qrUri ? /* @__PURE__ */ React.createElement(QRCodeSVG, {
|
|
887
|
+
value: qrUri,
|
|
888
|
+
size: 196,
|
|
889
|
+
level: "H",
|
|
890
|
+
imageSettings: logoUrl ? {
|
|
891
|
+
src: logoUrl,
|
|
892
|
+
width: 40,
|
|
893
|
+
height: 40,
|
|
894
|
+
excavate: true
|
|
895
|
+
} : void 0
|
|
896
|
+
}) : /* @__PURE__ */ React.createElement("div", {
|
|
897
|
+
className: "ck-qr-spinner",
|
|
898
|
+
"aria-label": "Loading QR code"
|
|
899
|
+
})), "QRFrame");
|
|
900
|
+
var CopyLinkButton = /* @__PURE__ */ __name(({ qrUri }) => {
|
|
901
|
+
if (!qrUri) return null;
|
|
902
|
+
return /* @__PURE__ */ React.createElement("button", {
|
|
903
|
+
type: "button",
|
|
904
|
+
className: "ck-copy-link",
|
|
905
|
+
onClick: /* @__PURE__ */ __name(() => {
|
|
906
|
+
navigator.clipboard.writeText(qrUri);
|
|
907
|
+
}, "onClick")
|
|
908
|
+
}, "Copy link");
|
|
909
|
+
}, "CopyLinkButton");
|
|
910
|
+
|
|
911
|
+
// src/views/CreditWalletView.tsx
|
|
776
912
|
var CreditWalletView = /* @__PURE__ */ __name(({ connectorId, qrUri }) => {
|
|
777
913
|
const { downloadUrl: downloadUrl2, logoUrl, deepLinkBase: deepLinkBase2 } = CONNECTOR_META[connectorId];
|
|
778
|
-
const isMobile = isMobileDevice();
|
|
914
|
+
const isMobile = useMemo(() => isMobileDevice(), []);
|
|
779
915
|
useEffect2(() => {
|
|
780
916
|
if (isMobile && qrUri && deepLinkBase2) {
|
|
781
917
|
tryOpenDeepLink(qrUri, deepLinkBase2);
|
|
@@ -792,22 +928,10 @@ var CreditWalletView = /* @__PURE__ */ __name(({ connectorId, qrUri }) => {
|
|
|
792
928
|
}
|
|
793
929
|
return /* @__PURE__ */ React.createElement("div", {
|
|
794
930
|
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", {
|
|
931
|
+
}, /* @__PURE__ */ React.createElement(QRFrame, {
|
|
932
|
+
qrUri,
|
|
933
|
+
logoUrl
|
|
934
|
+
}), /* @__PURE__ */ React.createElement("p", {
|
|
811
935
|
className: "ck-view__caption"
|
|
812
936
|
}, "Open the Credit Wallet app and scan the QR"), downloadUrl2 && /* @__PURE__ */ React.createElement("div", {
|
|
813
937
|
className: "ck-download-card"
|
|
@@ -826,11 +950,10 @@ var CreditWalletView = /* @__PURE__ */ __name(({ connectorId, qrUri }) => {
|
|
|
826
950
|
}, "CreditWalletView");
|
|
827
951
|
|
|
828
952
|
// src/views/MetaMaskView.tsx
|
|
829
|
-
import { useEffect as useEffect3 } from "react";
|
|
830
|
-
import { QRCodeSVG as QRCodeSVG2 } from "qrcode.react";
|
|
953
|
+
import { useEffect as useEffect3, useMemo as useMemo2 } from "react";
|
|
831
954
|
var { downloadUrl, deepLinkBase } = CONNECTOR_META.METAMASK;
|
|
832
955
|
var MetaMaskView = /* @__PURE__ */ __name(({ qrUri, hasExtension, logoUrl }) => {
|
|
833
|
-
const isMobile = isMobileDevice();
|
|
956
|
+
const isMobile = useMemo2(() => isMobileDevice(), []);
|
|
834
957
|
useEffect3(() => {
|
|
835
958
|
if (isMobile && qrUri && deepLinkBase) {
|
|
836
959
|
tryOpenDeepLink(qrUri, deepLinkBase);
|
|
@@ -861,28 +984,12 @@ var MetaMaskView = /* @__PURE__ */ __name(({ qrUri, hasExtension, logoUrl }) =>
|
|
|
861
984
|
}
|
|
862
985
|
return /* @__PURE__ */ React.createElement("div", {
|
|
863
986
|
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", {
|
|
987
|
+
}, /* @__PURE__ */ React.createElement(QRFrame, {
|
|
988
|
+
qrUri,
|
|
989
|
+
logoUrl
|
|
990
|
+
}), /* @__PURE__ */ React.createElement(CopyLinkButton, {
|
|
991
|
+
qrUri
|
|
992
|
+
}), downloadUrl && /* @__PURE__ */ React.createElement("div", {
|
|
886
993
|
className: "ck-download-card"
|
|
887
994
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
888
995
|
className: "ck-download-card__text"
|
|
@@ -897,8 +1004,7 @@ var MetaMaskView = /* @__PURE__ */ __name(({ qrUri, hasExtension, logoUrl }) =>
|
|
|
897
1004
|
}, "MetaMaskView");
|
|
898
1005
|
|
|
899
1006
|
// src/views/WalletConnectView.tsx
|
|
900
|
-
import { useMemo } from "react";
|
|
901
|
-
import { QRCodeSVG as QRCodeSVG3 } from "qrcode.react";
|
|
1007
|
+
import { useMemo as useMemo3 } from "react";
|
|
902
1008
|
|
|
903
1009
|
// assets/deeplink.png
|
|
904
1010
|
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 +1021,14 @@ var WalletConnectView = /* @__PURE__ */ __name((props) => {
|
|
|
915
1021
|
}, "WalletConnectView");
|
|
916
1022
|
var WCQRView = /* @__PURE__ */ __name(({ qrUri, logoUrl, walletList, onShowList }) => /* @__PURE__ */ React.createElement("div", {
|
|
917
1023
|
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", {
|
|
1024
|
+
}, /* @__PURE__ */ React.createElement(QRFrame, {
|
|
1025
|
+
qrUri,
|
|
1026
|
+
logoUrl
|
|
1027
|
+
}), /* @__PURE__ */ React.createElement("p", {
|
|
934
1028
|
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", {
|
|
1029
|
+
}, "Scan this QR Code with your phone"), /* @__PURE__ */ React.createElement(CopyLinkButton, {
|
|
1030
|
+
qrUri
|
|
1031
|
+
}), /* @__PURE__ */ React.createElement("button", {
|
|
942
1032
|
type: "button",
|
|
943
1033
|
className: "ck-all-wallets-btn",
|
|
944
1034
|
onClick: onShowList
|
|
@@ -950,10 +1040,10 @@ var WCQRView = /* @__PURE__ */ __name(({ qrUri, logoUrl, walletList, onShowList
|
|
|
950
1040
|
}, "All Wallets"), walletList.length > 0 && /* @__PURE__ */ React.createElement("span", {
|
|
951
1041
|
className: "ck-all-wallets-btn__count"
|
|
952
1042
|
}, walletList.length, "+"))), "WCQRView");
|
|
953
|
-
var CREDIT_WALLET_NAME =
|
|
1043
|
+
var CREDIT_WALLET_NAME = CONNECTOR_META.CREDIT_WALLET.label;
|
|
954
1044
|
var WalletListView = /* @__PURE__ */ __name(({ walletList, walletListLoading, walletListSearch, walletListFilterActive, logoUrl, qrUri, onSelectWallet, onSearchChange, onFilterToggle }) => {
|
|
955
|
-
const isMobile = isMobileDevice();
|
|
956
|
-
const filtered =
|
|
1045
|
+
const isMobile = useMemo3(() => isMobileDevice(), []);
|
|
1046
|
+
const filtered = useMemo3(() => {
|
|
957
1047
|
const q = walletListSearch.trim().toLowerCase();
|
|
958
1048
|
let list = walletList;
|
|
959
1049
|
if (walletListFilterActive) {
|
|
@@ -975,11 +1065,10 @@ var WalletListView = /* @__PURE__ */ __name(({ walletList, walletListLoading, wa
|
|
|
975
1065
|
walletListFilterActive
|
|
976
1066
|
]);
|
|
977
1067
|
const handleClickWallet = /* @__PURE__ */ __name((wallet) => {
|
|
978
|
-
|
|
979
|
-
if (isMobile && uri) {
|
|
1068
|
+
if (isMobile && qrUri) {
|
|
980
1069
|
const target = wallet.mobileNative || wallet.mobileUniversal;
|
|
981
1070
|
if (target) {
|
|
982
|
-
tryOpenDeepLink(
|
|
1071
|
+
tryOpenDeepLink(qrUri, target);
|
|
983
1072
|
return;
|
|
984
1073
|
}
|
|
985
1074
|
}
|
|
@@ -1058,32 +1147,14 @@ var WalletQRView = /* @__PURE__ */ __name(({ wallet, qrUri }) => {
|
|
|
1058
1147
|
const logoSrc = wallet.imageUrl;
|
|
1059
1148
|
return /* @__PURE__ */ React.createElement("div", {
|
|
1060
1149
|
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", {
|
|
1150
|
+
}, /* @__PURE__ */ React.createElement(QRFrame, {
|
|
1151
|
+
qrUri,
|
|
1152
|
+
logoUrl: logoSrc
|
|
1153
|
+
}), /* @__PURE__ */ React.createElement("p", {
|
|
1079
1154
|
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", {
|
|
1155
|
+
}, "Scan this QR Code with your phone"), /* @__PURE__ */ React.createElement(CopyLinkButton, {
|
|
1156
|
+
qrUri
|
|
1157
|
+
}), downloadUrl2 && /* @__PURE__ */ React.createElement("div", {
|
|
1087
1158
|
className: "ck-download-card"
|
|
1088
1159
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
1089
1160
|
className: "ck-download-card__text"
|
|
@@ -1112,39 +1183,6 @@ var writeRecentConnector = /* @__PURE__ */ __name((id) => {
|
|
|
1112
1183
|
} catch {
|
|
1113
1184
|
}
|
|
1114
1185
|
}, "writeRecentConnector");
|
|
1115
|
-
var fetchWCWalletList = /* @__PURE__ */ __name(async (projectId) => {
|
|
1116
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
|
|
1117
|
-
const all = [];
|
|
1118
|
-
let page = 1;
|
|
1119
|
-
const entries = 100;
|
|
1120
|
-
while (page <= 10) {
|
|
1121
|
-
const url = new URL("https://explorer-api.walletconnect.com/v3/wallets");
|
|
1122
|
-
url.searchParams.set("projectId", projectId);
|
|
1123
|
-
url.searchParams.set("entries", String(entries));
|
|
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");
|
|
1148
1186
|
var SelectorPane = /* @__PURE__ */ __name(({ connectors, selected, recentConnector, onSelect, onClose }) => {
|
|
1149
1187
|
const hasRecent = recentConnector !== null && connectors.includes(recentConnector);
|
|
1150
1188
|
const recentConnectors = hasRecent ? [
|
|
@@ -1210,8 +1248,8 @@ var ConnectorItem = /* @__PURE__ */ __name(({ id, isSelected, isRecent, onSelect
|
|
|
1210
1248
|
className: "ck-connector-item__badge"
|
|
1211
1249
|
}, "Recent"));
|
|
1212
1250
|
}, "ConnectorItem");
|
|
1213
|
-
var DetailPane = /* @__PURE__ */ __name(({ selectedConnector, qrUri, hasMetaMaskExtension, connectorLogoMap,
|
|
1214
|
-
const title = getDetailTitle(selectedConnector, hasMetaMaskExtension,
|
|
1251
|
+
var DetailPane = /* @__PURE__ */ __name(({ selectedConnector, qrUri, hasMetaMaskExtension, connectorLogoMap, wc, onBack, onClose }) => {
|
|
1252
|
+
const title = getDetailTitle(selectedConnector, hasMetaMaskExtension, wc.subView, wc.selectedWallet);
|
|
1215
1253
|
const showBack = selectedConnector !== null;
|
|
1216
1254
|
return /* @__PURE__ */ React.createElement("div", {
|
|
1217
1255
|
className: "ck-pane ck-pane--detail"
|
|
@@ -1239,18 +1277,18 @@ var DetailPane = /* @__PURE__ */ __name(({ selectedConnector, qrUri, hasMetaMask
|
|
|
1239
1277
|
hasExtension: hasMetaMaskExtension,
|
|
1240
1278
|
logoUrl: connectorLogoMap.METAMASK
|
|
1241
1279
|
}), selectedConnector === "WALLET_CONNECT" && /* @__PURE__ */ React.createElement(WalletConnectView, {
|
|
1242
|
-
subView:
|
|
1280
|
+
subView: wc.subView,
|
|
1243
1281
|
qrUri,
|
|
1244
1282
|
logoUrl: connectorLogoMap.WALLET_CONNECT,
|
|
1245
|
-
walletList:
|
|
1246
|
-
walletListLoading:
|
|
1247
|
-
walletListSearch:
|
|
1248
|
-
walletListFilterActive:
|
|
1249
|
-
selectedWallet:
|
|
1250
|
-
onShowList:
|
|
1251
|
-
onSelectWallet:
|
|
1252
|
-
onSearchChange:
|
|
1253
|
-
onFilterToggle:
|
|
1283
|
+
walletList: wc.walletList,
|
|
1284
|
+
walletListLoading: wc.walletListLoading,
|
|
1285
|
+
walletListSearch: wc.walletListSearch,
|
|
1286
|
+
walletListFilterActive: wc.filterActive,
|
|
1287
|
+
selectedWallet: wc.selectedWallet,
|
|
1288
|
+
onShowList: wc.onShowList,
|
|
1289
|
+
onSelectWallet: wc.onSelectWallet,
|
|
1290
|
+
onSearchChange: wc.onSearchChange,
|
|
1291
|
+
onFilterToggle: wc.onFilterToggle
|
|
1254
1292
|
})));
|
|
1255
1293
|
}, "DetailPane");
|
|
1256
1294
|
var getDetailTitle = /* @__PURE__ */ __name((connector, hasMetaMaskExtension, wcSubView, wcSelectedWallet) => {
|
|
@@ -1263,28 +1301,38 @@ var getDetailTitle = /* @__PURE__ */ __name((connector, hasMetaMaskExtension, wc
|
|
|
1263
1301
|
if (connector === "METAMASK" && hasMetaMaskExtension) return "MetaMask";
|
|
1264
1302
|
return CONNECTOR_META[connector].detailTitle;
|
|
1265
1303
|
}, "getDetailTitle");
|
|
1304
|
+
var resolveConnectorsFromConfig = /* @__PURE__ */ __name((connectorsConfig) => {
|
|
1305
|
+
if (!connectorsConfig) return [];
|
|
1306
|
+
const connectors = [];
|
|
1307
|
+
if (connectorsConfig.creditWallet === "walletConnect") connectors.push("CREDIT_WALLET");
|
|
1308
|
+
if (connectorsConfig.creditWallet === "creditConnect") connectors.push("CREDIT_CONNECT");
|
|
1309
|
+
if (connectorsConfig.metamask) connectors.push("METAMASK");
|
|
1310
|
+
if (connectorsConfig.walletConnect) connectors.push("WALLET_CONNECT");
|
|
1311
|
+
return connectors;
|
|
1312
|
+
}, "resolveConnectorsFromConfig");
|
|
1266
1313
|
var ConnectModal = /* @__PURE__ */ __name((props) => {
|
|
1267
|
-
if (props.
|
|
1314
|
+
if (!props.open) return null;
|
|
1315
|
+
const resolvedConnectors = resolveConnectorsFromConfig(props.connectors);
|
|
1316
|
+
if (resolvedConnectors.includes("CREDIT_WALLET") && resolvedConnectors.includes("CREDIT_CONNECT")) {
|
|
1268
1317
|
throw new Error("CREDIT_WALLET and CREDIT_CONNECT cannot be used together");
|
|
1269
1318
|
}
|
|
1270
|
-
if (
|
|
1271
|
-
|
|
1319
|
+
if (resolvedConnectors.length === 0) {
|
|
1320
|
+
throw new Error("At least one connector must be configured");
|
|
1321
|
+
}
|
|
1322
|
+
return /* @__PURE__ */ React.createElement(ConnectModalInner, {
|
|
1323
|
+
...props,
|
|
1324
|
+
connectors: resolvedConnectors
|
|
1325
|
+
});
|
|
1272
1326
|
}, "ConnectModal");
|
|
1273
1327
|
var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, onClose, onLog, wcProjectId }) => {
|
|
1274
1328
|
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 [wcWalletListLoading, setWcWalletListLoading] = useState(false);
|
|
1283
|
-
const [wcWalletListSearch, setWcWalletListSearch] = useState("");
|
|
1284
|
-
const [wcFilterActive, setWcFilterActive] = useState(false);
|
|
1285
|
-
const [wcSelectedWallet, setWcSelectedWallet] = useState(null);
|
|
1286
|
-
const wcLoadedRef = useRef2(false);
|
|
1287
|
-
const handleQrUri = useCallback2((uri) => {
|
|
1329
|
+
const [selectedConnector, setSelectedConnector] = useState2(null);
|
|
1330
|
+
const [qrUriMap, setQrUriMap] = useState2({});
|
|
1331
|
+
const pendingQrConnectorRef = useRef3(null);
|
|
1332
|
+
const [recentConnector, setRecentConnector] = useState2(null);
|
|
1333
|
+
const [hasMetaMaskExtension, setHasMetaMaskExtension] = useState2(false);
|
|
1334
|
+
const wc = useWCState();
|
|
1335
|
+
const handleQrUri = useCallback3((uri) => {
|
|
1288
1336
|
if (uri) {
|
|
1289
1337
|
const id = pendingQrConnectorRef.current;
|
|
1290
1338
|
if (id) setQrUriMap((prev) => ({
|
|
@@ -1293,14 +1341,14 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1293
1341
|
}));
|
|
1294
1342
|
}
|
|
1295
1343
|
}, []);
|
|
1296
|
-
const handleConnect =
|
|
1344
|
+
const handleConnect = useCallback3((result) => {
|
|
1297
1345
|
onConnect(result);
|
|
1298
1346
|
onClose();
|
|
1299
1347
|
}, [
|
|
1300
1348
|
onConnect,
|
|
1301
1349
|
onClose
|
|
1302
1350
|
]);
|
|
1303
|
-
const handleError =
|
|
1351
|
+
const handleError = useCallback3((error, connectorId) => {
|
|
1304
1352
|
onLog == null ? void 0 : onLog(`[connect-kit] connection failed (${connectorId}): ${error.message}`, error);
|
|
1305
1353
|
setSelectedConnector(null);
|
|
1306
1354
|
setQrUriMap((prev) => {
|
|
@@ -1310,10 +1358,10 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1310
1358
|
delete next[connectorId];
|
|
1311
1359
|
return next;
|
|
1312
1360
|
});
|
|
1313
|
-
|
|
1314
|
-
setWcSelectedWallet(null);
|
|
1361
|
+
wc.resetView();
|
|
1315
1362
|
}, [
|
|
1316
|
-
onLog
|
|
1363
|
+
onLog,
|
|
1364
|
+
wc.resetView
|
|
1317
1365
|
]);
|
|
1318
1366
|
const { triggerConnect, cancelConnect } = useWagmiConnect({
|
|
1319
1367
|
onConnect: handleConnect,
|
|
@@ -1321,10 +1369,16 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1321
1369
|
onQrUri: handleQrUri
|
|
1322
1370
|
});
|
|
1323
1371
|
const wagmiConfig = useConfig2();
|
|
1324
|
-
const connectorLogoMap =
|
|
1372
|
+
const connectorLogoMap = useMemo4(() => {
|
|
1325
1373
|
const map = {};
|
|
1326
|
-
|
|
1327
|
-
|
|
1374
|
+
const connectorIds = [
|
|
1375
|
+
"CREDIT_CONNECT",
|
|
1376
|
+
"CREDIT_WALLET",
|
|
1377
|
+
"METAMASK",
|
|
1378
|
+
"WALLET_CONNECT"
|
|
1379
|
+
];
|
|
1380
|
+
for (const connectorId of connectorIds) {
|
|
1381
|
+
const wagmiConnector = resolveWagmiConnector(wagmiConfig.connectors, connectorId);
|
|
1328
1382
|
if (wagmiConnector == null ? void 0 : wagmiConnector.icon) map[connectorId] = wagmiConnector.icon;
|
|
1329
1383
|
}
|
|
1330
1384
|
return map;
|
|
@@ -1340,39 +1394,23 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1340
1394
|
setSelectedConnector(null);
|
|
1341
1395
|
setQrUriMap({});
|
|
1342
1396
|
pendingQrConnectorRef.current = null;
|
|
1343
|
-
|
|
1344
|
-
setWcWalletListSearch("");
|
|
1345
|
-
setWcFilterActive(false);
|
|
1346
|
-
setWcSelectedWallet(null);
|
|
1397
|
+
wc.reset();
|
|
1347
1398
|
cancelConnect();
|
|
1348
1399
|
}
|
|
1349
1400
|
}, [
|
|
1350
1401
|
open,
|
|
1351
|
-
cancelConnect
|
|
1402
|
+
cancelConnect,
|
|
1403
|
+
wc.reset
|
|
1352
1404
|
]);
|
|
1353
|
-
const
|
|
1354
|
-
if (wcLoadedRef.current) return;
|
|
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) => {
|
|
1405
|
+
const handleSelectConnector = useCallback3((id) => {
|
|
1367
1406
|
if (id === selectedConnector) return;
|
|
1368
1407
|
pendingQrConnectorRef.current = id;
|
|
1369
1408
|
setSelectedConnector(id);
|
|
1370
|
-
|
|
1371
|
-
setWcSelectedWallet(null);
|
|
1409
|
+
wc.resetView();
|
|
1372
1410
|
writeRecentConnector(id);
|
|
1373
1411
|
setRecentConnector(id);
|
|
1374
1412
|
if (id === "WALLET_CONNECT" && wcProjectId) {
|
|
1375
|
-
|
|
1413
|
+
wc.loadWalletList(wcProjectId);
|
|
1376
1414
|
}
|
|
1377
1415
|
cancelConnect();
|
|
1378
1416
|
triggerConnect(id);
|
|
@@ -1381,36 +1419,17 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1381
1419
|
triggerConnect,
|
|
1382
1420
|
cancelConnect,
|
|
1383
1421
|
wcProjectId,
|
|
1384
|
-
|
|
1422
|
+
wc.resetView,
|
|
1423
|
+
wc.loadWalletList
|
|
1385
1424
|
]);
|
|
1386
|
-
const
|
|
1387
|
-
|
|
1388
|
-
}, []);
|
|
1389
|
-
const handleWCSelectWallet = useCallback2((wallet) => {
|
|
1390
|
-
setWcSelectedWallet(wallet);
|
|
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
|
-
}
|
|
1407
|
-
}
|
|
1425
|
+
const handleBack = useCallback3(() => {
|
|
1426
|
+
if (selectedConnector === "WALLET_CONNECT" && wc.handleBack()) return;
|
|
1408
1427
|
pendingQrConnectorRef.current = null;
|
|
1409
1428
|
setSelectedConnector(null);
|
|
1410
1429
|
cancelConnect();
|
|
1411
1430
|
}, [
|
|
1412
1431
|
selectedConnector,
|
|
1413
|
-
|
|
1432
|
+
wc.handleBack,
|
|
1414
1433
|
cancelConnect
|
|
1415
1434
|
]);
|
|
1416
1435
|
return /* @__PURE__ */ React.createElement("div", {
|
|
@@ -1434,32 +1453,20 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1434
1453
|
qrUri: selectedConnector ? (_a = qrUriMap[selectedConnector]) != null ? _a : null : null,
|
|
1435
1454
|
hasMetaMaskExtension,
|
|
1436
1455
|
connectorLogoMap,
|
|
1437
|
-
|
|
1438
|
-
wcWalletList,
|
|
1439
|
-
wcWalletListLoading,
|
|
1440
|
-
wcWalletListSearch,
|
|
1441
|
-
wcFilterActive,
|
|
1442
|
-
wcSelectedWallet,
|
|
1456
|
+
wc,
|
|
1443
1457
|
onBack: handleBack,
|
|
1444
|
-
onClose
|
|
1445
|
-
onWCShowList: handleWCShowList,
|
|
1446
|
-
onWCSelectWallet: handleWCSelectWallet,
|
|
1447
|
-
onWCSearchChange: setWcWalletListSearch,
|
|
1448
|
-
onWCFilterToggle: handleWCFilterToggle
|
|
1458
|
+
onClose
|
|
1449
1459
|
})));
|
|
1450
1460
|
}, "ConnectModalInner");
|
|
1451
1461
|
|
|
1452
|
-
// ../../node_modules/.pnpm/@wagmi+core@2.22.1_@tanstack+query-core@5.100.9_@types+react@18.3.20_react@18.3.1_types_b6cc874872911bd30e0c8a5ffb262d86/node_modules/@wagmi/core/dist/esm/connectors/createConnector.js
|
|
1453
|
-
function createConnector(createConnectorFn) {
|
|
1454
|
-
return createConnectorFn;
|
|
1455
|
-
}
|
|
1456
|
-
__name(createConnector, "createConnector");
|
|
1457
|
-
|
|
1458
1462
|
// src/creditConnectConnector.ts
|
|
1463
|
+
import { createConnector } from "@wagmi/core";
|
|
1464
|
+
import { getAddress } from "viem";
|
|
1459
1465
|
import { DappSessionManager } from "@gluwa/credit-connect-sdk/dapp";
|
|
1460
1466
|
var CONNECTOR_ID = "credit-connect";
|
|
1461
1467
|
var CONNECTOR_NAME = "Credit Wallet";
|
|
1462
1468
|
var CONNECTOR_TYPE = "credit-connect";
|
|
1469
|
+
var castConnectResult = /* @__PURE__ */ __name((value) => value, "castConnectResult");
|
|
1463
1470
|
var creditConnectConnector = /* @__PURE__ */ __name((options) => {
|
|
1464
1471
|
let manager = null;
|
|
1465
1472
|
let selectedChainId = null;
|
|
@@ -1565,10 +1572,19 @@ var creditConnectConnector = /* @__PURE__ */ __name((options) => {
|
|
|
1565
1572
|
const chainId2 = Number.parseInt(getEvmAddressInfo(session2)[0].networkIdentifier, 10);
|
|
1566
1573
|
if (!Number.isFinite(chainId2)) throw new Error(`Invalid chainId: ${chainId2}`);
|
|
1567
1574
|
selectedChainId = chainId2;
|
|
1568
|
-
|
|
1575
|
+
if ((parameters == null ? void 0 : parameters.withCapabilities) === true) {
|
|
1576
|
+
return castConnectResult({
|
|
1577
|
+
accounts: accounts2.map((address) => ({
|
|
1578
|
+
address,
|
|
1579
|
+
capabilities: {}
|
|
1580
|
+
})),
|
|
1581
|
+
chainId: chainId2
|
|
1582
|
+
});
|
|
1583
|
+
}
|
|
1584
|
+
return castConnectResult({
|
|
1569
1585
|
accounts: accounts2,
|
|
1570
1586
|
chainId: chainId2
|
|
1571
|
-
};
|
|
1587
|
+
});
|
|
1572
1588
|
}
|
|
1573
1589
|
if (m.state.status === "CONNECTING" && m.state.connectingPayload) {
|
|
1574
1590
|
(_a = options.onDisplayUri) == null ? void 0 : _a.call(options, m.state.connectingPayload);
|
|
@@ -1604,10 +1620,19 @@ var creditConnectConnector = /* @__PURE__ */ __name((options) => {
|
|
|
1604
1620
|
const chainId = Number.parseInt(getEvmAddressInfo(session)[0].networkIdentifier, 10);
|
|
1605
1621
|
if (!Number.isFinite(chainId)) throw new Error(`Invalid chainId: ${chainId}`);
|
|
1606
1622
|
selectedChainId = chainId;
|
|
1607
|
-
|
|
1623
|
+
if ((parameters == null ? void 0 : parameters.withCapabilities) === true) {
|
|
1624
|
+
return castConnectResult({
|
|
1625
|
+
accounts: accounts.map((address) => ({
|
|
1626
|
+
address,
|
|
1627
|
+
capabilities: {}
|
|
1628
|
+
})),
|
|
1629
|
+
chainId
|
|
1630
|
+
});
|
|
1631
|
+
}
|
|
1632
|
+
return castConnectResult({
|
|
1608
1633
|
accounts,
|
|
1609
1634
|
chainId
|
|
1610
|
-
};
|
|
1635
|
+
});
|
|
1611
1636
|
} catch (error) {
|
|
1612
1637
|
resetState();
|
|
1613
1638
|
throw error;
|
|
@@ -1669,9 +1694,14 @@ var creditConnectConnector = /* @__PURE__ */ __name((options) => {
|
|
|
1669
1694
|
async getProvider() {
|
|
1670
1695
|
if (provider) return provider;
|
|
1671
1696
|
await ensureManagerInitialized();
|
|
1672
|
-
|
|
1697
|
+
const createdProvider = {
|
|
1673
1698
|
request: /* @__PURE__ */ __name(async (args) => {
|
|
1674
|
-
const { method, params } = args;
|
|
1699
|
+
const { method, params: rawParams } = args;
|
|
1700
|
+
const params = Array.isArray(rawParams) ? [
|
|
1701
|
+
...rawParams
|
|
1702
|
+
] : rawParams === void 0 ? [] : [
|
|
1703
|
+
rawParams
|
|
1704
|
+
];
|
|
1675
1705
|
const session = getCurrentSession();
|
|
1676
1706
|
const getSelectedAddressInfo = /* @__PURE__ */ __name((address) => {
|
|
1677
1707
|
if (!session) throw new Error("No active session");
|
|
@@ -1778,16 +1808,21 @@ var creditConnectConnector = /* @__PURE__ */ __name((options) => {
|
|
|
1778
1808
|
throw new Error(`Unsupported provider method: ${method}`);
|
|
1779
1809
|
}, "request"),
|
|
1780
1810
|
on: /* @__PURE__ */ __name((event, listener) => {
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1811
|
+
let listeners = providerListeners.get(event);
|
|
1812
|
+
if (!listeners) {
|
|
1813
|
+
listeners = /* @__PURE__ */ new Set();
|
|
1814
|
+
providerListeners.set(event, listeners);
|
|
1815
|
+
}
|
|
1816
|
+
listeners.add(listener);
|
|
1817
|
+
return createdProvider;
|
|
1784
1818
|
}, "on"),
|
|
1785
1819
|
removeListener: /* @__PURE__ */ __name((event, listener) => {
|
|
1786
1820
|
var _a;
|
|
1787
1821
|
(_a = providerListeners.get(event)) == null ? void 0 : _a.delete(listener);
|
|
1788
|
-
return
|
|
1822
|
+
return createdProvider;
|
|
1789
1823
|
}, "removeListener")
|
|
1790
1824
|
};
|
|
1825
|
+
provider = createdProvider;
|
|
1791
1826
|
return provider;
|
|
1792
1827
|
},
|
|
1793
1828
|
onAccountsChanged(accounts) {
|