signer-test-sdk-react 0.0.22 → 0.0.23
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/src/AbstraxnProvider.d.ts +5 -13
- package/dist/src/AbstraxnProvider.js +14 -3126
- package/dist/src/AbstraxnProvider.js.map +1 -1
- package/dist/src/ConnectButton.css +1 -1
- package/dist/src/ExternalWalletButtons.css +1 -1
- package/dist/src/ExternalWalletButtons.js +2 -2
- package/dist/src/ExternalWalletButtons.js.map +1 -1
- package/dist/src/WalletModal.css +193 -373
- package/dist/src/WalletModal.d.ts +1 -1
- package/dist/src/WalletModal.js +108 -45
- package/dist/src/WalletModal.js.map +1 -1
- package/dist/src/chains.d.ts +4 -3
- package/dist/src/chains.js +154 -84
- package/dist/src/chains.js.map +1 -1
- package/dist/src/components/AbstraxnProvider/AbstraxnProvider.d.ts +12 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProvider.js +146 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProvider.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderInner.d.ts +25 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderInner.js +3086 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderInner.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithWagmi.d.ts +8 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithWagmi.js +46 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithWagmi.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithoutWagmi.d.ts +8 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithoutWagmi.js +12 -0
- package/dist/src/components/AbstraxnProvider/AbstraxnProviderWithoutWagmi.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/context.d.ts +2 -0
- package/dist/src/components/AbstraxnProvider/context.js +6 -0
- package/dist/src/components/AbstraxnProvider/context.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/index.d.ts +6 -0
- package/dist/src/components/AbstraxnProvider/index.js +7 -0
- package/dist/src/components/AbstraxnProvider/index.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/useAbstraxnProviderBase.d.ts +30 -0
- package/dist/src/components/AbstraxnProvider/useAbstraxnProviderBase.js +49 -0
- package/dist/src/components/AbstraxnProvider/useAbstraxnProviderBase.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/useAbstraxnWallet.d.ts +2 -0
- package/dist/src/components/AbstraxnProvider/useAbstraxnWallet.js +13 -0
- package/dist/src/components/AbstraxnProvider/useAbstraxnWallet.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/useOAuthCallbacks.d.ts +22 -0
- package/dist/src/components/AbstraxnProvider/useOAuthCallbacks.js +242 -0
- package/dist/src/components/AbstraxnProvider/useOAuthCallbacks.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/useWalletInitialization.d.ts +25 -0
- package/dist/src/components/AbstraxnProvider/useWalletInitialization.js +539 -0
- package/dist/src/components/AbstraxnProvider/useWalletInitialization.js.map +1 -0
- package/dist/src/components/AbstraxnProvider/utils.d.ts +41 -0
- package/dist/src/components/AbstraxnProvider/utils.js +139 -0
- package/dist/src/components/AbstraxnProvider/utils.js.map +1 -0
- package/dist/src/components/OnboardingUI/OnboardingUI.css +8 -5
- package/dist/src/components/OnboardingUI/OnboardingUIWeb.js +6 -0
- package/dist/src/components/OnboardingUI/OnboardingUIWeb.js.map +1 -1
- package/dist/src/components/WalletModal/components/ChainSelector.css +249 -102
- package/dist/src/components/WalletModal/components/ChainSelector.d.ts +7 -6
- package/dist/src/components/WalletModal/components/ChainSelector.js +68 -27
- package/dist/src/components/WalletModal/components/ChainSelector.js.map +1 -1
- package/dist/src/components/WalletModal/components/ExportKeyModal.css +89 -88
- package/dist/src/components/WalletModal/components/ExportKeyModal.d.ts +6 -1
- package/dist/src/components/WalletModal/components/ExportKeyModal.js +6 -11
- package/dist/src/components/WalletModal/components/ExportKeyModal.js.map +1 -1
- package/dist/src/components/WalletModal/components/ExportWarningModal.css +107 -2
- package/dist/src/components/WalletModal/components/ExportWarningModal.d.ts +7 -1
- package/dist/src/components/WalletModal/components/ExportWarningModal.js +5 -3
- package/dist/src/components/WalletModal/components/ExportWarningModal.js.map +1 -1
- package/dist/src/components/WalletModal/components/ManageWalletModal.css +90 -4
- package/dist/src/components/WalletModal/components/ManageWalletModal.d.ts +3 -3
- package/dist/src/components/WalletModal/components/ManageWalletModal.js +28 -13
- package/dist/src/components/WalletModal/components/ManageWalletModal.js.map +1 -1
- package/dist/src/components/WalletModal/components/PreviewTransactionModal.css +3 -4
- package/dist/src/components/WalletModal/components/ReceiveModal.css +93 -58
- package/dist/src/components/WalletModal/components/ReceiveModal.js +1 -1
- package/dist/src/components/WalletModal/components/ReceiveModal.js.map +1 -1
- package/dist/src/components/WalletModal/components/SendModal.css +170 -127
- package/dist/src/components/WalletModal/components/SendModal.d.ts +4 -6
- package/dist/src/components/WalletModal/components/SendModal.js +131 -39
- package/dist/src/components/WalletModal/components/SendModal.js.map +1 -1
- package/dist/src/components/WalletModal/components/SuccessModal.css +7 -8
- package/dist/src/components/WalletModal/components/TokenSelectorModal.css +240 -0
- package/dist/src/components/WalletModal/components/TokenSelectorModal.d.ts +21 -0
- package/dist/src/components/WalletModal/components/TokenSelectorModal.js +44 -0
- package/dist/src/components/WalletModal/components/TokenSelectorModal.js.map +1 -0
- package/dist/src/components/WalletModal/components/index.d.ts +2 -0
- package/dist/src/components/WalletModal/components/index.js +1 -0
- package/dist/src/components/WalletModal/components/index.js.map +1 -1
- package/dist/src/hooks.d.ts +301 -329
- package/dist/src/hooks.js +152 -123
- package/dist/src/hooks.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/wagmiConfig.d.ts +1 -1
- package/dist/src/wagmiConfig.js +33 -20
- package/dist/src/wagmiConfig.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet initialization hook
|
|
3
|
+
* Handles wallet instance creation, event listeners, and OnboardingUI setup
|
|
4
|
+
*/
|
|
5
|
+
import { useEffect } from "react";
|
|
6
|
+
import { AbstraxnWallet } from "signer-test-sdk-core";
|
|
7
|
+
import { OnboardingUIWeb } from "../OnboardingUI";
|
|
8
|
+
import { EVM_CHAINS, toCoreChain } from "../../chains";
|
|
9
|
+
import { hasAuthParams } from "./utils";
|
|
10
|
+
export function useWalletInitialization({ config, walletRef, onboardingRef, otpIdRef, externalWalletsEnabled, setIsConnected, setAddress, setUser, setWhoami, setChainId, setError, setConnectionType, init, }) {
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
// If wallet already exists (from previous mount), reuse it to prevent flicker
|
|
13
|
+
if (walletRef.current) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
// Compute supported chains from chain config (outside useMemo since we're in useEffect)
|
|
17
|
+
// This should include ALL chains that might be shown in the UI (availableChains)
|
|
18
|
+
// We use the same logic as availableChains to ensure consistency
|
|
19
|
+
let computedSupportedChains = undefined;
|
|
20
|
+
if (config.supportedChains) {
|
|
21
|
+
// Use explicitly provided chains
|
|
22
|
+
computedSupportedChains = config.supportedChains;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// Compute from chains config - use same logic as availableChains
|
|
26
|
+
const chainConfig = config.chains;
|
|
27
|
+
const chains = [];
|
|
28
|
+
// Priority 1: Check if chains is an array of viem chain objects (direct format)
|
|
29
|
+
if (Array.isArray(chainConfig) && chainConfig?.length > 0) {
|
|
30
|
+
const firstItem = chainConfig[0];
|
|
31
|
+
if (firstItem &&
|
|
32
|
+
typeof firstItem.id === "number" &&
|
|
33
|
+
firstItem.nativeCurrency) {
|
|
34
|
+
// Convert viem chain objects to core chain format
|
|
35
|
+
chainConfig.forEach((viemChain) => {
|
|
36
|
+
let rpcUrl = "";
|
|
37
|
+
if (viemChain.rpcUrls?.default?.http) {
|
|
38
|
+
rpcUrl = Array.isArray(viemChain.rpcUrls.default.http)
|
|
39
|
+
? viemChain.rpcUrls.default.http[0]
|
|
40
|
+
: viemChain.rpcUrls.default.http;
|
|
41
|
+
}
|
|
42
|
+
else if (viemChain.rpcUrls?.public?.http) {
|
|
43
|
+
rpcUrl = Array.isArray(viemChain.rpcUrls.public.http)
|
|
44
|
+
? viemChain.rpcUrls.public.http[0]
|
|
45
|
+
: viemChain.rpcUrls.public.http;
|
|
46
|
+
}
|
|
47
|
+
chains.push({
|
|
48
|
+
id: viemChain.id,
|
|
49
|
+
name: viemChain.name,
|
|
50
|
+
rpcUrl: rpcUrl ||
|
|
51
|
+
`https://rpc.ankr.com/${viemChain.name.toLowerCase()}`,
|
|
52
|
+
nativeCurrency: viemChain.nativeCurrency,
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Priority 2: Check new chains config format
|
|
58
|
+
else if (chainConfig?.supportedEvmChains &&
|
|
59
|
+
chainConfig.supportedEvmChains.length > 0) {
|
|
60
|
+
chainConfig.supportedEvmChains.forEach((chainName) => {
|
|
61
|
+
const chainData = EVM_CHAINS[chainName];
|
|
62
|
+
if (chainData && chainData.type === "evm") {
|
|
63
|
+
chains.push(toCoreChain(chainData));
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
// Priority 3: If no specific config, include default chains that might be shown
|
|
68
|
+
// This ensures Base and other common chains are available even if not explicitly configured
|
|
69
|
+
if (chains.length === 0) {
|
|
70
|
+
// Include common chains that are likely to be in availableChains
|
|
71
|
+
chains.push(toCoreChain(EVM_CHAINS.ethereum));
|
|
72
|
+
chains.push(toCoreChain(EVM_CHAINS.polygon));
|
|
73
|
+
chains.push(toCoreChain(EVM_CHAINS.base));
|
|
74
|
+
}
|
|
75
|
+
computedSupportedChains =
|
|
76
|
+
chains.length > 0
|
|
77
|
+
? chains
|
|
78
|
+
: [
|
|
79
|
+
toCoreChain(EVM_CHAINS.ethereum),
|
|
80
|
+
toCoreChain(EVM_CHAINS.polygon),
|
|
81
|
+
toCoreChain(EVM_CHAINS.base),
|
|
82
|
+
];
|
|
83
|
+
}
|
|
84
|
+
const walletInstance = new AbstraxnWallet({
|
|
85
|
+
apiKey: config.apiKey,
|
|
86
|
+
authMethods: config.authMethods,
|
|
87
|
+
googleClientId: config.googleClientId,
|
|
88
|
+
defaultChainId: config.chains?.defaultChainId || config.defaultChainId,
|
|
89
|
+
supportedChains: computedSupportedChains,
|
|
90
|
+
autoConnect: config.autoConnect ?? false,
|
|
91
|
+
enableLogging: config.enableLogging ?? false,
|
|
92
|
+
});
|
|
93
|
+
walletRef.current = walletInstance;
|
|
94
|
+
// Set up event listeners
|
|
95
|
+
walletInstance.on("connect", async () => {
|
|
96
|
+
try {
|
|
97
|
+
// Verify whoami exists before setting connected
|
|
98
|
+
const whoamiInfo = await walletInstance.getWhoami();
|
|
99
|
+
if (!whoamiInfo) {
|
|
100
|
+
// If whoami is not available, don't set connected
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
setIsConnected(true);
|
|
104
|
+
const userInfo = await walletInstance.getUserInfo();
|
|
105
|
+
setUser(userInfo);
|
|
106
|
+
setWhoami(whoamiInfo);
|
|
107
|
+
// Try to get address, but don't fail if not available yet
|
|
108
|
+
try {
|
|
109
|
+
const addr = await walletInstance.getAddress();
|
|
110
|
+
setAddress(addr);
|
|
111
|
+
}
|
|
112
|
+
catch (addrErr) {
|
|
113
|
+
console.warn("Address not available on connect:", addrErr);
|
|
114
|
+
}
|
|
115
|
+
const cid = await walletInstance.getChainId();
|
|
116
|
+
setChainId(cid);
|
|
117
|
+
// Always restore connection type from localStorage on connect
|
|
118
|
+
// This ensures connectionType is available after OAuth redirects (Google, X, Discord)
|
|
119
|
+
// and after page refreshes
|
|
120
|
+
try {
|
|
121
|
+
const storedType = localStorage.getItem("abstraxn_connection_type");
|
|
122
|
+
if (storedType &&
|
|
123
|
+
(storedType === "google" ||
|
|
124
|
+
storedType === "email" ||
|
|
125
|
+
storedType === "discord" ||
|
|
126
|
+
storedType === "x" ||
|
|
127
|
+
storedType === "passkey")) {
|
|
128
|
+
setConnectionType(storedType);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
// Ignore localStorage errors
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
console.error("Error getting wallet info on connect:", err);
|
|
137
|
+
}
|
|
138
|
+
// Ensure loading modal is closed when connected (whoami received)
|
|
139
|
+
if (onboardingRef.current) {
|
|
140
|
+
const onboardingAny = onboardingRef.current;
|
|
141
|
+
if (onboardingAny.hideLoadingModal) {
|
|
142
|
+
onboardingAny.hideLoadingModal();
|
|
143
|
+
}
|
|
144
|
+
// Also ensure the overlay is hidden if it was opened
|
|
145
|
+
if (onboardingAny.modalOverlay &&
|
|
146
|
+
onboardingAny.modalOverlay.classList.contains("onboarding-modal-open")) {
|
|
147
|
+
onboardingAny.modalOverlay.classList.remove("onboarding-modal-open");
|
|
148
|
+
onboardingAny.modalOverlay.classList.add("onboarding-modal-closing");
|
|
149
|
+
setTimeout(() => {
|
|
150
|
+
if (onboardingAny.modalOverlay) {
|
|
151
|
+
onboardingAny.modalOverlay.style.display = "none";
|
|
152
|
+
}
|
|
153
|
+
}, 200);
|
|
154
|
+
document.body.style.overflow = "";
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
walletInstance.on("disconnect", () => {
|
|
159
|
+
setIsConnected(false);
|
|
160
|
+
setAddress(null);
|
|
161
|
+
setUser(null);
|
|
162
|
+
setWhoami(null);
|
|
163
|
+
setChainId(null);
|
|
164
|
+
setConnectionType(null);
|
|
165
|
+
// Clear from localStorage
|
|
166
|
+
try {
|
|
167
|
+
localStorage.removeItem("abstraxn_connection_type");
|
|
168
|
+
}
|
|
169
|
+
catch (e) {
|
|
170
|
+
// Ignore localStorage errors
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
walletInstance.on("accountChanged", (newAddress) => {
|
|
174
|
+
setAddress(newAddress);
|
|
175
|
+
});
|
|
176
|
+
walletInstance.on("chainChanged", (newChainId) => {
|
|
177
|
+
setChainId(newChainId);
|
|
178
|
+
});
|
|
179
|
+
// Initialize OnboardingUI only if not already created (prevents flicker on config change)
|
|
180
|
+
if (onboardingRef.current) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const uiConfig = config.ui || {};
|
|
184
|
+
const onboarding = new OnboardingUIWeb({
|
|
185
|
+
logo: uiConfig.logo,
|
|
186
|
+
theme: uiConfig.theme || "light",
|
|
187
|
+
showFooter: uiConfig.showFooter !== false,
|
|
188
|
+
onboardTitle: uiConfig.onboardTitle || "Sign In",
|
|
189
|
+
modal: uiConfig.modal !== false,
|
|
190
|
+
closeOnBackdropClick: uiConfig.closeOnBackdropClick !== false,
|
|
191
|
+
className: uiConfig.className,
|
|
192
|
+
style: uiConfig.style,
|
|
193
|
+
labels: uiConfig.labels,
|
|
194
|
+
colors: uiConfig.colors,
|
|
195
|
+
customCSS: uiConfig.customCSS,
|
|
196
|
+
authMethods: uiConfig.authMethods || config.authMethods,
|
|
197
|
+
onEmailOtpInitiate: async (email) => {
|
|
198
|
+
try {
|
|
199
|
+
if (!walletInstance)
|
|
200
|
+
throw new Error("Wallet not initialized");
|
|
201
|
+
const authManager = walletInstance.getAuthManager();
|
|
202
|
+
const connectionTypeValue = "email";
|
|
203
|
+
setConnectionType(connectionTypeValue);
|
|
204
|
+
try {
|
|
205
|
+
localStorage.setItem("abstraxn_connection_type", connectionTypeValue);
|
|
206
|
+
}
|
|
207
|
+
catch (e) {
|
|
208
|
+
// Ignore localStorage errors
|
|
209
|
+
}
|
|
210
|
+
const result = await authManager.loginWithOTP(email);
|
|
211
|
+
otpIdRef.current = result.otpId;
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
console.error("OTP Init Error:", err);
|
|
215
|
+
throw err;
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
onEmailOtpVerify: async (_email, otp) => {
|
|
219
|
+
try {
|
|
220
|
+
if (!walletInstance)
|
|
221
|
+
throw new Error("Wallet not initialized");
|
|
222
|
+
if (!otpIdRef.current)
|
|
223
|
+
throw new Error("OTP ID not found");
|
|
224
|
+
// Set connection type for email OTP before verification
|
|
225
|
+
const connectionTypeValue = "email";
|
|
226
|
+
setConnectionType(connectionTypeValue);
|
|
227
|
+
try {
|
|
228
|
+
localStorage.setItem("abstraxn_connection_type", connectionTypeValue);
|
|
229
|
+
}
|
|
230
|
+
catch (e) {
|
|
231
|
+
// Ignore localStorage errors
|
|
232
|
+
}
|
|
233
|
+
const authManager = walletInstance.getAuthManager();
|
|
234
|
+
const user = await authManager.verifyOTP(otpIdRef.current, otp);
|
|
235
|
+
otpIdRef.current = null;
|
|
236
|
+
// Connect wallet after successful authentication
|
|
237
|
+
await walletInstance.connect();
|
|
238
|
+
// Clear any previous errors on successful verification
|
|
239
|
+
setError(null);
|
|
240
|
+
return { success: true, user };
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
console.error("OTP Verify Error:", err);
|
|
244
|
+
// Return the actual error message from the API
|
|
245
|
+
const errorMessage = err instanceof Error ? err.message : "Failed to verify OTP";
|
|
246
|
+
return { success: false, error: errorMessage };
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
onGoogleLogin: async () => {
|
|
250
|
+
if (!walletInstance)
|
|
251
|
+
throw new Error("Wallet not initialized");
|
|
252
|
+
const connectionTypeValue = "google";
|
|
253
|
+
setConnectionType(connectionTypeValue);
|
|
254
|
+
// Store in localStorage for restoration
|
|
255
|
+
try {
|
|
256
|
+
localStorage.setItem("abstraxn_connection_type", connectionTypeValue);
|
|
257
|
+
localStorage.setItem("abstraxn_oauth_pending", "google");
|
|
258
|
+
}
|
|
259
|
+
catch (e) {
|
|
260
|
+
// Ignore localStorage errors
|
|
261
|
+
}
|
|
262
|
+
// Clear existing query params before starting new flow
|
|
263
|
+
if (typeof window !== "undefined") {
|
|
264
|
+
const url = new URL(window.location.href);
|
|
265
|
+
// Remove auth params that might be present from previous attempts
|
|
266
|
+
url.searchParams.delete("code");
|
|
267
|
+
url.searchParams.delete("state");
|
|
268
|
+
url.searchParams.delete("error");
|
|
269
|
+
url.searchParams.delete("success");
|
|
270
|
+
url.searchParams.delete("accessToken");
|
|
271
|
+
url.searchParams.delete("provider");
|
|
272
|
+
url.searchParams.delete("authProvider");
|
|
273
|
+
window.history.replaceState({}, document.title, url.toString());
|
|
274
|
+
}
|
|
275
|
+
const authManager = walletInstance.getAuthManager();
|
|
276
|
+
await authManager.loginWithGoogle();
|
|
277
|
+
},
|
|
278
|
+
onTwitterLogin: async () => {
|
|
279
|
+
if (!walletInstance)
|
|
280
|
+
throw new Error("Wallet not initialized");
|
|
281
|
+
const connectionTypeValue = "x";
|
|
282
|
+
setConnectionType(connectionTypeValue);
|
|
283
|
+
try {
|
|
284
|
+
localStorage.setItem("abstraxn_connection_type", connectionTypeValue);
|
|
285
|
+
localStorage.setItem("abstraxn_oauth_pending", "twitter");
|
|
286
|
+
}
|
|
287
|
+
catch (e) {
|
|
288
|
+
// Ignore localStorage errors
|
|
289
|
+
}
|
|
290
|
+
// Clear existing query params before starting new flow
|
|
291
|
+
if (typeof window !== "undefined") {
|
|
292
|
+
const url = new URL(window.location.href);
|
|
293
|
+
// Remove auth params that might be present from previous attempts
|
|
294
|
+
url.searchParams.delete("code");
|
|
295
|
+
url.searchParams.delete("state");
|
|
296
|
+
url.searchParams.delete("error");
|
|
297
|
+
url.searchParams.delete("success");
|
|
298
|
+
url.searchParams.delete("accessToken");
|
|
299
|
+
url.searchParams.delete("provider");
|
|
300
|
+
url.searchParams.delete("authProvider");
|
|
301
|
+
window.history.replaceState({}, document.title, url.toString());
|
|
302
|
+
}
|
|
303
|
+
const authManager = walletInstance.getAuthManager();
|
|
304
|
+
await authManager.loginWithTwitter();
|
|
305
|
+
},
|
|
306
|
+
onDiscordLogin: async () => {
|
|
307
|
+
if (!walletInstance)
|
|
308
|
+
throw new Error("Wallet not initialized");
|
|
309
|
+
const connectionTypeValue = "discord";
|
|
310
|
+
setConnectionType(connectionTypeValue);
|
|
311
|
+
try {
|
|
312
|
+
localStorage.setItem("abstraxn_connection_type", connectionTypeValue);
|
|
313
|
+
localStorage.setItem("abstraxn_oauth_pending", "discord");
|
|
314
|
+
}
|
|
315
|
+
catch (e) {
|
|
316
|
+
// Ignore localStorage errors
|
|
317
|
+
}
|
|
318
|
+
// Clear existing query params before starting new flow
|
|
319
|
+
if (typeof window !== "undefined") {
|
|
320
|
+
const url = new URL(window.location.href);
|
|
321
|
+
// Remove auth params that might be present from previous attempts
|
|
322
|
+
url.searchParams.delete("code");
|
|
323
|
+
url.searchParams.delete("state");
|
|
324
|
+
url.searchParams.delete("error");
|
|
325
|
+
url.searchParams.delete("success");
|
|
326
|
+
url.searchParams.delete("accessToken");
|
|
327
|
+
url.searchParams.delete("provider");
|
|
328
|
+
url.searchParams.delete("authProvider");
|
|
329
|
+
window.history.replaceState({}, document.title, url.toString());
|
|
330
|
+
}
|
|
331
|
+
const authManager = walletInstance.getAuthManager();
|
|
332
|
+
await authManager.loginWithDiscord();
|
|
333
|
+
},
|
|
334
|
+
onPasskeyLogin: async () => {
|
|
335
|
+
if (!walletInstance)
|
|
336
|
+
throw new Error("Wallet not initialized");
|
|
337
|
+
const connectionTypeValue = "passkey";
|
|
338
|
+
setConnectionType(connectionTypeValue);
|
|
339
|
+
try {
|
|
340
|
+
localStorage.setItem("abstraxn_connection_type", connectionTypeValue);
|
|
341
|
+
}
|
|
342
|
+
catch (e) {
|
|
343
|
+
// Ignore localStorage errors
|
|
344
|
+
}
|
|
345
|
+
const authManager = walletInstance.getAuthManager();
|
|
346
|
+
const user = await authManager.loginWithPasskey();
|
|
347
|
+
// Set user immediately so onLoginSuccess can access it
|
|
348
|
+
setUser(user);
|
|
349
|
+
// Connect wallet after successful authentication
|
|
350
|
+
await walletInstance.connect();
|
|
351
|
+
},
|
|
352
|
+
onPasskeySignup: async () => {
|
|
353
|
+
if (!walletInstance)
|
|
354
|
+
throw new Error("Wallet not initialized");
|
|
355
|
+
const connectionTypeValue = "passkey";
|
|
356
|
+
setConnectionType(connectionTypeValue);
|
|
357
|
+
try {
|
|
358
|
+
localStorage.setItem("abstraxn_connection_type", connectionTypeValue);
|
|
359
|
+
}
|
|
360
|
+
catch (e) {
|
|
361
|
+
// Ignore localStorage errors
|
|
362
|
+
}
|
|
363
|
+
const authManager = walletInstance.getAuthManager();
|
|
364
|
+
const user = await authManager.signupWithPasskey();
|
|
365
|
+
// Clear any previous errors on successful verification
|
|
366
|
+
// setError(null);
|
|
367
|
+
setUser(user);
|
|
368
|
+
// Connect wallet after successful authentication
|
|
369
|
+
await walletInstance.connect();
|
|
370
|
+
},
|
|
371
|
+
onLoginSuccess: async (_data) => {
|
|
372
|
+
// Clear any previous errors on successful login
|
|
373
|
+
setError(null);
|
|
374
|
+
// Restore connection type from localStorage for OAuth logins (Google, X, Discord)
|
|
375
|
+
// This ensures connectionType is set after OAuth redirects
|
|
376
|
+
try {
|
|
377
|
+
const storedType = localStorage.getItem("abstraxn_connection_type");
|
|
378
|
+
if (storedType &&
|
|
379
|
+
(storedType === "google" ||
|
|
380
|
+
storedType === "x" ||
|
|
381
|
+
storedType === "discord" ||
|
|
382
|
+
storedType === "email" ||
|
|
383
|
+
storedType === "passkey")) {
|
|
384
|
+
setConnectionType(storedType);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
catch (e) {
|
|
388
|
+
// Ignore localStorage errors
|
|
389
|
+
}
|
|
390
|
+
// Load whoami after successful login
|
|
391
|
+
if (walletInstance) {
|
|
392
|
+
try {
|
|
393
|
+
const whoamiInfo = await walletInstance.getWhoami();
|
|
394
|
+
setWhoami(whoamiInfo);
|
|
395
|
+
const addr = await walletInstance.getAddress();
|
|
396
|
+
setAddress(addr);
|
|
397
|
+
const cid = await walletInstance.getChainId();
|
|
398
|
+
setChainId(cid);
|
|
399
|
+
// Only hide onboarding UI and set connected if whoami succeeds
|
|
400
|
+
if (onboardingRef.current) {
|
|
401
|
+
const onboardingAny = onboardingRef.current;
|
|
402
|
+
if (onboardingAny.hideLoadingModal) {
|
|
403
|
+
onboardingAny.hideLoadingModal();
|
|
404
|
+
}
|
|
405
|
+
if (onboardingAny.modalOverlay) {
|
|
406
|
+
onboardingAny.modalOverlay.classList.remove("onboarding-modal-open");
|
|
407
|
+
onboardingAny.modalOverlay.classList.add("onboarding-modal-closing");
|
|
408
|
+
setTimeout(() => {
|
|
409
|
+
if (onboardingAny.modalOverlay) {
|
|
410
|
+
onboardingAny.modalOverlay.style.display = "none";
|
|
411
|
+
}
|
|
412
|
+
}, 200);
|
|
413
|
+
}
|
|
414
|
+
document.body.style.overflow = "";
|
|
415
|
+
}
|
|
416
|
+
// Set connected state only after whoami succeeds
|
|
417
|
+
setIsConnected(true);
|
|
418
|
+
}
|
|
419
|
+
catch (err) {
|
|
420
|
+
console.error("Error loading whoami after login:", err);
|
|
421
|
+
// Hide loading modal on whoami error
|
|
422
|
+
if (onboardingRef.current) {
|
|
423
|
+
const onboardingAny = onboardingRef.current;
|
|
424
|
+
if (onboardingAny.hideLoadingModal) {
|
|
425
|
+
onboardingAny.hideLoadingModal();
|
|
426
|
+
}
|
|
427
|
+
// Show error modal/screen
|
|
428
|
+
const errorMessage = err instanceof Error
|
|
429
|
+
? err.message
|
|
430
|
+
: "Failed to load user information";
|
|
431
|
+
if (onboardingAny.showError) {
|
|
432
|
+
onboardingAny.showError(errorMessage);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
// Set error state
|
|
436
|
+
const error = err instanceof Error
|
|
437
|
+
? err
|
|
438
|
+
: new Error("Failed to load user information after login");
|
|
439
|
+
setError(error);
|
|
440
|
+
// Don't set connected if whoami fails
|
|
441
|
+
setIsConnected(false);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
},
|
|
445
|
+
onLoginError: (err) => {
|
|
446
|
+
setError(err);
|
|
447
|
+
},
|
|
448
|
+
}, externalWalletsEnabled); // Pass externalWalletsEnabled as second parameter
|
|
449
|
+
// Inject custom CSS if provided
|
|
450
|
+
if (uiConfig.customCSS) {
|
|
451
|
+
const styleId = "abstraxn-custom-css";
|
|
452
|
+
if (!document.getElementById(styleId)) {
|
|
453
|
+
const style = document.createElement("style");
|
|
454
|
+
style.id = styleId;
|
|
455
|
+
style.textContent = uiConfig.customCSS;
|
|
456
|
+
document.head.appendChild(style);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
try {
|
|
460
|
+
onboarding.init();
|
|
461
|
+
}
|
|
462
|
+
catch (err) {
|
|
463
|
+
console.error("Failed to initialize OnboardingUI:", err);
|
|
464
|
+
}
|
|
465
|
+
// Check if we should keep it open (if handling a callback)
|
|
466
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
467
|
+
const shouldKeepOpen = hasAuthParams(urlParams);
|
|
468
|
+
const hasSuccess = urlParams.get("success") === "true";
|
|
469
|
+
// Hide immediately - use synchronous approach to prevent flicker
|
|
470
|
+
// Only hide if NOT handling a callback
|
|
471
|
+
const onboardingAny = onboarding;
|
|
472
|
+
if (!shouldKeepOpen && onboardingAny.modalOverlay) {
|
|
473
|
+
// Hide immediately without delay to prevent flicker
|
|
474
|
+
onboardingAny.modalOverlay.classList.remove("onboarding-modal-open");
|
|
475
|
+
onboardingAny.modalOverlay.style.display = "none";
|
|
476
|
+
document.body.style.overflow = "";
|
|
477
|
+
}
|
|
478
|
+
else if (hasSuccess) {
|
|
479
|
+
// If success=true is in URL, show loading modal
|
|
480
|
+
// Use setTimeout to ensure onboarding is fully initialized
|
|
481
|
+
setTimeout(() => {
|
|
482
|
+
const onboardingInstance = onboardingRef.current;
|
|
483
|
+
if (onboardingInstance && onboardingInstance.showLoadingModal) {
|
|
484
|
+
// Directly show loading modal - it creates its own overlay with header and footer
|
|
485
|
+
onboardingInstance.showLoadingModal();
|
|
486
|
+
}
|
|
487
|
+
}, 150);
|
|
488
|
+
}
|
|
489
|
+
onboardingRef.current = onboarding;
|
|
490
|
+
// Helper function to restore connection state
|
|
491
|
+
const restoreConnectionState = async (wallet) => {
|
|
492
|
+
try {
|
|
493
|
+
// Verify whoami exists before setting connected
|
|
494
|
+
const whoamiInfo = await wallet.getWhoami();
|
|
495
|
+
if (!whoamiInfo) {
|
|
496
|
+
// If whoami is not available, don't set connected
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
setIsConnected(true);
|
|
500
|
+
const userInfo = await wallet.getUserInfo();
|
|
501
|
+
setUser(userInfo);
|
|
502
|
+
setWhoami(whoamiInfo);
|
|
503
|
+
// Try to get address, but don't fail if not available yet
|
|
504
|
+
try {
|
|
505
|
+
const addr = await wallet.getAddress();
|
|
506
|
+
setAddress(addr);
|
|
507
|
+
}
|
|
508
|
+
catch (addrErr) {
|
|
509
|
+
console.warn("Address not available during restore:", addrErr);
|
|
510
|
+
}
|
|
511
|
+
const cid = await wallet.getChainId();
|
|
512
|
+
setChainId(cid);
|
|
513
|
+
}
|
|
514
|
+
catch (err) {
|
|
515
|
+
console.error("Error restoring connection state:", err);
|
|
516
|
+
// If restore fails, mark as disconnected
|
|
517
|
+
setIsConnected(false);
|
|
518
|
+
}
|
|
519
|
+
};
|
|
520
|
+
// Auto-initialize if enabled
|
|
521
|
+
if (config.autoInit !== false) {
|
|
522
|
+
init().then(() => {
|
|
523
|
+
// After initialization, check if wallet is already connected (from localStorage)
|
|
524
|
+
// The wallet's initialize() method already sets isConnected if authenticated
|
|
525
|
+
// But we need to restore React state if the event was missed
|
|
526
|
+
if (walletInstance && walletInstance.isConnected) {
|
|
527
|
+
// Wallet is already connected, restore state
|
|
528
|
+
restoreConnectionState(walletInstance);
|
|
529
|
+
}
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
return () => {
|
|
533
|
+
if (onboardingRef.current) {
|
|
534
|
+
onboardingRef.current.destroy();
|
|
535
|
+
}
|
|
536
|
+
};
|
|
537
|
+
}, []); // Only run once on mount
|
|
538
|
+
}
|
|
539
|
+
//# sourceMappingURL=useWalletInitialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWalletInitialization.js","sourceRoot":"","sources":["../../../../src/components/AbstraxnProvider/useWalletInitialization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for AbstraxnProvider
|
|
3
|
+
*/
|
|
4
|
+
import React, { type ReactNode } from "react";
|
|
5
|
+
import { QueryClient } from "@tanstack/react-query";
|
|
6
|
+
/**
|
|
7
|
+
* Check if React Query is available and can be used safely
|
|
8
|
+
* This is a simple check - we can't fully verify React is properly set up
|
|
9
|
+
* without trying to use it, but we can check if the dependencies exist
|
|
10
|
+
*/
|
|
11
|
+
export declare function canUseReactQuery(): {
|
|
12
|
+
canUse: boolean;
|
|
13
|
+
reason?: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Wrapper component that conditionally uses QueryClientProvider
|
|
17
|
+
* Falls back to rendering children directly if React Query is not available
|
|
18
|
+
*/
|
|
19
|
+
export declare function QueryClientWrapper({ children, queryClient, }: {
|
|
20
|
+
children: ReactNode;
|
|
21
|
+
queryClient: QueryClient;
|
|
22
|
+
}): React.FunctionComponentElement<React.FragmentProps> | React.FunctionComponentElement<import("@tanstack/react-query").QueryClientProviderProps>;
|
|
23
|
+
/**
|
|
24
|
+
* Hook to create QueryClient
|
|
25
|
+
* Creates a QueryClient instance that's only created once per component instance
|
|
26
|
+
* Since @tanstack/react-query is now only in peerDependencies, the app's instance will be used
|
|
27
|
+
* This prevents multiple instances of the package from being bundled
|
|
28
|
+
*/
|
|
29
|
+
export declare function useQueryClientSafe(): QueryClient;
|
|
30
|
+
/**
|
|
31
|
+
* Check if URL has auth parameters
|
|
32
|
+
*/
|
|
33
|
+
export declare function hasAuthParams(params: URLSearchParams): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Extract auth provider from JWT token
|
|
36
|
+
*/
|
|
37
|
+
export declare function getAuthProviderFromToken(token: string): string | null;
|
|
38
|
+
/**
|
|
39
|
+
* Check if URL params match a specific OAuth provider
|
|
40
|
+
*/
|
|
41
|
+
export declare function matchesProvider(provider: "google" | "twitter" | "discord", params: URLSearchParams): boolean;
|