@volr/react 0.1.102 → 0.1.104
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/index.cjs +58 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +58 -16
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -9909,11 +9909,18 @@ function useWalletEvents({
|
|
|
9909
9909
|
}) {
|
|
9910
9910
|
react.useEffect(() => {
|
|
9911
9911
|
if (!user) return;
|
|
9912
|
+
if (user.keyStorageType === "passkey") {
|
|
9913
|
+
console.log("[Provider] Passkey user - skipping external wallet event listeners");
|
|
9914
|
+
return;
|
|
9915
|
+
}
|
|
9912
9916
|
if (typeof window === "undefined" || !window.ethereum) {
|
|
9913
9917
|
return;
|
|
9914
9918
|
}
|
|
9915
9919
|
const ethereum = window.ethereum;
|
|
9916
9920
|
const handleAccountsChanged = (accounts) => {
|
|
9921
|
+
if (user.signerType !== "external_wallet") {
|
|
9922
|
+
return;
|
|
9923
|
+
}
|
|
9917
9924
|
if (accounts.length === 0) {
|
|
9918
9925
|
console.warn("[Provider] Wallet disconnected, logging out...");
|
|
9919
9926
|
setTimeout(() => logout(), 3e3);
|
|
@@ -9928,9 +9935,15 @@ function useWalletEvents({
|
|
|
9928
9935
|
setUser(
|
|
9929
9936
|
(prev) => prev ? { ...prev, lastWalletChainId: newChainId } : null
|
|
9930
9937
|
);
|
|
9931
|
-
|
|
9938
|
+
if (user.signerType === "external_wallet") {
|
|
9939
|
+
window.location.reload();
|
|
9940
|
+
}
|
|
9932
9941
|
};
|
|
9933
9942
|
const handleDisconnect = () => {
|
|
9943
|
+
if (user.signerType !== "external_wallet") {
|
|
9944
|
+
console.log("[Provider] disconnect event ignored (not external_wallet signer)");
|
|
9945
|
+
return;
|
|
9946
|
+
}
|
|
9934
9947
|
console.log("[Provider] disconnect event");
|
|
9935
9948
|
setProviderState(null);
|
|
9936
9949
|
safeStorage.removeItem(STORAGE_KEYS.provider);
|
|
@@ -18533,21 +18546,53 @@ function useVolr() {
|
|
|
18533
18546
|
const { precheck } = usePrecheck();
|
|
18534
18547
|
const { relay } = useRelay();
|
|
18535
18548
|
const { client: apiClient } = useInternalAuth();
|
|
18549
|
+
const restoringRef = react.useRef(null);
|
|
18536
18550
|
const getRpcUrl = react.useCallback(
|
|
18537
18551
|
createGetRpcUrl({ client: apiClient, rpcOverrides: config.rpcOverrides }),
|
|
18538
18552
|
[apiClient, config.rpcOverrides]
|
|
18539
18553
|
);
|
|
18554
|
+
const ensureProvider = react.useCallback(async () => {
|
|
18555
|
+
if (provider) {
|
|
18556
|
+
return provider;
|
|
18557
|
+
}
|
|
18558
|
+
if (!user?.keyStorageType || user.keyStorageType !== "passkey") {
|
|
18559
|
+
throw new Error(
|
|
18560
|
+
"No wallet provider available. Please complete passkey enrollment first."
|
|
18561
|
+
);
|
|
18562
|
+
}
|
|
18563
|
+
if (!user.blobUrl || !user.prfInput || !user.id) {
|
|
18564
|
+
throw new Error(
|
|
18565
|
+
"Missing passkey data. Please re-enroll your passkey."
|
|
18566
|
+
);
|
|
18567
|
+
}
|
|
18568
|
+
if (restoringRef.current) {
|
|
18569
|
+
return restoringRef.current;
|
|
18570
|
+
}
|
|
18571
|
+
console.log("[useVolr] Auto-restoring passkey provider...");
|
|
18572
|
+
restoringRef.current = restorePasskey({
|
|
18573
|
+
client: apiClient,
|
|
18574
|
+
userId: user.id,
|
|
18575
|
+
blobUrl: user.blobUrl,
|
|
18576
|
+
prfInput: user.prfInput,
|
|
18577
|
+
credentialId: user.credentialId
|
|
18578
|
+
}).then(async ({ provider: restoredProvider }) => {
|
|
18579
|
+
await setProvider(restoredProvider);
|
|
18580
|
+
console.log("[useVolr] Passkey provider restored successfully");
|
|
18581
|
+
restoringRef.current = null;
|
|
18582
|
+
return restoredProvider;
|
|
18583
|
+
}).catch((err) => {
|
|
18584
|
+
restoringRef.current = null;
|
|
18585
|
+
throw err;
|
|
18586
|
+
});
|
|
18587
|
+
return restoringRef.current;
|
|
18588
|
+
}, [provider, user, apiClient, setProvider]);
|
|
18540
18589
|
const signMessage = react.useCallback(
|
|
18541
18590
|
async (message) => {
|
|
18542
|
-
|
|
18543
|
-
throw new Error(
|
|
18544
|
-
"No wallet provider available. Please log in with a Passkey or MPC wallet to sign messages."
|
|
18545
|
-
);
|
|
18546
|
-
}
|
|
18591
|
+
const activeProvider = await ensureProvider();
|
|
18547
18592
|
if (config.onSignRequest) {
|
|
18548
18593
|
await config.onSignRequest({ type: "message", message });
|
|
18549
18594
|
}
|
|
18550
|
-
await
|
|
18595
|
+
await activeProvider.ensureSession({ interactive: true });
|
|
18551
18596
|
const messageHash = hashMessage(
|
|
18552
18597
|
typeof message === "string" ? message : { raw: message }
|
|
18553
18598
|
);
|
|
@@ -18556,28 +18601,25 @@ function useVolr() {
|
|
|
18556
18601
|
for (let i = 0; i < 32; i++) {
|
|
18557
18602
|
hashBytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
|
18558
18603
|
}
|
|
18559
|
-
const sig = await
|
|
18604
|
+
const sig = await activeProvider.signMessage(hashBytes);
|
|
18560
18605
|
const v = sig.yParity + 27;
|
|
18561
18606
|
const rHex = Array.from(sig.r).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
18562
18607
|
const sHex = Array.from(sig.s).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
18563
18608
|
const vHex = v.toString(16).padStart(2, "0");
|
|
18564
18609
|
return `0x${rHex}${sHex}${vHex}`;
|
|
18565
18610
|
},
|
|
18566
|
-
[
|
|
18611
|
+
[ensureProvider, config.onSignRequest]
|
|
18567
18612
|
);
|
|
18568
18613
|
const signTypedData = react.useCallback(
|
|
18569
18614
|
async (typedData) => {
|
|
18570
|
-
|
|
18571
|
-
throw new Error(
|
|
18572
|
-
"No wallet provider available. Please log in with a Passkey or MPC wallet to sign typed data."
|
|
18573
|
-
);
|
|
18574
|
-
}
|
|
18615
|
+
const activeProvider = await ensureProvider();
|
|
18575
18616
|
if (config.onSignRequest) {
|
|
18576
18617
|
await config.onSignRequest({ type: "typedData", typedData });
|
|
18577
18618
|
}
|
|
18578
|
-
|
|
18619
|
+
await activeProvider.ensureSession({ interactive: true });
|
|
18620
|
+
return activeProvider.signTypedData(typedData);
|
|
18579
18621
|
},
|
|
18580
|
-
[
|
|
18622
|
+
[ensureProvider, config.onSignRequest]
|
|
18581
18623
|
);
|
|
18582
18624
|
const createChainClient = react.useCallback(
|
|
18583
18625
|
(chainId) => {
|