@naculus/connect-appkit-react 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/api-extractor.json +21 -0
- package/dist/client.cjs +2 -0
- package/dist/client.cjs.map +1 -0
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +39 -0
- package/src/chain-abstraction/index.ts +8 -0
- package/src/chain-abstraction/useCompareCosts.ts +137 -0
- package/src/chain-abstraction/useExecuteRoute.ts +129 -0
- package/src/chain-abstraction/useRouteQuote.ts +168 -0
- package/src/client.test.ts +242 -0
- package/src/client.ts +265 -0
- package/src/hooks/useAccount.test.ts +67 -0
- package/src/hooks/useAccount.ts +37 -0
- package/src/hooks/useBalance.test.ts +459 -0
- package/src/hooks/useBalance.ts +170 -0
- package/src/hooks/useChain.test.ts +160 -0
- package/src/hooks/useChain.ts +53 -0
- package/src/hooks/useConnect.test.ts +112 -0
- package/src/hooks/useConnect.ts +29 -0
- package/src/hooks/useDisconnect.test.ts +75 -0
- package/src/hooks/useDisconnect.ts +32 -0
- package/src/hooks/useERC20Allowance.ts +93 -0
- package/src/hooks/useERC20Approve.ts +220 -0
- package/src/hooks/useERC20Transfer.ts +134 -0
- package/src/hooks/useERC20TransferSimulation.ts +147 -0
- package/src/hooks/useEmbeddedWallet.test.ts +266 -0
- package/src/hooks/useEmbeddedWallet.ts +181 -0
- package/src/hooks/useLastTx.test.ts +117 -0
- package/src/hooks/useLastTx.ts +73 -0
- package/src/hooks/useLookupAddress.ts +131 -0
- package/src/hooks/useNotification.ts +308 -0
- package/src/hooks/useResolveName.ts +128 -0
- package/src/hooks/useSIWxLogin.test.ts +307 -0
- package/src/hooks/useSIWxLogin.ts +163 -0
- package/src/hooks/useSIWxSession.test.ts +481 -0
- package/src/hooks/useSIWxSession.ts +290 -0
- package/src/hooks/useSendCalls.ts +103 -0
- package/src/hooks/useSendTransaction.test.ts +175 -0
- package/src/hooks/useSendTransaction.ts +80 -0
- package/src/hooks/useSendUserOperation.ts +313 -0
- package/src/hooks/useSession.ts +96 -0
- package/src/hooks/useSessionKeys.ts +356 -0
- package/src/hooks/useSignInWithEthereum.test.ts +224 -0
- package/src/hooks/useSignInWithEthereum.ts +46 -0
- package/src/hooks/useSignInWithX.test.ts +210 -0
- package/src/hooks/useSignInWithX.ts +141 -0
- package/src/hooks/useSignMessage.test.ts +151 -0
- package/src/hooks/useSignMessage.ts +65 -0
- package/src/hooks/useSimulateTransfer.ts +165 -0
- package/src/hooks/useSiwxAuthSession.test.ts +456 -0
- package/src/hooks/useSiwxAuthSession.ts +163 -0
- package/src/hooks/useSmartAccount.ts +194 -0
- package/src/hooks/useSwitchChain.ts +68 -0
- package/src/hooks/useTokenBalance.test.ts +337 -0
- package/src/hooks/useTokenBalance.ts +210 -0
- package/src/hooks/useTransactionSimulation.ts +401 -0
- package/src/hooks/useTxHistory.test.ts +108 -0
- package/src/hooks/useTxHistory.ts +83 -0
- package/src/hooks/useTxMonitor.test.ts +127 -0
- package/src/hooks/useTxMonitor.ts +178 -0
- package/src/hooks/useUserOpStatus.ts +245 -0
- package/src/hooks/useValidateDestination.test.ts +96 -0
- package/src/hooks/useValidateDestination.ts +72 -0
- package/src/hooks/useViemClient.test.ts +155 -0
- package/src/hooks/useViemClient.ts +65 -0
- package/src/hooks/useWallet.test.ts +133 -0
- package/src/hooks/useWallet.ts +39 -0
- package/src/hooks/useWeb3ErrorHandler.ts +102 -0
- package/src/index.ts +186 -0
- package/src/provider/Web3ConnectProvider.test.tsx +178 -0
- package/src/provider/Web3ConnectProvider.tsx +530 -0
- package/src/token-list/TokenSelector.tsx +351 -0
- package/src/token-list/defaults.ts +39 -0
- package/src/token-list/index.ts +14 -0
- package/src/token-list/useTokenList.ts +119 -0
- package/src/token-list/useTokenSearch.ts +99 -0
- package/src/types/index.ts +99 -0
- package/src/utils/chains.ts +115 -0
- package/src/utils/errorMessages.ts +142 -0
- package/src/utils/i18n.ts +90 -0
- package/src/wc-generated/components.ts +377 -0
- package/test/setup.ts +17 -0
- package/test/test-utils.tsx +78 -0
- package/tsup.config.ts +18 -0
package/src/index.ts
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
export { Web3ConnectProvider, useWeb3 } from "./provider/Web3ConnectProvider";
|
|
2
|
+
export type { Web3ConnectProviderProps } from "./provider/Web3ConnectProvider";
|
|
3
|
+
|
|
4
|
+
export { useWallet } from "./hooks/useWallet";
|
|
5
|
+
export { useConnect } from "./hooks/useConnect";
|
|
6
|
+
export { useDisconnect } from "./hooks/useDisconnect";
|
|
7
|
+
export { useAccount } from "./hooks/useAccount";
|
|
8
|
+
export { useChain } from "./hooks/useChain";
|
|
9
|
+
export { useSignMessage } from "./hooks/useSignMessage";
|
|
10
|
+
export { useSendTransaction } from "./hooks/useSendTransaction";
|
|
11
|
+
export { useSendCalls } from "./hooks/useSendCalls";
|
|
12
|
+
export type { SendCallsStatus } from "./hooks/useSendCalls";
|
|
13
|
+
export { useBalance } from "./hooks/useBalance";
|
|
14
|
+
export { useTokenBalance } from "./hooks/useTokenBalance";
|
|
15
|
+
export type { TokenInfo, UseTokenBalanceOptions, TokenBalanceResult } from "./hooks/useTokenBalance";
|
|
16
|
+
export { useERC20Transfer } from "./hooks/useERC20Transfer";
|
|
17
|
+
export type { UseERC20TransferOptions, UseERC20TransferReturn } from "./hooks/useERC20Transfer";
|
|
18
|
+
export { useERC20Approve } from "./hooks/useERC20Approve";
|
|
19
|
+
export type { UseERC20ApproveOptions, UseERC20ApproveReturn } from "./hooks/useERC20Approve";
|
|
20
|
+
export { useERC20Allowance } from "./hooks/useERC20Allowance";
|
|
21
|
+
export type { UseERC20AllowanceOptions, UseERC20AllowanceReturn } from "./hooks/useERC20Allowance";
|
|
22
|
+
export { useViemClient } from "./hooks/useViemClient";
|
|
23
|
+
export { useEmbeddedWallet } from "./hooks/useEmbeddedWallet";
|
|
24
|
+
export type { UseEmbeddedWalletReturn } from "./hooks/useEmbeddedWallet";
|
|
25
|
+
export { useValidateDestination, validateDestination } from "./hooks/useValidateDestination";
|
|
26
|
+
export type { UseValidateDestinationOptions, UseValidateDestinationReturn, AddressValidationLevel, AddressValidationResult } from "./hooks/useValidateDestination";
|
|
27
|
+
export { t, setLocale, getLocale } from "./utils/i18n";
|
|
28
|
+
export type { Locale } from "./utils/i18n";
|
|
29
|
+
export { useSignInWithX } from "./hooks/useSignInWithX";
|
|
30
|
+
export type { UseSignInWithXOptions, UseSignInWithXReturn } from "./hooks/useSignInWithX";
|
|
31
|
+
export { useSignInWithEthereum } from "./hooks/useSignInWithEthereum";
|
|
32
|
+
export type { UseSignInWithEthereumOptions, UseSignInWithEthereumReturn } from "./hooks/useSignInWithEthereum";
|
|
33
|
+
export { useSiwxAuthSession } from "./hooks/useSiwxAuthSession";
|
|
34
|
+
export type { UseSiwxAuthSessionOptions, UseSiwxAuthSessionReturn } from "./hooks/useSiwxAuthSession";
|
|
35
|
+
export { useSIWxLogin } from "./hooks/useSIWxLogin";
|
|
36
|
+
export type { UseSIWxLoginOptions, UseSIWxLoginReturn } from "./hooks/useSIWxLogin";
|
|
37
|
+
export { useSIWxSession } from "./hooks/useSIWxSession";
|
|
38
|
+
export type { UseSIWxSessionOptions, UseSIWxSessionReturn } from "./hooks/useSIWxSession";
|
|
39
|
+
export { useSessionKeys, useCreateSessionKey, useRevokeSession, useSendWithSession, resetSessionKeyManager } from "./hooks/useSessionKeys";
|
|
40
|
+
export type { UseSessionKeysReturn, UseCreateSessionKeyReturn, UseRevokeSessionReturn, UseSendWithSessionReturn } from "./hooks/useSessionKeys";
|
|
41
|
+
export { useResolveName } from "./hooks/useResolveName";
|
|
42
|
+
export type { UseResolveNameOptions, UseResolveNameResult } from "./hooks/useResolveName";
|
|
43
|
+
export { useLookupAddress } from "./hooks/useLookupAddress";
|
|
44
|
+
export type { UseLookupAddressOptions, UseLookupAddressResult } from "./hooks/useLookupAddress";
|
|
45
|
+
export { useSession } from "./hooks/useSession";
|
|
46
|
+
export type { UseSessionReturn } from "./hooks/useSession";
|
|
47
|
+
export { useSwitchChain } from "./hooks/useSwitchChain";
|
|
48
|
+
export type { UseSwitchChainReturn } from "./hooks/useSwitchChain";
|
|
49
|
+
export { createClient, getClient, clearClient } from "./client";
|
|
50
|
+
export type { ClientConfig, Web3Client } from "./client";
|
|
51
|
+
export { DEFAULT_EVM_CHAINS, getDefaultChains, getChainById } from "./utils/chains";
|
|
52
|
+
export type {
|
|
53
|
+
WalletChain,
|
|
54
|
+
ConnectionStatus,
|
|
55
|
+
Web3ConnectConfig,
|
|
56
|
+
Web3State,
|
|
57
|
+
Web3Actions,
|
|
58
|
+
UseWalletReturn,
|
|
59
|
+
EvmTransaction,
|
|
60
|
+
ChainInfo,
|
|
61
|
+
SIWxConfig,
|
|
62
|
+
} from "./types";
|
|
63
|
+
export { Web3Context } from "./provider/Web3ConnectProvider";
|
|
64
|
+
export { useWeb3ErrorHandler } from "./hooks/useWeb3ErrorHandler";
|
|
65
|
+
export { useTxMonitor, TxMonitorContext } from "./hooks/useTxMonitor";
|
|
66
|
+
export type { UseTxMonitorResult, TxMonitorLike, TxStatus, TxStatusEntry } from "./hooks/useTxMonitor";
|
|
67
|
+
export { useTxHistory } from "./hooks/useTxHistory";
|
|
68
|
+
export type { UseTxHistoryResult } from "./hooks/useTxHistory";
|
|
69
|
+
export { useTransactionSimulation } from "./hooks/useTransactionSimulation";
|
|
70
|
+
export type {
|
|
71
|
+
UseTransactionSimulationReturn,
|
|
72
|
+
SimulationResult,
|
|
73
|
+
SimulationStatus,
|
|
74
|
+
RiskLevel,
|
|
75
|
+
BalanceChange,
|
|
76
|
+
ApprovalChange,
|
|
77
|
+
RiskAssessment,
|
|
78
|
+
RiskWarning,
|
|
79
|
+
GasInfo,
|
|
80
|
+
} from "./hooks/useTransactionSimulation";
|
|
81
|
+
export { useERC20TransferSimulation } from "./hooks/useERC20TransferSimulation";
|
|
82
|
+
export type { UseERC20TransferSimulationOptions, UseERC20TransferSimulationReturn } from "./hooks/useERC20TransferSimulation";
|
|
83
|
+
export { useLastTx } from "./hooks/useLastTx";
|
|
84
|
+
export type { UseLastTxResult } from "./hooks/useLastTx";
|
|
85
|
+
export type { UseWeb3ErrorHandlerReturn, UserFriendlyError } from "./hooks/useWeb3ErrorHandler";
|
|
86
|
+
export {
|
|
87
|
+
getUserFriendlyError,
|
|
88
|
+
isRetryableError,
|
|
89
|
+
WALLET_ERROR_TITLES,
|
|
90
|
+
WALLET_ERROR_DESCRIPTIONS,
|
|
91
|
+
} from "./utils/errorMessages";
|
|
92
|
+
export { useSmartAccount } from "./hooks/useSmartAccount";
|
|
93
|
+
export type { UseSmartAccountOptions, UseSmartAccountReturn } from "./hooks/useSmartAccount";
|
|
94
|
+
export { useSendUserOperation } from "./hooks/useSendUserOperation";
|
|
95
|
+
export type { UseSendUserOperationOptions, UseSendUserOperationReturn } from "./hooks/useSendUserOperation";
|
|
96
|
+
export { useUserOpStatus } from "./hooks/useUserOpStatus";
|
|
97
|
+
export type { UseUserOpStatusOptions, UseUserOpStatusReturn, UserOpStatus } from "./hooks/useUserOpStatus";
|
|
98
|
+
export { useTokenList, useTokenSearch, TokenSelector } from "./token-list";
|
|
99
|
+
export type { UseTokenListOptions, UseTokenListReturn } from "./token-list";
|
|
100
|
+
export type { UseTokenSearchReturn } from "./token-list";
|
|
101
|
+
export type { TokenSelectorProps } from "./token-list";
|
|
102
|
+
export { useNotification } from "./hooks/useNotification";
|
|
103
|
+
export { useSimulateTransfer } from "./hooks/useSimulateTransfer";
|
|
104
|
+
export type {
|
|
105
|
+
UseSimulateTransferOptions,
|
|
106
|
+
UseSimulateTransferReturn,
|
|
107
|
+
} from "./hooks/useSimulateTransfer";
|
|
108
|
+
export { useRouteQuote, useExecuteRoute, useCompareCosts } from "./chain-abstraction";
|
|
109
|
+
export type {
|
|
110
|
+
UseRouteQuoteInput,
|
|
111
|
+
UseRouteQuoteReturn,
|
|
112
|
+
Quote,
|
|
113
|
+
QuoteOptions,
|
|
114
|
+
UseExecuteRouteReturn,
|
|
115
|
+
ExecuteError,
|
|
116
|
+
ExecuteRouteResult,
|
|
117
|
+
ExecuteOptions,
|
|
118
|
+
UseCompareCostsInput,
|
|
119
|
+
UseCompareCostsReturn,
|
|
120
|
+
CostComparison,
|
|
121
|
+
CostComparisonOperation,
|
|
122
|
+
CostComparisonOptions,
|
|
123
|
+
} from "./chain-abstraction";
|
|
124
|
+
|
|
125
|
+
// ── Stencil WC React wrappers ───────────────────────────────────
|
|
126
|
+
|
|
127
|
+
export {
|
|
128
|
+
AppkitAccordion,
|
|
129
|
+
AppkitAccountButton,
|
|
130
|
+
AppkitAlertDialog,
|
|
131
|
+
AppkitAvatar,
|
|
132
|
+
AppkitBadge,
|
|
133
|
+
AppkitButton,
|
|
134
|
+
AppkitCard,
|
|
135
|
+
AppkitCardContent,
|
|
136
|
+
AppkitCardDescription,
|
|
137
|
+
AppkitCardFooter,
|
|
138
|
+
AppkitCardHeader,
|
|
139
|
+
AppkitCardTitle,
|
|
140
|
+
AppkitCheckbox,
|
|
141
|
+
AppkitCollapsible,
|
|
142
|
+
AppkitConnectButton,
|
|
143
|
+
AppkitDialog,
|
|
144
|
+
AppkitDropdownMenu,
|
|
145
|
+
AppkitInput,
|
|
146
|
+
AppkitPopover,
|
|
147
|
+
AppkitProgress,
|
|
148
|
+
AppkitScrollArea,
|
|
149
|
+
AppkitSelect,
|
|
150
|
+
AppkitSeparator,
|
|
151
|
+
AppkitSkeleton,
|
|
152
|
+
AppkitSwitch,
|
|
153
|
+
AppkitTabs,
|
|
154
|
+
AppkitToggleGroup,
|
|
155
|
+
AppkitTooltip,
|
|
156
|
+
} from "./wc-generated/components"
|
|
157
|
+
export type {
|
|
158
|
+
AppkitAccordionEvents,
|
|
159
|
+
AppkitAccountButtonEvents,
|
|
160
|
+
AppkitAlertDialogEvents,
|
|
161
|
+
AppkitAvatarEvents,
|
|
162
|
+
AppkitBadgeEvents,
|
|
163
|
+
AppkitButtonEvents,
|
|
164
|
+
AppkitCardEvents,
|
|
165
|
+
AppkitCardContentEvents,
|
|
166
|
+
AppkitCardDescriptionEvents,
|
|
167
|
+
AppkitCardFooterEvents,
|
|
168
|
+
AppkitCardHeaderEvents,
|
|
169
|
+
AppkitCardTitleEvents,
|
|
170
|
+
AppkitCheckboxEvents,
|
|
171
|
+
AppkitCollapsibleEvents,
|
|
172
|
+
AppkitConnectButtonEvents,
|
|
173
|
+
AppkitDialogEvents,
|
|
174
|
+
AppkitDropdownMenuEvents,
|
|
175
|
+
AppkitInputEvents,
|
|
176
|
+
AppkitPopoverEvents,
|
|
177
|
+
AppkitProgressEvents,
|
|
178
|
+
AppkitScrollAreaEvents,
|
|
179
|
+
AppkitSelectEvents,
|
|
180
|
+
AppkitSeparatorEvents,
|
|
181
|
+
AppkitSkeletonEvents,
|
|
182
|
+
AppkitSwitchEvents,
|
|
183
|
+
AppkitTabsEvents,
|
|
184
|
+
AppkitToggleGroupEvents,
|
|
185
|
+
AppkitTooltipEvents,
|
|
186
|
+
} from "./wc-generated/components"
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/// @vitest-environment jsdom
|
|
2
|
+
|
|
3
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
4
|
+
import { renderHook, act } from "@testing-library/react";
|
|
5
|
+
import React from "react";
|
|
6
|
+
|
|
7
|
+
// ── Hoisted mocks ──────────────────────────────────────────────────
|
|
8
|
+
|
|
9
|
+
const { mockClient } = vi.hoisted(() => ({
|
|
10
|
+
mockClient: {
|
|
11
|
+
connect: vi.fn(),
|
|
12
|
+
connectEmbedded: vi.fn(),
|
|
13
|
+
connectPasskeys: vi.fn(),
|
|
14
|
+
completePairing: vi.fn(),
|
|
15
|
+
signMessage: vi.fn(),
|
|
16
|
+
startPairing: vi.fn(),
|
|
17
|
+
connector: { onSessionExpiry: vi.fn() },
|
|
18
|
+
solanaConnector: null,
|
|
19
|
+
disconnect: vi.fn(),
|
|
20
|
+
reconnect: vi.fn(),
|
|
21
|
+
connectInjected: vi.fn(),
|
|
22
|
+
},
|
|
23
|
+
}));
|
|
24
|
+
|
|
25
|
+
vi.mock("../client", () => ({
|
|
26
|
+
createClient: vi.fn(() => mockClient),
|
|
27
|
+
}));
|
|
28
|
+
|
|
29
|
+
vi.mock("@naculus/connector-evm-injected", () => ({
|
|
30
|
+
eip6963Connector: { startDiscovery: vi.fn(), switchChain: vi.fn() },
|
|
31
|
+
}));
|
|
32
|
+
|
|
33
|
+
const { MockStorage } = vi.hoisted(() => {
|
|
34
|
+
return {
|
|
35
|
+
MockStorage: class {
|
|
36
|
+
save = vi.fn();
|
|
37
|
+
load = vi.fn();
|
|
38
|
+
clear = vi.fn();
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
vi.mock("@naculus/connect-core", () => ({
|
|
44
|
+
LocalStorageSessionStorage: MockStorage,
|
|
45
|
+
createConnectorManager: vi.fn(() => ({ register: vi.fn() })),
|
|
46
|
+
createSessionManager: vi.fn(() => ({
|
|
47
|
+
on: vi.fn(),
|
|
48
|
+
off: vi.fn(),
|
|
49
|
+
connect: vi.fn(),
|
|
50
|
+
disconnect: vi.fn(),
|
|
51
|
+
restoreFromPersistence: vi.fn(),
|
|
52
|
+
switchChain: vi.fn(),
|
|
53
|
+
})),
|
|
54
|
+
SessionManager: class {},
|
|
55
|
+
ConnectorManager: class {},
|
|
56
|
+
WalletError: class WalletError extends Error {
|
|
57
|
+
code: string;
|
|
58
|
+
constructor(code: string, message?: string) {
|
|
59
|
+
super(message ?? code);
|
|
60
|
+
this.name = "WalletError";
|
|
61
|
+
this.code = code;
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
logger: { warn: vi.fn(), error: vi.fn(), info: vi.fn() },
|
|
65
|
+
}));
|
|
66
|
+
|
|
67
|
+
vi.mock("../utils/chains", () => ({
|
|
68
|
+
getDefaultChains: vi.fn(() => []),
|
|
69
|
+
}));
|
|
70
|
+
|
|
71
|
+
import { Web3ConnectProvider, useWeb3 } from "./Web3ConnectProvider";
|
|
72
|
+
|
|
73
|
+
// ── Fixtures ───────────────────────────────────────────────────────
|
|
74
|
+
|
|
75
|
+
const mockSession = {
|
|
76
|
+
id: "test-session",
|
|
77
|
+
walletType: "eip155",
|
|
78
|
+
namespaces: {
|
|
79
|
+
"eip155": {
|
|
80
|
+
chains: ["eip155:1"],
|
|
81
|
+
accounts: ["eip155:1:0x1234567890abcdef"],
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const siwxConfig = {
|
|
87
|
+
createMessage: vi.fn().mockResolvedValue("Sign this message"),
|
|
88
|
+
handleSignComplete: vi.fn().mockResolvedValue(undefined),
|
|
89
|
+
required: true,
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const baseConfig = {
|
|
93
|
+
projectId: "test-project-id",
|
|
94
|
+
metadata: {
|
|
95
|
+
name: "Test",
|
|
96
|
+
description: "Test",
|
|
97
|
+
url: "https://test.com",
|
|
98
|
+
icons: ["https://test.com/icon.png"],
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
function renderWithProvider(config: Record<string, unknown> = {}) {
|
|
103
|
+
const wrapper = ({ children }: { children: React.ReactNode }) => (
|
|
104
|
+
<Web3ConnectProvider config={{ ...baseConfig, ...config } as any} autoConnect={false}>
|
|
105
|
+
{children}
|
|
106
|
+
</Web3ConnectProvider>
|
|
107
|
+
);
|
|
108
|
+
return renderHook(() => useWeb3(), { wrapper });
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
describe("Web3ConnectProvider — SIWx", () => {
|
|
112
|
+
beforeEach(() => {
|
|
113
|
+
vi.clearAllMocks();
|
|
114
|
+
mockClient.connect.mockReset().mockResolvedValue(mockSession);
|
|
115
|
+
mockClient.completePairing.mockReset().mockResolvedValue(mockSession);
|
|
116
|
+
mockClient.signMessage.mockReset().mockResolvedValue("0xsignature");
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it("runSiwx is called after successful connection when config.siwx is set", async () => {
|
|
120
|
+
const { result } = renderWithProvider({ siwx: siwxConfig });
|
|
121
|
+
|
|
122
|
+
await act(async () => {
|
|
123
|
+
await result.current.connect();
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
expect(siwxConfig.createMessage).toHaveBeenCalledWith({
|
|
127
|
+
address: "0x1234567890abcdef",
|
|
128
|
+
chainId: "eip155:1",
|
|
129
|
+
});
|
|
130
|
+
expect(mockClient.signMessage).toHaveBeenCalled();
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it("status becomes connected when SIWx succeeds", async () => {
|
|
134
|
+
const { result } = renderWithProvider({ siwx: siwxConfig });
|
|
135
|
+
|
|
136
|
+
await act(async () => {
|
|
137
|
+
await result.current.connect();
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
expect(result.current.status).toBe("connected");
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it("status stays disconnected when SIWx is required and fails", async () => {
|
|
144
|
+
mockClient.signMessage.mockRejectedValue(new Error("SIWx failed"));
|
|
145
|
+
const { result } = renderWithProvider({ siwx: siwxConfig });
|
|
146
|
+
|
|
147
|
+
await act(async () => {
|
|
148
|
+
await result.current.connect();
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
expect(result.current.status).toBe("disconnected");
|
|
152
|
+
expect(result.current.session).toBeNull();
|
|
153
|
+
expect(result.current.error).toBeTruthy();
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
it("status becomes connected normally when siwx is not configured", async () => {
|
|
157
|
+
const { result } = renderWithProvider();
|
|
158
|
+
|
|
159
|
+
await act(async () => {
|
|
160
|
+
await result.current.connect();
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
expect(result.current.status).toBe("connected");
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it("completePairing returns the session even when SIWx fails", async () => {
|
|
167
|
+
mockClient.signMessage.mockRejectedValue(new Error("SIWx failed"));
|
|
168
|
+
const { result } = renderWithProvider({ siwx: siwxConfig });
|
|
169
|
+
|
|
170
|
+
let session: unknown;
|
|
171
|
+
await act(async () => {
|
|
172
|
+
session = await result.current.completePairing();
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
expect(session).toBe(mockSession);
|
|
176
|
+
expect(result.current.status).toBe("disconnected");
|
|
177
|
+
});
|
|
178
|
+
});
|