@hyperlane-xyz/widgets 7.0.0 → 7.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ErrorBoundary.d.ts +15 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.js +30 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/IconButton.js +3 -3
- package/dist/components/IconButton.js.map +1 -1
- package/dist/components/Tooltip.d.ts +3 -1
- package/dist/components/Tooltip.d.ts.map +1 -1
- package/dist/components/Tooltip.js +2 -2
- package/dist/components/Tooltip.js.map +1 -1
- package/dist/icons/Ellipsis.d.ts +9 -0
- package/dist/icons/Ellipsis.d.ts.map +1 -0
- package/dist/icons/Ellipsis.js +8 -0
- package/dist/icons/Ellipsis.js.map +1 -0
- package/dist/icons/Error.d.ts +6 -0
- package/dist/icons/Error.d.ts.map +1 -0
- package/dist/icons/Error.js +8 -0
- package/dist/icons/Error.js.map +1 -0
- package/dist/icons/Logout.d.ts +6 -0
- package/dist/icons/Logout.d.ts.map +1 -0
- package/dist/icons/Logout.js +8 -0
- package/dist/icons/Logout.js.map +1 -0
- package/dist/icons/Swap.d.ts +6 -0
- package/dist/icons/Swap.d.ts.map +1 -0
- package/dist/icons/Swap.js +8 -0
- package/dist/icons/Swap.js.map +1 -0
- package/dist/icons/Warning.d.ts +6 -0
- package/dist/icons/Warning.d.ts.map +1 -0
- package/dist/icons/Warning.js +8 -0
- package/dist/icons/Warning.js.map +1 -0
- package/dist/icons/XCircle.d.ts +6 -0
- package/dist/icons/XCircle.d.ts.map +1 -0
- package/dist/icons/XCircle.js +9 -0
- package/dist/icons/XCircle.js.map +1 -0
- package/dist/index.d.ts +26 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/layout/Modal.d.ts +2 -1
- package/dist/layout/Modal.d.ts.map +1 -1
- package/dist/layout/Modal.js +8 -7
- package/dist/layout/Modal.js.map +1 -1
- package/dist/logger.d.ts +2 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +3 -0
- package/dist/logger.js.map +1 -0
- package/dist/logos/Cosmos.d.ts +5 -0
- package/dist/logos/Cosmos.d.ts.map +1 -0
- package/dist/logos/Cosmos.js +10 -0
- package/dist/logos/Cosmos.js.map +1 -0
- package/dist/logos/Ethereum.d.ts +5 -0
- package/dist/logos/Ethereum.d.ts.map +1 -0
- package/dist/logos/Ethereum.js +13 -0
- package/dist/logos/Ethereum.js.map +1 -0
- package/dist/logos/Solana.d.ts +5 -0
- package/dist/logos/Solana.d.ts.map +1 -0
- package/dist/logos/Solana.js +18 -0
- package/dist/logos/Solana.js.map +1 -0
- package/dist/logos/WalletConnect.d.ts +5 -0
- package/dist/logos/WalletConnect.d.ts.map +1 -0
- package/dist/logos/WalletConnect.js +11 -0
- package/dist/logos/WalletConnect.js.map +1 -0
- package/dist/logos/protocols.d.ts +4 -0
- package/dist/logos/protocols.d.ts.map +1 -0
- package/dist/logos/protocols.js +10 -0
- package/dist/logos/protocols.js.map +1 -0
- package/dist/messages/useMessage.d.ts.map +1 -1
- package/dist/messages/useMessage.js +7 -5
- package/dist/messages/useMessage.js.map +1 -1
- package/dist/messages/useMessageStage.d.ts.map +1 -1
- package/dist/messages/useMessageStage.js +9 -7
- package/dist/messages/useMessageStage.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +3 -2
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/debounce.d.ts +2 -0
- package/dist/utils/debounce.d.ts.map +1 -0
- package/dist/utils/debounce.js +15 -0
- package/dist/utils/debounce.js.map +1 -0
- package/dist/utils/explorers.d.ts.map +1 -1
- package/dist/utils/explorers.js +3 -2
- package/dist/utils/explorers.js.map +1 -1
- package/dist/utils/ssr.d.ts +2 -0
- package/dist/utils/ssr.d.ts.map +1 -0
- package/dist/utils/ssr.js +10 -0
- package/dist/utils/ssr.js.map +1 -0
- package/dist/utils/timeout.d.ts +3 -0
- package/dist/utils/timeout.d.ts.map +1 -0
- package/dist/utils/{useInterval.js → timeout.js} +20 -2
- package/dist/utils/timeout.js.map +1 -0
- package/dist/utils/useChainConnectionTest.js +1 -1
- package/dist/utils/useChainConnectionTest.js.map +1 -1
- package/dist/walletIntegrations/AccountList.d.ts +18 -0
- package/dist/walletIntegrations/AccountList.d.ts.map +1 -0
- package/dist/walletIntegrations/AccountList.js +64 -0
- package/dist/walletIntegrations/AccountList.js.map +1 -0
- package/dist/walletIntegrations/ConnectWalletButton.d.ts +11 -0
- package/dist/walletIntegrations/ConnectWalletButton.d.ts.map +1 -0
- package/dist/walletIntegrations/ConnectWalletButton.js +44 -0
- package/dist/walletIntegrations/ConnectWalletButton.js.map +1 -0
- package/dist/walletIntegrations/MultiProtocolWalletModal.d.ts +8 -0
- package/dist/walletIntegrations/MultiProtocolWalletModal.d.ts.map +1 -0
- package/dist/walletIntegrations/MultiProtocolWalletModal.js +28 -0
- package/dist/walletIntegrations/MultiProtocolWalletModal.js.map +1 -0
- package/dist/walletIntegrations/WalletLogo.d.ts +7 -0
- package/dist/walletIntegrations/WalletLogo.d.ts.map +1 -0
- package/dist/walletIntegrations/WalletLogo.js +16 -0
- package/dist/walletIntegrations/WalletLogo.js.map +1 -0
- package/dist/walletIntegrations/cosmos.d.ts +14 -0
- package/dist/walletIntegrations/cosmos.d.ts.map +1 -0
- package/dist/walletIntegrations/cosmos.js +127 -0
- package/dist/walletIntegrations/cosmos.js.map +1 -0
- package/dist/walletIntegrations/ethereum.d.ts +11 -0
- package/dist/walletIntegrations/ethereum.d.ts.map +1 -0
- package/dist/walletIntegrations/ethereum.js +96 -0
- package/dist/walletIntegrations/ethereum.js.map +1 -0
- package/dist/walletIntegrations/multiProtocol.d.ts +23 -0
- package/dist/walletIntegrations/multiProtocol.d.ts.map +1 -0
- package/dist/walletIntegrations/multiProtocol.js +145 -0
- package/dist/walletIntegrations/multiProtocol.js.map +1 -0
- package/dist/walletIntegrations/solana.d.ts +9 -0
- package/dist/walletIntegrations/solana.d.ts.map +1 -0
- package/dist/walletIntegrations/solana.js +84 -0
- package/dist/walletIntegrations/solana.js.map +1 -0
- package/dist/walletIntegrations/types.d.ts +34 -0
- package/dist/walletIntegrations/types.d.ts.map +1 -0
- package/dist/walletIntegrations/types.js +2 -0
- package/dist/walletIntegrations/types.js.map +1 -0
- package/dist/walletIntegrations/utils.d.ts +92 -0
- package/dist/walletIntegrations/utils.d.ts.map +1 -0
- package/dist/walletIntegrations/utils.js +36 -0
- package/dist/walletIntegrations/utils.js.map +1 -0
- package/package.json +19 -5
- package/dist/utils/useInterval.d.ts +0 -2
- package/dist/utils/useInterval.d.ts.map +0 -1
- package/dist/utils/useInterval.js.map +0 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import clsx from 'clsx';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { objKeys } from '@hyperlane-xyz/utils';
|
|
4
|
+
import { Button } from '../components/Button.js';
|
|
5
|
+
import { IconButton } from '../components/IconButton.js';
|
|
6
|
+
import { LogoutIcon } from '../icons/Logout.js';
|
|
7
|
+
import { WalletIcon } from '../icons/Wallet.js';
|
|
8
|
+
import { XCircleIcon } from '../icons/XCircle.js';
|
|
9
|
+
import { widgetLogger } from '../logger.js';
|
|
10
|
+
import { tryClipboardSet } from '../utils/clipboard.js';
|
|
11
|
+
import { WalletLogo } from '../walletIntegrations/WalletLogo.js';
|
|
12
|
+
import { useAccounts, useDisconnectFns, useWalletDetails, } from '../walletIntegrations/multiProtocol.js';
|
|
13
|
+
const logger = widgetLogger.child({ module: 'walletIntegrations/AccountList' });
|
|
14
|
+
export function AccountList({ multiProvider, onClickConnectWallet, onCopySuccess, className, }) {
|
|
15
|
+
const { readyAccounts } = useAccounts(multiProvider);
|
|
16
|
+
const disconnectFns = useDisconnectFns();
|
|
17
|
+
const walletDetails = useWalletDetails();
|
|
18
|
+
const onClickDisconnect = async (protocol) => {
|
|
19
|
+
try {
|
|
20
|
+
const disconnectFn = disconnectFns[protocol];
|
|
21
|
+
if (disconnectFn)
|
|
22
|
+
await disconnectFn();
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
logger.error('Error disconnecting wallet', error);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const onClickDisconnectAll = async () => {
|
|
29
|
+
for (const protocol of objKeys(disconnectFns)) {
|
|
30
|
+
await onClickDisconnect(protocol);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
return (React.createElement("div", { className: clsx('htw-space-y-2', className) },
|
|
34
|
+
readyAccounts.map((acc, i) => (React.createElement(AccountSummary, { key: i, account: acc, walletDetails: walletDetails[acc.protocol], onCopySuccess: onCopySuccess, onClickDisconnect: () => onClickDisconnect(acc.protocol) }))),
|
|
35
|
+
React.createElement(Button, { onClick: onClickConnectWallet, className: clsx(styles.btn, 'htw-py-2 htw-px-2.5') },
|
|
36
|
+
React.createElement(WalletIcon, { width: 18, height: 18 }),
|
|
37
|
+
React.createElement("div", { className: "htw-ml-2 htw-text-sm" }, "Connect wallet")),
|
|
38
|
+
React.createElement(Button, { onClick: onClickDisconnectAll, className: clsx(styles.btn, 'htw-py-2 htw-px-2.5') },
|
|
39
|
+
React.createElement(LogoutIcon, { width: 18, height: 18 }),
|
|
40
|
+
React.createElement("div", { className: "htw-ml-2 htw-text-sm" }, "Disconnect all wallets"))));
|
|
41
|
+
}
|
|
42
|
+
export function AccountSummary({ account, onCopySuccess, walletDetails, onClickDisconnect, className, ...rest }) {
|
|
43
|
+
const numAddresses = account?.addresses?.length || 0;
|
|
44
|
+
const onlyAddress = numAddresses === 1 ? account.addresses[0].address : undefined;
|
|
45
|
+
const onClickCopy = async () => {
|
|
46
|
+
const copyValue = account.addresses.map((a) => a.address).join(', ');
|
|
47
|
+
await tryClipboardSet(copyValue);
|
|
48
|
+
onCopySuccess?.();
|
|
49
|
+
};
|
|
50
|
+
return (React.createElement("div", { className: "htw-relative" },
|
|
51
|
+
React.createElement(Button, { onClick: onClickCopy, className: clsx(styles.btn, 'htw-py-2 htw-pl-1 htw-pr-3', className), ...rest },
|
|
52
|
+
React.createElement("div", { className: "htw-shrink-0 htw-overflow-hidden htw-rounded-full" },
|
|
53
|
+
React.createElement(WalletLogo, { walletDetails: walletDetails, size: 38 })),
|
|
54
|
+
React.createElement("div", { className: "htw-mx-3 htw-flex htw-shrink htw-flex-col htw-items-start htw-overflow-hidden" },
|
|
55
|
+
React.createElement("div", { className: "htw-text-sm htw-font-normal htw-text-gray-800" }, walletDetails.name || 'Wallet'),
|
|
56
|
+
React.createElement("div", { className: "htw-w-full htw-truncate htw-text-left htw-text-xs" }, onlyAddress || `${numAddresses} known addresses`))),
|
|
57
|
+
React.createElement("div", { className: "htw-absolute htw-right-1 htw-top-1/2 htw--translate-y-1/2 htw-rounded-full" },
|
|
58
|
+
React.createElement(IconButton, { onClick: onClickDisconnect, title: "Disconnect", className: "hover:htw-rotate-90" },
|
|
59
|
+
React.createElement(XCircleIcon, { width: 15, height: 15 })))));
|
|
60
|
+
}
|
|
61
|
+
const styles = {
|
|
62
|
+
btn: 'htw-flex htw-w-full htw-items-center all:htw-justify-start htw-rounded-sm htw-text-sm hover:htw-bg-gray-200 all:hover:htw-opacity-100',
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=AccountList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountList.js","sourceRoot":"","sources":["../../src/walletIntegrations/AccountList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React, { ButtonHTMLAttributes } from 'react';
|
|
2
|
+
import { MultiProtocolProvider } from '@hyperlane-xyz/sdk';
|
|
3
|
+
type Props = {
|
|
4
|
+
multiProvider: MultiProtocolProvider;
|
|
5
|
+
onClickWhenConnected: () => void;
|
|
6
|
+
onClickWhenUnconnected: () => void;
|
|
7
|
+
countClassName?: string;
|
|
8
|
+
} & ButtonHTMLAttributes<HTMLButtonElement>;
|
|
9
|
+
export declare function ConnectWalletButton({ multiProvider, onClickWhenConnected, onClickWhenUnconnected, className, countClassName, ...rest }: Props): React.JSX.Element | null;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=ConnectWalletButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectWalletButton.d.ts","sourceRoot":"","sources":["../../src/walletIntegrations/ConnectWalletButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAW3D,KAAK,KAAK,GAAG;IACX,aAAa,EAAE,qBAAqB,CAAC;IACrC,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,sBAAsB,EAAE,MAAM,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AAE5C,wBAAgB,mBAAmB,CAAC,EAClC,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,SAAS,EACT,cAAc,EACd,GAAG,IAAI,EACR,EAAE,KAAK,4BAsFP"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import clsx from 'clsx';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { ProtocolType, shortenAddress } from '@hyperlane-xyz/utils';
|
|
4
|
+
import { Button } from '../components/Button.js';
|
|
5
|
+
import { ChevronIcon } from '../icons/Chevron.js';
|
|
6
|
+
import { WalletIcon } from '../icons/Wallet.js';
|
|
7
|
+
import { useIsSsr } from '../utils/ssr.js';
|
|
8
|
+
import { WalletLogo } from './WalletLogo.js';
|
|
9
|
+
import { useAccounts, useWalletDetails } from './multiProtocol.js';
|
|
10
|
+
export function ConnectWalletButton({ multiProvider, onClickWhenConnected, onClickWhenUnconnected, className, countClassName, ...rest }) {
|
|
11
|
+
const isSsr = useIsSsr();
|
|
12
|
+
const { readyAccounts } = useAccounts(multiProvider);
|
|
13
|
+
const walletDetails = useWalletDetails();
|
|
14
|
+
const numReady = readyAccounts.length;
|
|
15
|
+
const firstAccount = readyAccounts[0];
|
|
16
|
+
const firstWallet = walletDetails[firstAccount?.protocol || ProtocolType.Ethereum];
|
|
17
|
+
if (isSsr) {
|
|
18
|
+
// https://github.com/wagmi-dev/wagmi/issues/542#issuecomment-1144178142
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return (React.createElement("div", { className: "htw-relative" },
|
|
22
|
+
React.createElement("div", { className: "htw-relative" },
|
|
23
|
+
numReady === 0 && (React.createElement(Button, { className: clsx('htw-py-2 htw-px-3', className), onClick: onClickWhenUnconnected, title: "Choose wallet", ...rest },
|
|
24
|
+
React.createElement("div", { className: "htw-flex htw-items-center htw-gap-2" },
|
|
25
|
+
React.createElement(WalletIcon, { width: 16, height: 16 }),
|
|
26
|
+
React.createElement("div", { className: "htw-text-xs sm:htw-text-sm" }, "Connect wallet")))),
|
|
27
|
+
numReady === 1 && (React.createElement(Button, { onClick: onClickWhenConnected, className: clsx('htw-px-2.5 htw-py-1', className), ...rest },
|
|
28
|
+
React.createElement("div", { className: "htw-flex htw-w-36 htw-items-center htw-justify-center xs:htw-w-auto" },
|
|
29
|
+
React.createElement(WalletLogo, { walletDetails: firstWallet, size: 26 }),
|
|
30
|
+
React.createElement("div", { className: "htw-mx-3 htw-flex htw-flex-col htw-items-start" },
|
|
31
|
+
React.createElement("div", { className: "htw-text-xs htw-text-gray-500" }, firstWallet.name || 'Wallet'),
|
|
32
|
+
React.createElement("div", { className: "htw-text-xs" }, readyAccounts[0].addresses.length
|
|
33
|
+
? shortenAddress(readyAccounts[0].addresses[0].address, true)
|
|
34
|
+
: 'Unknown')),
|
|
35
|
+
React.createElement(ChevronIcon, { direction: "s", width: 10, height: 6 })))),
|
|
36
|
+
numReady > 1 && (React.createElement(Button, { onClick: onClickWhenConnected, className: clsx('htw-px-2.5 htw-py-1', className), ...rest },
|
|
37
|
+
React.createElement("div", { className: "htw-flex htw-items-center htw-justify-center" },
|
|
38
|
+
React.createElement("div", { style: { height: 26, width: 26 }, className: clsx('htw-flex htw-items-center htw-justify-center htw-rounded-full htw-bg-gray-600 htw-text-white', countClassName) }, numReady),
|
|
39
|
+
React.createElement("div", { className: "htw-mx-3 htw-flex htw-flex-col htw-items-start" },
|
|
40
|
+
React.createElement("div", { className: "htw-text-xs htw-text-gray-500" }, "Wallets"),
|
|
41
|
+
React.createElement("div", { className: "htw-text-xs" }, `${numReady} Connected`)),
|
|
42
|
+
React.createElement(ChevronIcon, { direction: "s", width: 10, height: 6 })))))));
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=ConnectWalletButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectWalletButton.js","sourceRoot":"","sources":["../../src/walletIntegrations/ConnectWalletButton.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ProtocolType } from '@hyperlane-xyz/utils';
|
|
3
|
+
export declare function MultiProtocolWalletModal({ isOpen, close, protocols, }: {
|
|
4
|
+
isOpen: boolean;
|
|
5
|
+
close: () => void;
|
|
6
|
+
protocols?: ProtocolType[];
|
|
7
|
+
}): React.JSX.Element;
|
|
8
|
+
//# sourceMappingURL=MultiProtocolWalletModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiProtocolWalletModal.d.ts","sourceRoot":"","sources":["../../src/walletIntegrations/MultiProtocolWalletModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAOpD,wBAAgB,wBAAwB,CAAC,EACvC,MAAM,EACN,KAAK,EACL,SAAS,GACV,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;CAC5B,qBA6CA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ProtocolType } from '@hyperlane-xyz/utils';
|
|
3
|
+
import { Modal } from '../layout/Modal.js';
|
|
4
|
+
import { PROTOCOL_TO_LOGO } from '../logos/protocols.js';
|
|
5
|
+
import { useConnectFns } from './multiProtocol.js';
|
|
6
|
+
export function MultiProtocolWalletModal({ isOpen, close, protocols, }) {
|
|
7
|
+
const connectFns = useConnectFns();
|
|
8
|
+
const onClickProtocol = (protocol) => {
|
|
9
|
+
close();
|
|
10
|
+
const connectFn = connectFns[protocol];
|
|
11
|
+
if (connectFn)
|
|
12
|
+
connectFn();
|
|
13
|
+
};
|
|
14
|
+
const includesProtocol = (protocol) => !protocols || protocols.includes(protocol);
|
|
15
|
+
return (React.createElement(Modal, { isOpen: isOpen, close: close, panelClassname: "htw-max-w-sm htw-p-4" },
|
|
16
|
+
React.createElement("div", { className: "htw-flex htw-flex-col htw-space-y-2.5 htw-pb-2 htw-pt-4" },
|
|
17
|
+
includesProtocol(ProtocolType.Ethereum) && (React.createElement(ProtocolButton, { protocol: ProtocolType.Ethereum, onClick: onClickProtocol, subTitle: "an EVM" }, "Ethereum")),
|
|
18
|
+
includesProtocol(ProtocolType.Sealevel) && (React.createElement(ProtocolButton, { protocol: ProtocolType.Sealevel, onClick: onClickProtocol, subTitle: "a Solana" }, "Solana")),
|
|
19
|
+
includesProtocol(ProtocolType.Cosmos) && (React.createElement(ProtocolButton, { protocol: ProtocolType.Cosmos, onClick: onClickProtocol, subTitle: "an Cosmos" }, "Cosmos")))));
|
|
20
|
+
}
|
|
21
|
+
function ProtocolButton({ onClick, subTitle, protocol, children, }) {
|
|
22
|
+
const Logo = PROTOCOL_TO_LOGO[protocol];
|
|
23
|
+
return (React.createElement("button", { onClick: () => onClick(protocol), className: "htw-flex htw-w-full htw-flex-col htw-items-center htw-space-y-2.5 htw-rounded-lg htw-border htw-border-gray-200 htw-py-3.5 htw-transition-all hover:htw-bg-gray-100 active:htw-scale-95" },
|
|
24
|
+
React.createElement(Logo, { width: 34, height: 34 }),
|
|
25
|
+
React.createElement("div", { className: "htw-tracking-wide htw-text-gray-800" }, children),
|
|
26
|
+
React.createElement("div", { className: "htw-text-sm htw-text-gray-500" }, `Connect to ${subTitle} compatible wallet`)));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=MultiProtocolWalletModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiProtocolWalletModal.js","sourceRoot":"","sources":["../../src/walletIntegrations/MultiProtocolWalletModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,UAAU,wBAAwB,CAAC,EACvC,MAAM,EACN,KAAK,EACL,SAAS,GAKV;IACC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,MAAM,eAAe,GAAG,CAAC,QAAsB,EAAE,EAAE;QACjD,KAAK,EAAE,CAAC;QACR,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,SAAS;YAAE,SAAS,EAAE,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,QAAsB,EAAE,EAAE,CAClD,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE7C,OAAO,CACL,oBAAC,KAAK,IAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAC,sBAAsB;QACxE,6BAAK,SAAS,EAAC,yDAAyD;YACrE,gBAAgB,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAC1C,oBAAC,cAAc,IACb,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAC/B,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAC,QAAQ,eAGF,CAClB;YACA,gBAAgB,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAC1C,oBAAC,cAAc,IACb,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAC/B,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAC,UAAU,aAGJ,CAClB;YACA,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CACxC,oBAAC,cAAc,IACb,QAAQ,EAAE,YAAY,CAAC,MAAM,EAC7B,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAC,WAAW,aAGL,CAClB,CACG,CACA,CACT,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EACtB,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,QAAQ,GAKR;IACA,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACxC,OAAO,CACL,gCACE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAChC,SAAS,EAAC,yLAAyL;QAEnM,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAI;QAC/B,6BAAK,SAAS,EAAC,qCAAqC,IAAE,QAAQ,CAAO;QACrE,6BAAK,SAAS,EAAC,+BAA+B,IAAE,cAAc,QAAQ,oBAAoB,CAAO,CAC1F,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WalletLogo.d.ts","sourceRoot":"","sources":["../../src/walletIntegrations/WalletLogo.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAgB,UAAU,CAAC,EACzB,aAAa,EACb,IAAI,GACL,EAAE;IACD,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,qBAUA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { WalletIcon } from '../icons/Wallet.js';
|
|
3
|
+
import { WalletConnectLogo } from '../logos/WalletConnect.js';
|
|
4
|
+
export function WalletLogo({ walletDetails, size, }) {
|
|
5
|
+
const src = walletDetails.logoUrl?.trim();
|
|
6
|
+
if (src) {
|
|
7
|
+
return React.createElement("img", { src: src, width: size, height: size });
|
|
8
|
+
}
|
|
9
|
+
else if (walletDetails.name?.toLowerCase() === 'walletconnect') {
|
|
10
|
+
return React.createElement(WalletConnectLogo, { width: size, height: size });
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
return React.createElement(WalletIcon, { width: size, height: size });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=WalletLogo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WalletLogo.js","sourceRoot":"","sources":["../../src/walletIntegrations/WalletLogo.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAI9D,MAAM,UAAU,UAAU,CAAC,EACzB,aAAa,EACb,IAAI,GAIL;IACC,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;IAE1C,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,6BAAK,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAI,CAAC;IACtD,CAAC;SAAM,IAAI,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,CAAC;QACjE,OAAO,oBAAC,iBAAiB,IAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAI,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,OAAO,oBAAC,UAAU,IAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAI,CAAC;IACnD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AssetList, Chain as CosmosChain } from '@chain-registry/types';
|
|
2
|
+
import { MultiProtocolProvider } from '@hyperlane-xyz/sdk';
|
|
3
|
+
import { AccountInfo, ActiveChainInfo, ChainTransactionFns, WalletDetails } from './types.js';
|
|
4
|
+
export declare function useCosmosAccount(multiProvider: MultiProtocolProvider): AccountInfo;
|
|
5
|
+
export declare function useCosmosWalletDetails(): WalletDetails;
|
|
6
|
+
export declare function useCosmosConnectFn(): () => void;
|
|
7
|
+
export declare function useCosmosDisconnectFn(): () => Promise<void>;
|
|
8
|
+
export declare function useCosmosActiveChain(_multiProvider: MultiProtocolProvider): ActiveChainInfo;
|
|
9
|
+
export declare function useCosmosTransactionFns(multiProvider: MultiProtocolProvider): ChainTransactionFns;
|
|
10
|
+
export declare function getCosmosKitChainConfigs(multiProvider: MultiProtocolProvider): {
|
|
11
|
+
chains: CosmosChain[];
|
|
12
|
+
assets: AssetList[];
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=cosmos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cosmos.d.ts","sourceRoot":"","sources":["../../src/walletIntegrations/cosmos.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAU7E,OAAO,EAGL,qBAAqB,EAKtB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,WAAW,EACX,eAAe,EAEf,mBAAmB,EACnB,aAAa,EACd,MAAM,YAAY,CAAC;AAUpB,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,qBAAqB,GACnC,WAAW,CAwBb;AAED,wBAAgB,sBAAsB,kBAWrC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,IAAI,CAG/C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,CAM3D;AAED,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,qBAAqB,GACpC,eAAe,CAGjB;AAED,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,qBAAqB,GACnC,mBAAmB,CA2ErB;AAkBD,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,qBAAqB,GACnC;IACD,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB,CAOA"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { useChain, useChains } from '@cosmos-kit/react';
|
|
2
|
+
import { useCallback, useMemo } from 'react';
|
|
3
|
+
import { cosmoshub } from '@hyperlane-xyz/registry';
|
|
4
|
+
import { ProviderType, chainMetadataToCosmosChain, } from '@hyperlane-xyz/sdk';
|
|
5
|
+
import { ProtocolType, assert } from '@hyperlane-xyz/utils';
|
|
6
|
+
import { widgetLogger } from '../logger.js';
|
|
7
|
+
import { getChainsForProtocol } from './utils.js';
|
|
8
|
+
// Used because the CosmosKit hooks always require a chain name
|
|
9
|
+
const PLACEHOLDER_COSMOS_CHAIN = cosmoshub.name;
|
|
10
|
+
const logger = widgetLogger.child({
|
|
11
|
+
module: 'widgets/walletIntegrations/cosmos',
|
|
12
|
+
});
|
|
13
|
+
export function useCosmosAccount(multiProvider) {
|
|
14
|
+
const cosmosChains = getCosmosChainNames(multiProvider);
|
|
15
|
+
const chainToContext = useChains(cosmosChains);
|
|
16
|
+
return useMemo(() => {
|
|
17
|
+
const addresses = [];
|
|
18
|
+
let publicKey = undefined;
|
|
19
|
+
let connectorName = undefined;
|
|
20
|
+
let isReady = false;
|
|
21
|
+
for (const [chainName, context] of Object.entries(chainToContext)) {
|
|
22
|
+
if (!context.address)
|
|
23
|
+
continue;
|
|
24
|
+
addresses.push({ address: context.address, chainName });
|
|
25
|
+
publicKey = context
|
|
26
|
+
.getAccount()
|
|
27
|
+
.then((acc) => Buffer.from(acc.pubkey).toString('hex'));
|
|
28
|
+
isReady = true;
|
|
29
|
+
connectorName ||= context.wallet?.prettyName;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
protocol: ProtocolType.Cosmos,
|
|
33
|
+
addresses,
|
|
34
|
+
publicKey,
|
|
35
|
+
isReady,
|
|
36
|
+
};
|
|
37
|
+
}, [chainToContext]);
|
|
38
|
+
}
|
|
39
|
+
export function useCosmosWalletDetails() {
|
|
40
|
+
const { wallet } = useChain(PLACEHOLDER_COSMOS_CHAIN);
|
|
41
|
+
const { logo, prettyName } = wallet || {};
|
|
42
|
+
return useMemo(() => ({
|
|
43
|
+
name: prettyName,
|
|
44
|
+
logoUrl: typeof logo === 'string' ? logo : undefined,
|
|
45
|
+
}), [prettyName, logo]);
|
|
46
|
+
}
|
|
47
|
+
export function useCosmosConnectFn() {
|
|
48
|
+
const { openView } = useChain(PLACEHOLDER_COSMOS_CHAIN);
|
|
49
|
+
return openView;
|
|
50
|
+
}
|
|
51
|
+
export function useCosmosDisconnectFn() {
|
|
52
|
+
const { disconnect, address } = useChain(PLACEHOLDER_COSMOS_CHAIN);
|
|
53
|
+
const safeDisconnect = async () => {
|
|
54
|
+
if (address)
|
|
55
|
+
await disconnect();
|
|
56
|
+
};
|
|
57
|
+
return safeDisconnect;
|
|
58
|
+
}
|
|
59
|
+
export function useCosmosActiveChain(_multiProvider) {
|
|
60
|
+
// Cosmoskit doesn't have the concept of an active chain
|
|
61
|
+
return useMemo(() => ({}), []);
|
|
62
|
+
}
|
|
63
|
+
export function useCosmosTransactionFns(multiProvider) {
|
|
64
|
+
const cosmosChains = getCosmosChainNames(multiProvider);
|
|
65
|
+
const chainToContext = useChains(cosmosChains);
|
|
66
|
+
const onSwitchNetwork = useCallback(async (chainName) => {
|
|
67
|
+
const displayName = multiProvider.getChainMetadata(chainName).displayName || chainName;
|
|
68
|
+
// CosmosKit does not have switch capability
|
|
69
|
+
throw new Error(`Cosmos wallet must be connected to origin chain ${displayName}}`);
|
|
70
|
+
}, [multiProvider]);
|
|
71
|
+
const onSendTx = useCallback(async ({ tx, chainName, activeChainName, }) => {
|
|
72
|
+
const chainContext = chainToContext[chainName];
|
|
73
|
+
if (!chainContext?.address)
|
|
74
|
+
throw new Error(`Cosmos wallet not connected for ${chainName}`);
|
|
75
|
+
if (activeChainName && activeChainName !== chainName)
|
|
76
|
+
await onSwitchNetwork(chainName);
|
|
77
|
+
logger.debug(`Sending tx on chain ${chainName}`);
|
|
78
|
+
const { getSigningCosmWasmClient, getSigningStargateClient } = chainContext;
|
|
79
|
+
let result;
|
|
80
|
+
let txDetails;
|
|
81
|
+
if (tx.type === ProviderType.CosmJsWasm) {
|
|
82
|
+
const client = await getSigningCosmWasmClient();
|
|
83
|
+
result = await client.executeMultiple(chainContext.address, [tx.transaction], 'auto');
|
|
84
|
+
txDetails = await client.getTx(result.transactionHash);
|
|
85
|
+
}
|
|
86
|
+
else if (tx.type === ProviderType.CosmJs) {
|
|
87
|
+
const client = await getSigningStargateClient();
|
|
88
|
+
// The fee param of 'auto' here stopped working for Neutron-based IBC transfers
|
|
89
|
+
// It seems the signAndBroadcast method uses a default fee multiplier of 1.4
|
|
90
|
+
// https://github.com/cosmos/cosmjs/blob/e819a1fc0e99a3e5320d8d6667a08d3b92e5e836/packages/stargate/src/signingstargateclient.ts#L115
|
|
91
|
+
// A multiplier of 1.6 was insufficient for Celestia -> Neutron|Cosmos -> XXX transfers, but 2 worked.
|
|
92
|
+
result = await client.signAndBroadcast(chainContext.address, [tx.transaction], 2);
|
|
93
|
+
txDetails = await client.getTx(result.transactionHash);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
throw new Error(`Invalid cosmos provider type ${tx.type}`);
|
|
97
|
+
}
|
|
98
|
+
const confirm = async () => {
|
|
99
|
+
assert(txDetails, `Cosmos tx failed: ${JSON.stringify(result)}`);
|
|
100
|
+
return {
|
|
101
|
+
type: tx.type,
|
|
102
|
+
receipt: { ...txDetails, transactionHash: result.transactionHash },
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
return { hash: result.transactionHash, confirm };
|
|
106
|
+
}, [onSwitchNetwork, chainToContext]);
|
|
107
|
+
return { sendTransaction: onSendTx, switchNetwork: onSwitchNetwork };
|
|
108
|
+
}
|
|
109
|
+
function getCosmosChains(multiProvider) {
|
|
110
|
+
return [
|
|
111
|
+
...getChainsForProtocol(multiProvider, ProtocolType.Cosmos),
|
|
112
|
+
cosmoshub,
|
|
113
|
+
];
|
|
114
|
+
}
|
|
115
|
+
function getCosmosChainNames(multiProvider) {
|
|
116
|
+
return getCosmosChains(multiProvider).map((c) => c.name);
|
|
117
|
+
}
|
|
118
|
+
// Metadata formatted for use in Wagmi config
|
|
119
|
+
export function getCosmosKitChainConfigs(multiProvider) {
|
|
120
|
+
const chains = getCosmosChains(multiProvider);
|
|
121
|
+
const configList = chains.map(chainMetadataToCosmosChain);
|
|
122
|
+
return {
|
|
123
|
+
chains: configList.map((c) => c.chain),
|
|
124
|
+
assets: configList.map((c) => c.assets),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=cosmos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cosmos.js","sourceRoot":"","sources":["../../src/walletIntegrations/cosmos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Chain as ViemChain } from 'viem';
|
|
2
|
+
import { MultiProtocolProvider } from '@hyperlane-xyz/sdk';
|
|
3
|
+
import { AccountInfo, ActiveChainInfo, ChainTransactionFns, WalletDetails } from './types.js';
|
|
4
|
+
export declare function useEthereumAccount(_multiProvider: MultiProtocolProvider): AccountInfo;
|
|
5
|
+
export declare function useEthereumWalletDetails(): WalletDetails;
|
|
6
|
+
export declare function useEthereumConnectFn(): () => void;
|
|
7
|
+
export declare function useEthereumDisconnectFn(): () => Promise<void>;
|
|
8
|
+
export declare function useEthereumActiveChain(multiProvider: MultiProtocolProvider): ActiveChainInfo;
|
|
9
|
+
export declare function useEthereumTransactionFns(multiProvider: MultiProtocolProvider): ChainTransactionFns;
|
|
10
|
+
export declare function getWagmiChainConfigs(multiProvider: MultiProtocolProvider): ViemChain[];
|
|
11
|
+
//# sourceMappingURL=ethereum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethereum.d.ts","sourceRoot":"","sources":["../../src/walletIntegrations/ethereum.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAG1C,OAAO,EAEL,qBAAqB,EAKtB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EACL,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,aAAa,EACd,MAAM,YAAY,CAAC;AAKpB,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,qBAAqB,GACpC,WAAW,CAYb;AAED,wBAAgB,wBAAwB,kBAYvC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,IAAI,CAGjD;AAED,wBAAgB,uBAAuB,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,CAG7D;AAED,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,qBAAqB,GACnC,eAAe,CAWjB;AAED,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,qBAAqB,GACnC,mBAAmB,CAqErB;AAGD,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,qBAAqB,GACnC,SAAS,EAAE,CAIb"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { useConnectModal } from '@rainbow-me/rainbowkit';
|
|
2
|
+
import { getAccount, sendTransaction, switchChain, waitForTransactionReceipt, } from '@wagmi/core';
|
|
3
|
+
import { useCallback, useMemo } from 'react';
|
|
4
|
+
import { useAccount, useConfig, useDisconnect } from 'wagmi';
|
|
5
|
+
import { ProviderType, chainMetadataToViemChain, } from '@hyperlane-xyz/sdk';
|
|
6
|
+
import { ProtocolType, assert, sleep } from '@hyperlane-xyz/utils';
|
|
7
|
+
import { widgetLogger } from '../logger.js';
|
|
8
|
+
import { ethers5TxToWagmiTx, getChainsForProtocol } from './utils.js';
|
|
9
|
+
const logger = widgetLogger.child({ module: 'walletIntegrations/ethereum' });
|
|
10
|
+
export function useEthereumAccount(_multiProvider) {
|
|
11
|
+
const { address, isConnected, connector } = useAccount();
|
|
12
|
+
const isReady = !!(address && isConnected && connector);
|
|
13
|
+
return useMemo(() => ({
|
|
14
|
+
protocol: ProtocolType.Ethereum,
|
|
15
|
+
addresses: address ? [{ address: `${address}` }] : [],
|
|
16
|
+
isReady: isReady,
|
|
17
|
+
}), [address, isReady]);
|
|
18
|
+
}
|
|
19
|
+
export function useEthereumWalletDetails() {
|
|
20
|
+
const { connector } = useAccount();
|
|
21
|
+
const name = connector?.name;
|
|
22
|
+
const logoUrl = connector?.icon;
|
|
23
|
+
return useMemo(() => ({
|
|
24
|
+
name,
|
|
25
|
+
logoUrl,
|
|
26
|
+
}), [name, logoUrl]);
|
|
27
|
+
}
|
|
28
|
+
export function useEthereumConnectFn() {
|
|
29
|
+
const { openConnectModal } = useConnectModal();
|
|
30
|
+
return useCallback(() => openConnectModal?.(), [openConnectModal]);
|
|
31
|
+
}
|
|
32
|
+
export function useEthereumDisconnectFn() {
|
|
33
|
+
const { disconnectAsync } = useDisconnect();
|
|
34
|
+
return disconnectAsync;
|
|
35
|
+
}
|
|
36
|
+
export function useEthereumActiveChain(multiProvider) {
|
|
37
|
+
const { chain } = useAccount();
|
|
38
|
+
return useMemo(() => ({
|
|
39
|
+
chainDisplayName: chain?.name,
|
|
40
|
+
chainName: chain
|
|
41
|
+
? multiProvider.tryGetChainMetadata(chain.id)?.name
|
|
42
|
+
: undefined,
|
|
43
|
+
}), [chain, multiProvider]);
|
|
44
|
+
}
|
|
45
|
+
export function useEthereumTransactionFns(multiProvider) {
|
|
46
|
+
const config = useConfig();
|
|
47
|
+
const onSwitchNetwork = useCallback(async (chainName) => {
|
|
48
|
+
const chainId = multiProvider.getChainMetadata(chainName)
|
|
49
|
+
.chainId;
|
|
50
|
+
await switchChain(config, { chainId });
|
|
51
|
+
// Some wallets seem to require a brief pause after switch
|
|
52
|
+
await sleep(2000);
|
|
53
|
+
}, [config, multiProvider]);
|
|
54
|
+
// Note, this doesn't use wagmi's prepare + send pattern because we're potentially sending two transactions
|
|
55
|
+
// The prepare hooks are recommended to use pre-click downtime to run async calls, but since the flow
|
|
56
|
+
// may require two serial txs, the prepare hooks aren't useful and complicate hook architecture considerably.
|
|
57
|
+
// See https://github.com/hyperlane-xyz/hyperlane-warp-ui-template/issues/19
|
|
58
|
+
// See https://github.com/wagmi-dev/wagmi/discussions/1564
|
|
59
|
+
const onSendTx = useCallback(async ({ tx, chainName, activeChainName, }) => {
|
|
60
|
+
if (tx.type !== ProviderType.EthersV5)
|
|
61
|
+
throw new Error(`Unsupported tx type: ${tx.type}`);
|
|
62
|
+
// If the active chain is different from tx origin chain, try to switch network first
|
|
63
|
+
if (activeChainName && activeChainName !== chainName)
|
|
64
|
+
await onSwitchNetwork(chainName);
|
|
65
|
+
// Since the network switching is not foolproof, we also force a network check here
|
|
66
|
+
const chainId = multiProvider.getChainMetadata(chainName)
|
|
67
|
+
.chainId;
|
|
68
|
+
logger.debug('Checking wallet current chain');
|
|
69
|
+
const latestNetwork = await getAccount(config);
|
|
70
|
+
assert(latestNetwork?.chain?.id === chainId, `Wallet not on chain ${chainName} (ChainMismatchError)`);
|
|
71
|
+
logger.debug(`Sending tx on chain ${chainName}`);
|
|
72
|
+
const wagmiTx = ethers5TxToWagmiTx(tx.transaction);
|
|
73
|
+
const hash = await sendTransaction(config, {
|
|
74
|
+
chainId,
|
|
75
|
+
...wagmiTx,
|
|
76
|
+
});
|
|
77
|
+
const confirm = () => {
|
|
78
|
+
const foo = waitForTransactionReceipt(config, {
|
|
79
|
+
chainId,
|
|
80
|
+
hash,
|
|
81
|
+
confirmations: 1,
|
|
82
|
+
});
|
|
83
|
+
return foo.then((r) => ({
|
|
84
|
+
type: ProviderType.Viem,
|
|
85
|
+
receipt: { ...r, contractAddress: r.contractAddress || null },
|
|
86
|
+
}));
|
|
87
|
+
};
|
|
88
|
+
return { hash, confirm };
|
|
89
|
+
}, [config, onSwitchNetwork, multiProvider]);
|
|
90
|
+
return { sendTransaction: onSendTx, switchNetwork: onSwitchNetwork };
|
|
91
|
+
}
|
|
92
|
+
// Metadata formatted for use in Wagmi config
|
|
93
|
+
export function getWagmiChainConfigs(multiProvider) {
|
|
94
|
+
return getChainsForProtocol(multiProvider, ProtocolType.Ethereum).map(chainMetadataToViemChain);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=ethereum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethereum.js","sourceRoot":"","sources":["../../src/walletIntegrations/ethereum.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ChainName, MultiProtocolProvider } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import { Address, HexString, ProtocolType } from '@hyperlane-xyz/utils';
|
|
3
|
+
import { AccountInfo, ActiveChainInfo, ChainTransactionFns, WalletDetails } from './types.js';
|
|
4
|
+
export declare function useAccounts(multiProvider: MultiProtocolProvider, blacklistedAddresses?: Address[]): {
|
|
5
|
+
accounts: Record<ProtocolType, AccountInfo>;
|
|
6
|
+
readyAccounts: Array<AccountInfo>;
|
|
7
|
+
};
|
|
8
|
+
export declare function useAccountForChain(multiProvider: MultiProtocolProvider, chainName?: ChainName): AccountInfo | undefined;
|
|
9
|
+
export declare function useAccountAddressForChain(multiProvider: MultiProtocolProvider, chainName?: ChainName): Address | undefined;
|
|
10
|
+
export declare function getAccountAddressForChain(multiProvider: MultiProtocolProvider, chainName?: ChainName, accounts?: Record<ProtocolType, AccountInfo>): Address | undefined;
|
|
11
|
+
export declare function getAccountAddressAndPubKey(multiProvider: MultiProtocolProvider, chainName?: ChainName, accounts?: Record<ProtocolType, AccountInfo>): {
|
|
12
|
+
address?: Address;
|
|
13
|
+
publicKey?: Promise<HexString>;
|
|
14
|
+
};
|
|
15
|
+
export declare function useWalletDetails(): Record<ProtocolType, WalletDetails>;
|
|
16
|
+
export declare function useConnectFns(): Record<ProtocolType, () => void>;
|
|
17
|
+
export declare function useDisconnectFns(): Record<ProtocolType, () => Promise<void>>;
|
|
18
|
+
export declare function useActiveChains(multiProvider: MultiProtocolProvider): {
|
|
19
|
+
chains: Record<ProtocolType, ActiveChainInfo>;
|
|
20
|
+
readyChains: Array<ActiveChainInfo>;
|
|
21
|
+
};
|
|
22
|
+
export declare function useTransactionFns(multiProvider: MultiProtocolProvider): Record<ProtocolType, ChainTransactionFns>;
|
|
23
|
+
//# sourceMappingURL=multiProtocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multiProtocol.d.ts","sourceRoot":"","sources":["../../src/walletIntegrations/multiProtocol.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AA4BxE,OAAO,EACL,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,aAAa,EACd,MAAM,YAAY,CAAC;AAMpB,wBAAgB,WAAW,CACzB,aAAa,EAAE,qBAAqB,EACpC,oBAAoB,GAAE,OAAO,EAAO,GACnC;IACD,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAC5C,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;CACnC,CAkCA;AAED,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,qBAAqB,EACpC,SAAS,CAAC,EAAE,SAAS,GACpB,WAAW,GAAG,SAAS,CAKzB;AAED,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,qBAAqB,EACpC,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,GAAG,SAAS,CAGrB;AAED,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,qBAAqB,EACpC,SAAS,CAAC,EAAE,SAAS,EACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GAC3C,OAAO,GAAG,SAAS,CAUrB;AAED,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,qBAAqB,EACpC,SAAS,CAAC,EAAE,SAAS,EACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GAC3C;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;CAAE,CAMvD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,CAatE;AAED,wBAAgB,aAAa,IAAI,MAAM,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAahE;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAiC5E;AAED,wBAAgB,eAAe,CAAC,aAAa,EAAE,qBAAqB,GAAG;IACrE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAC9C,WAAW,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;CACrC,CAqBA;AAED,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,qBAAqB,GACnC,MAAM,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAgC3C"}
|