@gluwa/connect-kit 0.1.0-next.2 → 0.1.0-next.3
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/chunk-DDA6FP6U.js +7 -0
- package/dist/credit-connect.d.ts +16 -0
- package/dist/credit-connect.js +399 -0
- package/dist/index.d.ts +12 -15
- package/dist/index.js +34 -426
- package/dist/package.json +13 -1
- package/package.json +10 -1
- package/src/ConnectKitProvider.tsx +31 -2
- package/src/ConnectModal.scss +2 -2
- package/src/ConnectModal.tsx +14 -23
- package/src/credit-connect.ts +2 -0
- package/src/creditConnectConnector.ts +1 -0
- package/src/index.ts +0 -2
- package/src/views/CreditWalletView.tsx +5 -2
- package/tsup.config.ts +5 -1
package/dist/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import {
|
|
3
|
+
__name
|
|
4
|
+
} from "./chunk-DDA6FP6U.js";
|
|
4
5
|
|
|
5
6
|
// src/ConnectModal.tsx
|
|
6
|
-
import { useState as useState3, useEffect as useEffect4, useCallback as useCallback3,
|
|
7
|
+
import { useState as useState3, useEffect as useEffect4, useCallback as useCallback3, useMemo as useMemo4 } from "react";
|
|
7
8
|
|
|
8
9
|
// src/ConnectModal.scss
|
|
9
10
|
var css = `.ck-root {
|
|
@@ -489,7 +490,7 @@ var css = `.ck-root {
|
|
|
489
490
|
.ck-wallet-grid-scroll {
|
|
490
491
|
flex: 1;
|
|
491
492
|
min-height: 0;
|
|
492
|
-
width:
|
|
493
|
+
width: 100%;
|
|
493
494
|
overflow-x: hidden;
|
|
494
495
|
overflow-y: auto;
|
|
495
496
|
}
|
|
@@ -913,7 +914,7 @@ var IdleView = /* @__PURE__ */ __name(() => /* @__PURE__ */ React.createElement(
|
|
|
913
914
|
}, "Choose a wallet on the left to start connecting.")), "IdleView");
|
|
914
915
|
|
|
915
916
|
// src/views/CreditWalletView.tsx
|
|
916
|
-
import { useEffect as useEffect2, useMemo } from "react";
|
|
917
|
+
import { useEffect as useEffect2, useMemo, useRef as useRef3 } from "react";
|
|
917
918
|
|
|
918
919
|
// src/components/QRFrame.tsx
|
|
919
920
|
import { QRCodeSVG } from "qrcode.react";
|
|
@@ -948,8 +949,10 @@ var CopyLinkButton = /* @__PURE__ */ __name(({ qrUri }) => {
|
|
|
948
949
|
var CreditWalletView = /* @__PURE__ */ __name(({ connectorId, qrUri }) => {
|
|
949
950
|
const { downloadUrl: downloadUrl2, logoUrl, deepLinkBase: deepLinkBase2 } = CONNECTOR_META[connectorId];
|
|
950
951
|
const isMobile = useMemo(() => isMobileDevice(), []);
|
|
952
|
+
const hasRedirectedRef = useRef3(false);
|
|
951
953
|
useEffect2(() => {
|
|
952
|
-
if (isMobile && qrUri && deepLinkBase2) {
|
|
954
|
+
if (isMobile && qrUri && deepLinkBase2 && !hasRedirectedRef.current) {
|
|
955
|
+
hasRedirectedRef.current = true;
|
|
953
956
|
tryOpenDeepLink(qrUri, deepLinkBase2);
|
|
954
957
|
}
|
|
955
958
|
}, [
|
|
@@ -1414,10 +1417,8 @@ var ConnectModal = /* @__PURE__ */ __name((props) => {
|
|
|
1414
1417
|
});
|
|
1415
1418
|
}, "ConnectModal");
|
|
1416
1419
|
var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, onClose, onLog, wcProjectId, requiredChainId, renderConnectError }) => {
|
|
1417
|
-
var _a;
|
|
1418
1420
|
const [selectedConnector, setSelectedConnector] = useState3(null);
|
|
1419
|
-
const [
|
|
1420
|
-
const pendingQrConnectorRef = useRef3(null);
|
|
1421
|
+
const [qrUri, setQrUri] = useState3(null);
|
|
1421
1422
|
const [recentConnector, setRecentConnector] = useState3(null);
|
|
1422
1423
|
const [hasMetaMaskExtension, setHasMetaMaskExtension] = useState3(false);
|
|
1423
1424
|
const [errorState, setErrorState] = useState3(null);
|
|
@@ -1427,21 +1428,15 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1427
1428
|
const wagmiConfig = useConfig2();
|
|
1428
1429
|
const chainMismatch = requiredChainId != null && account.status === "connected" && account.chainId != null && account.chainId !== requiredChainId;
|
|
1429
1430
|
const requiredChainName = useMemo4(() => {
|
|
1430
|
-
var
|
|
1431
|
+
var _a;
|
|
1431
1432
|
if (requiredChainId == null) return void 0;
|
|
1432
|
-
return (
|
|
1433
|
+
return (_a = wagmiConfig.chains.find((chain) => chain.id === requiredChainId)) == null ? void 0 : _a.name;
|
|
1433
1434
|
}, [
|
|
1434
1435
|
wagmiConfig.chains,
|
|
1435
1436
|
requiredChainId
|
|
1436
1437
|
]);
|
|
1437
1438
|
const handleQrUri = useCallback3((uri) => {
|
|
1438
|
-
|
|
1439
|
-
const id = pendingQrConnectorRef.current;
|
|
1440
|
-
if (id) setQrUriMap((prev) => ({
|
|
1441
|
-
...prev,
|
|
1442
|
-
[id]: uri
|
|
1443
|
-
}));
|
|
1444
|
-
}
|
|
1439
|
+
setQrUri(uri);
|
|
1445
1440
|
}, []);
|
|
1446
1441
|
const handleConnect = useCallback3((result) => {
|
|
1447
1442
|
setErrorState(null);
|
|
@@ -1454,13 +1449,7 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1454
1449
|
const handleError = useCallback3((error, connectorId) => {
|
|
1455
1450
|
const normalizedError = error instanceof Error ? error : new Error(String(error));
|
|
1456
1451
|
onLog == null ? void 0 : onLog(`[connect-kit] connection failed (${connectorId}): ${normalizedError.message}`, normalizedError);
|
|
1457
|
-
|
|
1458
|
-
const next = {
|
|
1459
|
-
...prev
|
|
1460
|
-
};
|
|
1461
|
-
delete next[connectorId];
|
|
1462
|
-
return next;
|
|
1463
|
-
});
|
|
1452
|
+
setQrUri(null);
|
|
1464
1453
|
wc.resetView();
|
|
1465
1454
|
if (renderConnectError) {
|
|
1466
1455
|
setErrorState({
|
|
@@ -1503,8 +1492,7 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1503
1492
|
useEffect4(() => {
|
|
1504
1493
|
if (!open) {
|
|
1505
1494
|
setSelectedConnector(null);
|
|
1506
|
-
|
|
1507
|
-
pendingQrConnectorRef.current = null;
|
|
1495
|
+
setQrUri(null);
|
|
1508
1496
|
setErrorState(null);
|
|
1509
1497
|
wc.reset();
|
|
1510
1498
|
cancelConnect();
|
|
@@ -1516,8 +1504,8 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1516
1504
|
]);
|
|
1517
1505
|
const handleSelectConnector = useCallback3((id) => {
|
|
1518
1506
|
if (id === selectedConnector && !errorState) return;
|
|
1519
|
-
pendingQrConnectorRef.current = id;
|
|
1520
1507
|
setSelectedConnector(id);
|
|
1508
|
+
setQrUri(null);
|
|
1521
1509
|
setErrorState(null);
|
|
1522
1510
|
wc.resetView();
|
|
1523
1511
|
writeRecentConnector(id);
|
|
@@ -1543,8 +1531,8 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1543
1531
|
return;
|
|
1544
1532
|
}
|
|
1545
1533
|
if (selectedConnector === "WALLET_CONNECT" && wc.handleBack()) return;
|
|
1546
|
-
pendingQrConnectorRef.current = null;
|
|
1547
1534
|
setSelectedConnector(null);
|
|
1535
|
+
setQrUri(null);
|
|
1548
1536
|
cancelConnect();
|
|
1549
1537
|
}, [
|
|
1550
1538
|
selectedConnector,
|
|
@@ -1588,7 +1576,7 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1588
1576
|
retry: /* @__PURE__ */ __name(() => {
|
|
1589
1577
|
const id = errorState.connectorId;
|
|
1590
1578
|
setErrorState(null);
|
|
1591
|
-
|
|
1579
|
+
setQrUri(null);
|
|
1592
1580
|
cancelConnect();
|
|
1593
1581
|
triggerConnect(id);
|
|
1594
1582
|
}, "retry"),
|
|
@@ -1654,7 +1642,7 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1654
1642
|
onClose: handleCloseClick
|
|
1655
1643
|
}), /* @__PURE__ */ React.createElement(DetailPane, {
|
|
1656
1644
|
selectedConnector,
|
|
1657
|
-
qrUri
|
|
1645
|
+
qrUri,
|
|
1658
1646
|
hasMetaMaskExtension,
|
|
1659
1647
|
connectorLogoMap,
|
|
1660
1648
|
wc,
|
|
@@ -1666,7 +1654,9 @@ var ConnectModalInner = /* @__PURE__ */ __name(({ open, connectors, onConnect, o
|
|
|
1666
1654
|
|
|
1667
1655
|
// src/ConnectKitProvider.tsx
|
|
1668
1656
|
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";
|
|
1657
|
+
import { WagmiProvider, useAccount as useAccount2, useDisconnect as useDisconnect2 } from "wagmi";
|
|
1658
|
+
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
1659
|
+
var internalQueryClient = new QueryClient();
|
|
1670
1660
|
var ConnectKitContext = /* @__PURE__ */ createContext(null);
|
|
1671
1661
|
var resolveConnectorId = /* @__PURE__ */ __name((wagmiConnectorId) => {
|
|
1672
1662
|
if (!wagmiConnectorId) return null;
|
|
@@ -1677,7 +1667,17 @@ var resolveConnectorId = /* @__PURE__ */ __name((wagmiConnectorId) => {
|
|
|
1677
1667
|
if (lower.includes("walletconnect")) return "WALLET_CONNECT";
|
|
1678
1668
|
return null;
|
|
1679
1669
|
}, "resolveConnectorId");
|
|
1680
|
-
var ConnectKitProvider = /* @__PURE__ */ __name((
|
|
1670
|
+
var ConnectKitProvider = /* @__PURE__ */ __name((props) => {
|
|
1671
|
+
if (props.wagmiConfig) {
|
|
1672
|
+
return /* @__PURE__ */ React.createElement(WagmiProvider, {
|
|
1673
|
+
config: props.wagmiConfig
|
|
1674
|
+
}, /* @__PURE__ */ React.createElement(QueryClientProvider, {
|
|
1675
|
+
client: internalQueryClient
|
|
1676
|
+
}, /* @__PURE__ */ React.createElement(ConnectKitProviderInner, props)));
|
|
1677
|
+
}
|
|
1678
|
+
return /* @__PURE__ */ React.createElement(ConnectKitProviderInner, props);
|
|
1679
|
+
}, "ConnectKitProvider");
|
|
1680
|
+
var ConnectKitProviderInner = /* @__PURE__ */ __name(({ children, connectors, wcProjectId, requiredChainId, onConnect, onLog, renderConnectError }) => {
|
|
1681
1681
|
var _a;
|
|
1682
1682
|
const [isOpen, setIsOpen] = useState4(false);
|
|
1683
1683
|
const [pendingResult, setPendingResult] = useState4(null);
|
|
@@ -1756,7 +1756,7 @@ var ConnectKitProvider = /* @__PURE__ */ __name(({ children, connectors, wcProje
|
|
|
1756
1756
|
onClose: close,
|
|
1757
1757
|
onLog
|
|
1758
1758
|
}));
|
|
1759
|
-
}, "
|
|
1759
|
+
}, "ConnectKitProviderInner");
|
|
1760
1760
|
var useConnectKit = /* @__PURE__ */ __name(() => {
|
|
1761
1761
|
const ctx = useContext(ConnectKitContext);
|
|
1762
1762
|
if (!ctx) {
|
|
@@ -1764,400 +1764,8 @@ var useConnectKit = /* @__PURE__ */ __name(() => {
|
|
|
1764
1764
|
}
|
|
1765
1765
|
return ctx;
|
|
1766
1766
|
}, "useConnectKit");
|
|
1767
|
-
|
|
1768
|
-
// src/creditConnectConnector.ts
|
|
1769
|
-
import { createConnector } from "@wagmi/core";
|
|
1770
|
-
import { getAddress } from "viem";
|
|
1771
|
-
import { DappSessionManager } from "@gluwa/credit-connect-sdk/dapp";
|
|
1772
|
-
var CONNECTOR_ID = "credit-connect";
|
|
1773
|
-
var CONNECTOR_NAME = "Credit Wallet";
|
|
1774
|
-
var CONNECTOR_TYPE = "credit-connect";
|
|
1775
|
-
var castConnectResult = /* @__PURE__ */ __name((value) => value, "castConnectResult");
|
|
1776
|
-
var creditConnectConnector = /* @__PURE__ */ __name((options) => {
|
|
1777
|
-
let manager = null;
|
|
1778
|
-
let selectedChainId = null;
|
|
1779
|
-
let connectPromise = null;
|
|
1780
|
-
let provider = null;
|
|
1781
|
-
let isLocalDisconnect = false;
|
|
1782
|
-
let emitWagmiMessage = null;
|
|
1783
|
-
let emitWagmiDisconnect = null;
|
|
1784
|
-
const providerListeners = /* @__PURE__ */ new Map();
|
|
1785
|
-
const emitProviderEvent = /* @__PURE__ */ __name((event, ...args) => {
|
|
1786
|
-
const listeners = providerListeners.get(event);
|
|
1787
|
-
if (listeners) for (const fn of listeners) fn(...args);
|
|
1788
|
-
}, "emitProviderEvent");
|
|
1789
|
-
const getCurrentSession = /* @__PURE__ */ __name(() => {
|
|
1790
|
-
if (!manager || manager.state.status !== "CONNECTED" || !manager.state.session) return null;
|
|
1791
|
-
return manager.state.session;
|
|
1792
|
-
}, "getCurrentSession");
|
|
1793
|
-
const getEvmAddressInfo = /* @__PURE__ */ __name((session) => session.addressInfoList.filter((info) => info.networkType === "eip155"), "getEvmAddressInfo");
|
|
1794
|
-
const getChecksummedAccounts = /* @__PURE__ */ __name((session) => getEvmAddressInfo(session).map((info) => getAddress(info.address)), "getChecksummedAccounts");
|
|
1795
|
-
const resetState = /* @__PURE__ */ __name(() => {
|
|
1796
|
-
connectPromise = null;
|
|
1797
|
-
selectedChainId = null;
|
|
1798
|
-
}, "resetState");
|
|
1799
|
-
const createManagerIfNeeded = /* @__PURE__ */ __name(() => {
|
|
1800
|
-
if (manager) return manager;
|
|
1801
|
-
manager = new DappSessionManager({
|
|
1802
|
-
projectKey: options.projectKey,
|
|
1803
|
-
serverUrl: options.serverUrl,
|
|
1804
|
-
storage: options.storage,
|
|
1805
|
-
e2ee: options.e2ee,
|
|
1806
|
-
createHub: options.createHub,
|
|
1807
|
-
enableReconnect: true,
|
|
1808
|
-
autoInit: true
|
|
1809
|
-
});
|
|
1810
|
-
manager.on("changeState", (state) => {
|
|
1811
|
-
var _a;
|
|
1812
|
-
if (state.status === "CONNECTING" && state.connectingPayload) {
|
|
1813
|
-
(_a = options.onDisplayUri) == null ? void 0 : _a.call(options, state.connectingPayload);
|
|
1814
|
-
emitWagmiMessage == null ? void 0 : emitWagmiMessage("display_uri", state.connectingPayload);
|
|
1815
|
-
}
|
|
1816
|
-
if (state.status === "DISCONNECTED" && !isLocalDisconnect) {
|
|
1817
|
-
resetState();
|
|
1818
|
-
emitProviderEvent("disconnect");
|
|
1819
|
-
emitWagmiDisconnect == null ? void 0 : emitWagmiDisconnect();
|
|
1820
|
-
}
|
|
1821
|
-
});
|
|
1822
|
-
return manager;
|
|
1823
|
-
}, "createManagerIfNeeded");
|
|
1824
|
-
const ensureManagerInitialized = /* @__PURE__ */ __name(async () => {
|
|
1825
|
-
const m = createManagerIfNeeded();
|
|
1826
|
-
if (m.state.status === "PENDING") {
|
|
1827
|
-
await m.initSession();
|
|
1828
|
-
return m;
|
|
1829
|
-
}
|
|
1830
|
-
if (m.state.status === "INITIALIZING") {
|
|
1831
|
-
await new Promise((resolve) => {
|
|
1832
|
-
const unsub = m.on("changeState", (state) => {
|
|
1833
|
-
if (state.status !== "INITIALIZING") {
|
|
1834
|
-
unsub();
|
|
1835
|
-
resolve();
|
|
1836
|
-
}
|
|
1837
|
-
});
|
|
1838
|
-
});
|
|
1839
|
-
}
|
|
1840
|
-
return m;
|
|
1841
|
-
}, "ensureManagerInitialized");
|
|
1842
|
-
return createConnector((config) => {
|
|
1843
|
-
emitWagmiMessage = /* @__PURE__ */ __name((type, data) => {
|
|
1844
|
-
config.emitter.emit("message", {
|
|
1845
|
-
type,
|
|
1846
|
-
data
|
|
1847
|
-
});
|
|
1848
|
-
}, "emitWagmiMessage");
|
|
1849
|
-
emitWagmiDisconnect = /* @__PURE__ */ __name(() => {
|
|
1850
|
-
config.emitter.emit("disconnect");
|
|
1851
|
-
}, "emitWagmiDisconnect");
|
|
1852
|
-
return {
|
|
1853
|
-
id: CONNECTOR_ID,
|
|
1854
|
-
name: CONNECTOR_NAME,
|
|
1855
|
-
type: CONNECTOR_TYPE,
|
|
1856
|
-
async setup() {
|
|
1857
|
-
await ensureManagerInitialized();
|
|
1858
|
-
},
|
|
1859
|
-
async connect(parameters) {
|
|
1860
|
-
var _a;
|
|
1861
|
-
try {
|
|
1862
|
-
const m = createManagerIfNeeded();
|
|
1863
|
-
if (m.state.status === "INITIALIZING") {
|
|
1864
|
-
await new Promise((resolve) => {
|
|
1865
|
-
const unsub = m.on("changeState", (state) => {
|
|
1866
|
-
if (state.status !== "INITIALIZING") {
|
|
1867
|
-
unsub();
|
|
1868
|
-
resolve();
|
|
1869
|
-
}
|
|
1870
|
-
});
|
|
1871
|
-
});
|
|
1872
|
-
}
|
|
1873
|
-
if (parameters == null ? void 0 : parameters.isReconnecting) {
|
|
1874
|
-
const session2 = getCurrentSession();
|
|
1875
|
-
if (!session2) throw new Error("No active session to reconnect");
|
|
1876
|
-
const accounts2 = getChecksummedAccounts(session2);
|
|
1877
|
-
if (accounts2.length === 0) throw new Error("No EVM address found");
|
|
1878
|
-
const chainId2 = Number.parseInt(getEvmAddressInfo(session2)[0].networkIdentifier, 10);
|
|
1879
|
-
if (!Number.isFinite(chainId2)) throw new Error(`Invalid chainId: ${chainId2}`);
|
|
1880
|
-
selectedChainId = chainId2;
|
|
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({
|
|
1891
|
-
accounts: accounts2,
|
|
1892
|
-
chainId: chainId2
|
|
1893
|
-
});
|
|
1894
|
-
}
|
|
1895
|
-
if (m.state.status === "CONNECTING" && m.state.connectingPayload) {
|
|
1896
|
-
(_a = options.onDisplayUri) == null ? void 0 : _a.call(options, m.state.connectingPayload);
|
|
1897
|
-
if (!connectPromise) {
|
|
1898
|
-
connectPromise = new Promise((resolve) => {
|
|
1899
|
-
const unsub = m.on("changeState", (state) => {
|
|
1900
|
-
if (state.status === "CONNECTED") {
|
|
1901
|
-
unsub();
|
|
1902
|
-
resolve(true);
|
|
1903
|
-
} else if (state.status === "DISCONNECTED") {
|
|
1904
|
-
unsub();
|
|
1905
|
-
resolve(false);
|
|
1906
|
-
}
|
|
1907
|
-
});
|
|
1908
|
-
});
|
|
1909
|
-
}
|
|
1910
|
-
}
|
|
1911
|
-
if (m.state.status !== "CONNECTED") {
|
|
1912
|
-
if (!connectPromise) {
|
|
1913
|
-
if (m.state.status !== "DISCONNECTED") {
|
|
1914
|
-
throw new Error(`Cannot connect from ${m.state.status} state`);
|
|
1915
|
-
}
|
|
1916
|
-
connectPromise = m.connectNewSession();
|
|
1917
|
-
}
|
|
1918
|
-
const connected = await connectPromise;
|
|
1919
|
-
connectPromise = null;
|
|
1920
|
-
if (!connected) throw new Error("Credit Connect session failed");
|
|
1921
|
-
}
|
|
1922
|
-
const session = getCurrentSession();
|
|
1923
|
-
if (!session) throw new Error("Credit Connect session failed");
|
|
1924
|
-
const accounts = getChecksummedAccounts(session);
|
|
1925
|
-
if (accounts.length === 0) throw new Error("No EVM address found");
|
|
1926
|
-
const chainId = Number.parseInt(getEvmAddressInfo(session)[0].networkIdentifier, 10);
|
|
1927
|
-
if (!Number.isFinite(chainId)) throw new Error(`Invalid chainId: ${chainId}`);
|
|
1928
|
-
selectedChainId = chainId;
|
|
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({
|
|
1939
|
-
accounts,
|
|
1940
|
-
chainId
|
|
1941
|
-
});
|
|
1942
|
-
} catch (error) {
|
|
1943
|
-
resetState();
|
|
1944
|
-
throw error;
|
|
1945
|
-
}
|
|
1946
|
-
},
|
|
1947
|
-
async switchChain({ chainId }) {
|
|
1948
|
-
const session = getCurrentSession();
|
|
1949
|
-
if (!session) throw new Error("No active session");
|
|
1950
|
-
const supported = getEvmAddressInfo(session).some((info) => Number.parseInt(info.networkIdentifier, 10) === chainId);
|
|
1951
|
-
if (!supported) {
|
|
1952
|
-
const err = new Error(`Unsupported chain: ${chainId}`);
|
|
1953
|
-
err.code = 4902;
|
|
1954
|
-
throw err;
|
|
1955
|
-
}
|
|
1956
|
-
selectedChainId = chainId;
|
|
1957
|
-
config.emitter.emit("change", {
|
|
1958
|
-
chainId
|
|
1959
|
-
});
|
|
1960
|
-
const chain = config.chains.find((c) => c.id === chainId);
|
|
1961
|
-
if (!chain) throw new Error(`Chain ${chainId} not in config`);
|
|
1962
|
-
return chain;
|
|
1963
|
-
},
|
|
1964
|
-
async isAuthorized() {
|
|
1965
|
-
await ensureManagerInitialized();
|
|
1966
|
-
const session = getCurrentSession();
|
|
1967
|
-
if (!session) return false;
|
|
1968
|
-
return session.addressInfoList.some((info) => info.networkType === "eip155");
|
|
1969
|
-
},
|
|
1970
|
-
async disconnect() {
|
|
1971
|
-
isLocalDisconnect = true;
|
|
1972
|
-
try {
|
|
1973
|
-
if ((manager == null ? void 0 : manager.state.status) === "CONNECTED") {
|
|
1974
|
-
await manager.disconnectSession();
|
|
1975
|
-
}
|
|
1976
|
-
} finally {
|
|
1977
|
-
isLocalDisconnect = false;
|
|
1978
|
-
}
|
|
1979
|
-
resetState();
|
|
1980
|
-
config.emitter.emit("disconnect");
|
|
1981
|
-
},
|
|
1982
|
-
async getAccounts() {
|
|
1983
|
-
await ensureManagerInitialized();
|
|
1984
|
-
const session = getCurrentSession();
|
|
1985
|
-
if (!session) return [];
|
|
1986
|
-
return getChecksummedAccounts(session);
|
|
1987
|
-
},
|
|
1988
|
-
async getChainId() {
|
|
1989
|
-
await ensureManagerInitialized();
|
|
1990
|
-
const session = getCurrentSession();
|
|
1991
|
-
if (!session) throw new Error("No active session");
|
|
1992
|
-
if (selectedChainId !== null) return selectedChainId;
|
|
1993
|
-
const evmAddressInfo = getEvmAddressInfo(session);
|
|
1994
|
-
if (evmAddressInfo.length === 0) throw new Error("No EVM address found");
|
|
1995
|
-
const chainId = Number.parseInt(evmAddressInfo[0].networkIdentifier, 10);
|
|
1996
|
-
if (!Number.isFinite(chainId)) throw new Error(`Invalid chainId: ${chainId}`);
|
|
1997
|
-
selectedChainId = chainId;
|
|
1998
|
-
return chainId;
|
|
1999
|
-
},
|
|
2000
|
-
async getProvider() {
|
|
2001
|
-
if (provider) return provider;
|
|
2002
|
-
await ensureManagerInitialized();
|
|
2003
|
-
const createdProvider = {
|
|
2004
|
-
request: /* @__PURE__ */ __name(async (args) => {
|
|
2005
|
-
const { method, params: rawParams } = args;
|
|
2006
|
-
const params = Array.isArray(rawParams) ? [
|
|
2007
|
-
...rawParams
|
|
2008
|
-
] : rawParams === void 0 ? [] : [
|
|
2009
|
-
rawParams
|
|
2010
|
-
];
|
|
2011
|
-
const session = getCurrentSession();
|
|
2012
|
-
const getSelectedAddressInfo = /* @__PURE__ */ __name((address) => {
|
|
2013
|
-
if (!session) throw new Error("No active session");
|
|
2014
|
-
const evmInfo = getEvmAddressInfo(session);
|
|
2015
|
-
if (evmInfo.length === 0) throw new Error("No EVM address found");
|
|
2016
|
-
if (!address) return evmInfo[0];
|
|
2017
|
-
const found = evmInfo.find((info) => info.address.toLowerCase() === address.toLowerCase());
|
|
2018
|
-
if (!found) throw new Error(`Address not in session: ${address}`);
|
|
2019
|
-
return found;
|
|
2020
|
-
}, "getSelectedAddressInfo");
|
|
2021
|
-
if (method === "eth_accounts") {
|
|
2022
|
-
if (!session) return [];
|
|
2023
|
-
return getChecksummedAccounts(session);
|
|
2024
|
-
}
|
|
2025
|
-
if (method === "eth_chainId") {
|
|
2026
|
-
if (!session) throw new Error("No active session");
|
|
2027
|
-
if (selectedChainId !== null) return `0x${selectedChainId.toString(16)}`;
|
|
2028
|
-
const evmInfo = getEvmAddressInfo(session);
|
|
2029
|
-
if (evmInfo.length === 0) throw new Error("No EVM address found");
|
|
2030
|
-
const chainId = Number.parseInt(evmInfo[0].networkIdentifier, 10);
|
|
2031
|
-
if (!Number.isFinite(chainId)) throw new Error(`Invalid chainId: ${chainId}`);
|
|
2032
|
-
selectedChainId = chainId;
|
|
2033
|
-
return `0x${chainId.toString(16)}`;
|
|
2034
|
-
}
|
|
2035
|
-
if (method === "wallet_switchEthereumChain") {
|
|
2036
|
-
const [{ chainId: rawChainId }] = params != null ? params : [];
|
|
2037
|
-
if (!rawChainId) throw new Error("wallet_switchEthereumChain missing chainId param");
|
|
2038
|
-
const chainId = Number.parseInt(rawChainId, 16);
|
|
2039
|
-
if (!Number.isFinite(chainId)) throw new Error(`Invalid chainId: ${rawChainId}`);
|
|
2040
|
-
if (!session) throw new Error("No active session");
|
|
2041
|
-
const supported = getEvmAddressInfo(session).some((info) => Number.parseInt(info.networkIdentifier, 10) === chainId);
|
|
2042
|
-
if (!supported) {
|
|
2043
|
-
const err = new Error(`Unsupported chain: ${chainId}`);
|
|
2044
|
-
err.code = 4902;
|
|
2045
|
-
throw err;
|
|
2046
|
-
}
|
|
2047
|
-
selectedChainId = chainId;
|
|
2048
|
-
config.emitter.emit("change", {
|
|
2049
|
-
chainId
|
|
2050
|
-
});
|
|
2051
|
-
return null;
|
|
2052
|
-
}
|
|
2053
|
-
if (method === "personal_sign") {
|
|
2054
|
-
const [messageParam, addressParam] = params != null ? params : [];
|
|
2055
|
-
const message = typeof messageParam === "string" ? messageParam : String(messageParam != null ? messageParam : "");
|
|
2056
|
-
const address = typeof addressParam === "string" ? addressParam : void 0;
|
|
2057
|
-
const addressInfo = getSelectedAddressInfo(address);
|
|
2058
|
-
const response = await (session == null ? void 0 : session.jsonRpc.request("signMessage", {
|
|
2059
|
-
message,
|
|
2060
|
-
addressInfo
|
|
2061
|
-
}));
|
|
2062
|
-
return response == null ? void 0 : response.signature;
|
|
2063
|
-
}
|
|
2064
|
-
if (method === "eth_sign") {
|
|
2065
|
-
const [addressParam, messageParam] = params != null ? params : [];
|
|
2066
|
-
const address = typeof addressParam === "string" ? addressParam : void 0;
|
|
2067
|
-
const message = typeof messageParam === "string" ? messageParam : String(messageParam != null ? messageParam : "");
|
|
2068
|
-
const addressInfo = getSelectedAddressInfo(address);
|
|
2069
|
-
const response = await (session == null ? void 0 : session.jsonRpc.request("signMessage", {
|
|
2070
|
-
message,
|
|
2071
|
-
addressInfo
|
|
2072
|
-
}));
|
|
2073
|
-
return response == null ? void 0 : response.signature;
|
|
2074
|
-
}
|
|
2075
|
-
if (method === "eth_signTypedData" || method === "eth_signTypedData_v4") {
|
|
2076
|
-
const [addressParam, typedDataParam] = params != null ? params : [];
|
|
2077
|
-
const address = typeof addressParam === "string" ? addressParam : void 0;
|
|
2078
|
-
const typedData = typeof typedDataParam === "string" ? typedDataParam : JSON.stringify(typedDataParam != null ? typedDataParam : "");
|
|
2079
|
-
const addressInfo = getSelectedAddressInfo(address);
|
|
2080
|
-
const response = await (session == null ? void 0 : session.jsonRpc.request("signTypedData", {
|
|
2081
|
-
typedData,
|
|
2082
|
-
addressInfo
|
|
2083
|
-
}));
|
|
2084
|
-
return response == null ? void 0 : response.signature;
|
|
2085
|
-
}
|
|
2086
|
-
if (method === "eth_sendTransaction") {
|
|
2087
|
-
const [txParams] = params != null ? params : [];
|
|
2088
|
-
const addressInfo = getSelectedAddressInfo(txParams == null ? void 0 : txParams.from);
|
|
2089
|
-
const response = await (session == null ? void 0 : session.jsonRpc.request("sendTransaction", {
|
|
2090
|
-
addressInfo,
|
|
2091
|
-
to: txParams == null ? void 0 : txParams.to,
|
|
2092
|
-
value: txParams == null ? void 0 : txParams.value,
|
|
2093
|
-
data: txParams == null ? void 0 : txParams.data,
|
|
2094
|
-
gas: txParams == null ? void 0 : txParams.gas,
|
|
2095
|
-
gasPrice: txParams == null ? void 0 : txParams.gasPrice,
|
|
2096
|
-
maxFeePerGas: txParams == null ? void 0 : txParams.maxFeePerGas,
|
|
2097
|
-
maxPriorityFeePerGas: txParams == null ? void 0 : txParams.maxPriorityFeePerGas,
|
|
2098
|
-
nonce: txParams == null ? void 0 : txParams.nonce,
|
|
2099
|
-
chainId: txParams == null ? void 0 : txParams.chainId
|
|
2100
|
-
}));
|
|
2101
|
-
return response == null ? void 0 : response.txHash;
|
|
2102
|
-
}
|
|
2103
|
-
if (method === "credit_connect_send_message") {
|
|
2104
|
-
if (!session) throw new Error("No active session");
|
|
2105
|
-
const [messageParam] = params != null ? params : [];
|
|
2106
|
-
const message = typeof messageParam === "string" ? messageParam : JSON.stringify(messageParam != null ? messageParam : "");
|
|
2107
|
-
await session.msg.sendMessage(message);
|
|
2108
|
-
return true;
|
|
2109
|
-
}
|
|
2110
|
-
if (method === "credit_connect_jsonrpc_ping") {
|
|
2111
|
-
if (!session) throw new Error("No active session");
|
|
2112
|
-
return await session.jsonRpc.request("pingPong", {});
|
|
2113
|
-
}
|
|
2114
|
-
throw new Error(`Unsupported provider method: ${method}`);
|
|
2115
|
-
}, "request"),
|
|
2116
|
-
on: /* @__PURE__ */ __name((event, listener) => {
|
|
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;
|
|
2124
|
-
}, "on"),
|
|
2125
|
-
removeListener: /* @__PURE__ */ __name((event, listener) => {
|
|
2126
|
-
var _a;
|
|
2127
|
-
(_a = providerListeners.get(event)) == null ? void 0 : _a.delete(listener);
|
|
2128
|
-
return createdProvider;
|
|
2129
|
-
}, "removeListener")
|
|
2130
|
-
};
|
|
2131
|
-
provider = createdProvider;
|
|
2132
|
-
return provider;
|
|
2133
|
-
},
|
|
2134
|
-
onAccountsChanged(accounts) {
|
|
2135
|
-
if (!accounts || accounts.length === 0) {
|
|
2136
|
-
config.emitter.emit("disconnect");
|
|
2137
|
-
return;
|
|
2138
|
-
}
|
|
2139
|
-
config.emitter.emit("change", {
|
|
2140
|
-
accounts: accounts.map(getAddress)
|
|
2141
|
-
});
|
|
2142
|
-
},
|
|
2143
|
-
onChainChanged(chainId) {
|
|
2144
|
-
const normalized = typeof chainId === "string" ? Number.parseInt(chainId, 16) : Number(chainId);
|
|
2145
|
-
if (!Number.isFinite(normalized)) return;
|
|
2146
|
-
selectedChainId = normalized;
|
|
2147
|
-
config.emitter.emit("change", {
|
|
2148
|
-
chainId: normalized
|
|
2149
|
-
});
|
|
2150
|
-
},
|
|
2151
|
-
onDisconnect() {
|
|
2152
|
-
resetState();
|
|
2153
|
-
config.emitter.emit("disconnect");
|
|
2154
|
-
}
|
|
2155
|
-
};
|
|
2156
|
-
});
|
|
2157
|
-
}, "creditConnectConnector");
|
|
2158
1767
|
export {
|
|
2159
1768
|
ConnectKitProvider,
|
|
2160
1769
|
ConnectModal,
|
|
2161
|
-
creditConnectConnector,
|
|
2162
1770
|
useConnectKit
|
|
2163
1771
|
};
|
package/dist/package.json
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gluwa/connect-kit",
|
|
3
|
-
"version": "0.1.0-next.
|
|
3
|
+
"version": "0.1.0-next.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
7
7
|
"default": "./src/index.ts"
|
|
8
8
|
},
|
|
9
|
+
"./credit-connect": {
|
|
10
|
+
"default": "./src/credit-connect.ts"
|
|
11
|
+
},
|
|
9
12
|
"./package.json": "./package.json"
|
|
10
13
|
},
|
|
11
14
|
"publishConfig": {
|
|
@@ -17,6 +20,10 @@
|
|
|
17
20
|
"types": "./dist/index.d.ts",
|
|
18
21
|
"default": "./dist/index.js"
|
|
19
22
|
},
|
|
23
|
+
"./credit-connect": {
|
|
24
|
+
"types": "./dist/credit-connect.d.ts",
|
|
25
|
+
"default": "./dist/credit-connect.js"
|
|
26
|
+
},
|
|
20
27
|
"./index.css": "./dist/index.css"
|
|
21
28
|
}
|
|
22
29
|
},
|
|
@@ -35,6 +42,7 @@
|
|
|
35
42
|
},
|
|
36
43
|
"devDependencies": {
|
|
37
44
|
"@gluwa/credit-connect-sdk": "workspace:*",
|
|
45
|
+
"@tanstack/react-query": "^5.62.0",
|
|
38
46
|
"@types/react": "catalog:react18",
|
|
39
47
|
"@wagmi/core": "^2.16.7",
|
|
40
48
|
"esbuild-sass-plugin": "^3.7.0",
|
|
@@ -48,6 +56,7 @@
|
|
|
48
56
|
},
|
|
49
57
|
"peerDependencies": {
|
|
50
58
|
"@gluwa/credit-connect-sdk": "workspace:*",
|
|
59
|
+
"@tanstack/react-query": ">=5.0.0",
|
|
51
60
|
"@wagmi/core": ">=2.0.0",
|
|
52
61
|
"react": "^18.0.0 || ^19.0.0",
|
|
53
62
|
"viem": ">=2.0.0",
|
|
@@ -56,6 +65,9 @@
|
|
|
56
65
|
"peerDependenciesMeta": {
|
|
57
66
|
"@gluwa/credit-connect-sdk": {
|
|
58
67
|
"optional": true
|
|
68
|
+
},
|
|
69
|
+
"@tanstack/react-query": {
|
|
70
|
+
"optional": true
|
|
59
71
|
}
|
|
60
72
|
},
|
|
61
73
|
"repository": {
|
package/package.json
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gluwa/connect-kit",
|
|
3
|
-
"version": "0.1.0-next.
|
|
3
|
+
"version": "0.1.0-next.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
8
|
"default": "./dist/index.js"
|
|
9
9
|
},
|
|
10
|
+
"./credit-connect": {
|
|
11
|
+
"types": "./dist/credit-connect.d.ts",
|
|
12
|
+
"default": "./dist/credit-connect.js"
|
|
13
|
+
},
|
|
10
14
|
"./index.css": "./dist/index.css"
|
|
11
15
|
},
|
|
12
16
|
"publishConfig": {
|
|
@@ -19,6 +23,7 @@
|
|
|
19
23
|
"qrcode.react": "^3.2.0"
|
|
20
24
|
},
|
|
21
25
|
"devDependencies": {
|
|
26
|
+
"@tanstack/react-query": "^5.62.0",
|
|
22
27
|
"@types/react": "^18.3.18",
|
|
23
28
|
"@wagmi/core": "^2.16.7",
|
|
24
29
|
"esbuild-sass-plugin": "^3.7.0",
|
|
@@ -32,6 +37,7 @@
|
|
|
32
37
|
"@gluwa/credit-connect-sdk": "0.2.0-next.1"
|
|
33
38
|
},
|
|
34
39
|
"peerDependencies": {
|
|
40
|
+
"@tanstack/react-query": ">=5.0.0",
|
|
35
41
|
"@wagmi/core": ">=2.0.0",
|
|
36
42
|
"react": "^18.0.0 || ^19.0.0",
|
|
37
43
|
"viem": ">=2.0.0",
|
|
@@ -41,6 +47,9 @@
|
|
|
41
47
|
"peerDependenciesMeta": {
|
|
42
48
|
"@gluwa/credit-connect-sdk": {
|
|
43
49
|
"optional": true
|
|
50
|
+
},
|
|
51
|
+
"@tanstack/react-query": {
|
|
52
|
+
"optional": true
|
|
44
53
|
}
|
|
45
54
|
},
|
|
46
55
|
"repository": {
|