@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.js
CHANGED
|
@@ -9885,11 +9885,18 @@ function useWalletEvents({
|
|
|
9885
9885
|
}) {
|
|
9886
9886
|
useEffect(() => {
|
|
9887
9887
|
if (!user) return;
|
|
9888
|
+
if (user.keyStorageType === "passkey") {
|
|
9889
|
+
console.log("[Provider] Passkey user - skipping external wallet event listeners");
|
|
9890
|
+
return;
|
|
9891
|
+
}
|
|
9888
9892
|
if (typeof window === "undefined" || !window.ethereum) {
|
|
9889
9893
|
return;
|
|
9890
9894
|
}
|
|
9891
9895
|
const ethereum = window.ethereum;
|
|
9892
9896
|
const handleAccountsChanged = (accounts) => {
|
|
9897
|
+
if (user.signerType !== "external_wallet") {
|
|
9898
|
+
return;
|
|
9899
|
+
}
|
|
9893
9900
|
if (accounts.length === 0) {
|
|
9894
9901
|
console.warn("[Provider] Wallet disconnected, logging out...");
|
|
9895
9902
|
setTimeout(() => logout(), 3e3);
|
|
@@ -9904,9 +9911,15 @@ function useWalletEvents({
|
|
|
9904
9911
|
setUser(
|
|
9905
9912
|
(prev) => prev ? { ...prev, lastWalletChainId: newChainId } : null
|
|
9906
9913
|
);
|
|
9907
|
-
|
|
9914
|
+
if (user.signerType === "external_wallet") {
|
|
9915
|
+
window.location.reload();
|
|
9916
|
+
}
|
|
9908
9917
|
};
|
|
9909
9918
|
const handleDisconnect = () => {
|
|
9919
|
+
if (user.signerType !== "external_wallet") {
|
|
9920
|
+
console.log("[Provider] disconnect event ignored (not external_wallet signer)");
|
|
9921
|
+
return;
|
|
9922
|
+
}
|
|
9910
9923
|
console.log("[Provider] disconnect event");
|
|
9911
9924
|
setProviderState(null);
|
|
9912
9925
|
safeStorage.removeItem(STORAGE_KEYS.provider);
|
|
@@ -18509,21 +18522,53 @@ function useVolr() {
|
|
|
18509
18522
|
const { precheck } = usePrecheck();
|
|
18510
18523
|
const { relay } = useRelay();
|
|
18511
18524
|
const { client: apiClient } = useInternalAuth();
|
|
18525
|
+
const restoringRef = useRef(null);
|
|
18512
18526
|
const getRpcUrl = useCallback(
|
|
18513
18527
|
createGetRpcUrl({ client: apiClient, rpcOverrides: config.rpcOverrides }),
|
|
18514
18528
|
[apiClient, config.rpcOverrides]
|
|
18515
18529
|
);
|
|
18530
|
+
const ensureProvider = useCallback(async () => {
|
|
18531
|
+
if (provider) {
|
|
18532
|
+
return provider;
|
|
18533
|
+
}
|
|
18534
|
+
if (!user?.keyStorageType || user.keyStorageType !== "passkey") {
|
|
18535
|
+
throw new Error(
|
|
18536
|
+
"No wallet provider available. Please complete passkey enrollment first."
|
|
18537
|
+
);
|
|
18538
|
+
}
|
|
18539
|
+
if (!user.blobUrl || !user.prfInput || !user.id) {
|
|
18540
|
+
throw new Error(
|
|
18541
|
+
"Missing passkey data. Please re-enroll your passkey."
|
|
18542
|
+
);
|
|
18543
|
+
}
|
|
18544
|
+
if (restoringRef.current) {
|
|
18545
|
+
return restoringRef.current;
|
|
18546
|
+
}
|
|
18547
|
+
console.log("[useVolr] Auto-restoring passkey provider...");
|
|
18548
|
+
restoringRef.current = restorePasskey({
|
|
18549
|
+
client: apiClient,
|
|
18550
|
+
userId: user.id,
|
|
18551
|
+
blobUrl: user.blobUrl,
|
|
18552
|
+
prfInput: user.prfInput,
|
|
18553
|
+
credentialId: user.credentialId
|
|
18554
|
+
}).then(async ({ provider: restoredProvider }) => {
|
|
18555
|
+
await setProvider(restoredProvider);
|
|
18556
|
+
console.log("[useVolr] Passkey provider restored successfully");
|
|
18557
|
+
restoringRef.current = null;
|
|
18558
|
+
return restoredProvider;
|
|
18559
|
+
}).catch((err) => {
|
|
18560
|
+
restoringRef.current = null;
|
|
18561
|
+
throw err;
|
|
18562
|
+
});
|
|
18563
|
+
return restoringRef.current;
|
|
18564
|
+
}, [provider, user, apiClient, setProvider]);
|
|
18516
18565
|
const signMessage = useCallback(
|
|
18517
18566
|
async (message) => {
|
|
18518
|
-
|
|
18519
|
-
throw new Error(
|
|
18520
|
-
"No wallet provider available. Please log in with a Passkey or MPC wallet to sign messages."
|
|
18521
|
-
);
|
|
18522
|
-
}
|
|
18567
|
+
const activeProvider = await ensureProvider();
|
|
18523
18568
|
if (config.onSignRequest) {
|
|
18524
18569
|
await config.onSignRequest({ type: "message", message });
|
|
18525
18570
|
}
|
|
18526
|
-
await
|
|
18571
|
+
await activeProvider.ensureSession({ interactive: true });
|
|
18527
18572
|
const messageHash = hashMessage(
|
|
18528
18573
|
typeof message === "string" ? message : { raw: message }
|
|
18529
18574
|
);
|
|
@@ -18532,28 +18577,25 @@ function useVolr() {
|
|
|
18532
18577
|
for (let i = 0; i < 32; i++) {
|
|
18533
18578
|
hashBytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
|
18534
18579
|
}
|
|
18535
|
-
const sig = await
|
|
18580
|
+
const sig = await activeProvider.signMessage(hashBytes);
|
|
18536
18581
|
const v = sig.yParity + 27;
|
|
18537
18582
|
const rHex = Array.from(sig.r).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
18538
18583
|
const sHex = Array.from(sig.s).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
18539
18584
|
const vHex = v.toString(16).padStart(2, "0");
|
|
18540
18585
|
return `0x${rHex}${sHex}${vHex}`;
|
|
18541
18586
|
},
|
|
18542
|
-
[
|
|
18587
|
+
[ensureProvider, config.onSignRequest]
|
|
18543
18588
|
);
|
|
18544
18589
|
const signTypedData = useCallback(
|
|
18545
18590
|
async (typedData) => {
|
|
18546
|
-
|
|
18547
|
-
throw new Error(
|
|
18548
|
-
"No wallet provider available. Please log in with a Passkey or MPC wallet to sign typed data."
|
|
18549
|
-
);
|
|
18550
|
-
}
|
|
18591
|
+
const activeProvider = await ensureProvider();
|
|
18551
18592
|
if (config.onSignRequest) {
|
|
18552
18593
|
await config.onSignRequest({ type: "typedData", typedData });
|
|
18553
18594
|
}
|
|
18554
|
-
|
|
18595
|
+
await activeProvider.ensureSession({ interactive: true });
|
|
18596
|
+
return activeProvider.signTypedData(typedData);
|
|
18555
18597
|
},
|
|
18556
|
-
[
|
|
18598
|
+
[ensureProvider, config.onSignRequest]
|
|
18557
18599
|
);
|
|
18558
18600
|
const createChainClient = useCallback(
|
|
18559
18601
|
(chainId) => {
|