@volr/react 0.1.80 → 0.1.82

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 CHANGED
@@ -9807,7 +9807,6 @@ function useAutoRecover({
9807
9807
  return;
9808
9808
  }
9809
9809
  const refreshedUser = await client.refreshSession();
9810
- console.log("[Provider] Session refreshed, user:", refreshedUser);
9811
9810
  setAccessTokenState(client.getAccessToken());
9812
9811
  setRefreshTokenState(client.getRefreshToken());
9813
9812
  if (refreshedUser) {
@@ -9860,7 +9859,6 @@ function useWalletEvents({
9860
9859
  }
9861
9860
  const ethereum = window.ethereum;
9862
9861
  const handleAccountsChanged = (accounts) => {
9863
- console.log("[Provider] accountsChanged event:", accounts);
9864
9862
  if (accounts.length === 0) {
9865
9863
  console.warn("[Provider] Wallet disconnected, logging out...");
9866
9864
  setTimeout(() => logout(), 3e3);
@@ -10033,17 +10031,25 @@ function VolrProvider({ config, children }) {
10033
10031
  setError(null);
10034
10032
  const keyStorageType = newProvider.keyStorageType;
10035
10033
  setProviderState(newProvider);
10036
- try {
10037
- const refreshedUser = await client.refreshSession();
10038
- if (refreshedUser) {
10039
- console.log("[Provider] setProvider: User data refreshed:", refreshedUser);
10040
- setUser(refreshedUser);
10041
- } else {
10034
+ const userHasCompleteData = user?.keyStorageType === "passkey" && user?.blobUrl && user?.prfInput && user?.id;
10035
+ if (userHasCompleteData) {
10036
+ console.log("[Provider] setProvider: User data already complete, skipping refresh");
10037
+ if (user.keyStorageType !== keyStorageType) {
10038
+ setUser((prev) => ({ ...prev, keyStorageType }));
10039
+ }
10040
+ } else {
10041
+ try {
10042
+ const refreshedUser = await client.refreshSession();
10043
+ if (refreshedUser) {
10044
+ console.log("[Provider] setProvider: User data refreshed:", refreshedUser);
10045
+ setUser(refreshedUser);
10046
+ } else {
10047
+ setUser((prev) => ({ ...prev, keyStorageType }));
10048
+ }
10049
+ } catch (error2) {
10050
+ console.warn("[Provider] setProvider: Failed to refresh user data:", error2);
10042
10051
  setUser((prev) => ({ ...prev, keyStorageType }));
10043
10052
  }
10044
- } catch (error2) {
10045
- console.warn("[Provider] setProvider: Failed to refresh user data:", error2);
10046
- setUser((prev) => ({ ...prev, keyStorageType }));
10047
10053
  }
10048
10054
  safeStorage.setItem(STORAGE_KEYS.provider, keyStorageType);
10049
10055
  syncRef.current?.broadcast({
@@ -10294,30 +10300,34 @@ function useRelay() {
10294
10300
  if (input.chainId === 0) {
10295
10301
  throw new Error("chainId cannot be 0");
10296
10302
  }
10297
- const networkData = await client.get(
10298
- `/networks/${input.chainId}`
10299
- );
10300
- const invokerAddress = networkData.invokerAddress;
10303
+ let invokerAddress = opts.invokerAddress;
10304
+ if (!invokerAddress) {
10305
+ const networkData = await client.get(
10306
+ `/networks/${input.chainId}`
10307
+ );
10308
+ invokerAddress = networkData.invokerAddress;
10309
+ }
10301
10310
  if (!invokerAddress) {
10302
10311
  throw new Error(
10303
10312
  `Invoker address not configured for chainId ${input.chainId}`
10304
10313
  );
10305
10314
  }
10306
- const { sessionSig } = await sdkCore.signSession({
10307
- signer: opts.signer,
10308
- from: input.from,
10309
- auth: input.auth,
10310
- calls: input.calls,
10311
- invokerAddress: input.from
10312
- });
10313
10315
  if (!opts.rpcClient) {
10314
10316
  throw new Error("rpcClient is required for relay");
10315
10317
  }
10316
- const authNonce = await sdkCore.getAuthNonce(
10317
- opts.rpcClient,
10318
- input.from,
10319
- "sponsored"
10320
- );
10318
+ const [sessionResult, authNonce] = await Promise.all([
10319
+ // Sign session (EIP-7702: User EOA becomes the verifyingContract)
10320
+ sdkCore.signSession({
10321
+ signer: opts.signer,
10322
+ from: input.from,
10323
+ auth: input.auth,
10324
+ calls: input.calls,
10325
+ invokerAddress: input.from
10326
+ }),
10327
+ // Get auth nonce (sponsored mode)
10328
+ sdkCore.getAuthNonce(opts.rpcClient, input.from, "sponsored")
10329
+ ]);
10330
+ const { sessionSig } = sessionResult;
10321
10331
  const authorizationTuple = await sdkCore.signAuthorization({
10322
10332
  signer: opts.signer,
10323
10333
  chainId: input.chainId,
@@ -18068,6 +18078,7 @@ function createGetRpcUrl(deps) {
18068
18078
  networkCache.set(chainId, {
18069
18079
  rpcUrl: response.rpcUrl,
18070
18080
  name: response.name,
18081
+ invokerAddress: response.invokerAddress,
18071
18082
  timestamp: Date.now()
18072
18083
  });
18073
18084
  console.log("[getRpcUrl] RPC URL fetched and cached");
@@ -18081,18 +18092,21 @@ function createGetNetworkInfo(deps) {
18081
18092
  if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) {
18082
18093
  return {
18083
18094
  name: cached.name || `Chain ${chainId}`,
18084
- rpcUrl: includeRpcUrl ? cached.rpcUrl : void 0
18095
+ rpcUrl: includeRpcUrl ? cached.rpcUrl : void 0,
18096
+ invokerAddress: cached.invokerAddress
18085
18097
  };
18086
18098
  }
18087
18099
  const response = await client.get(`/networks/${chainId}${includeRpcUrl ? "?includeRpcUrl=true" : ""}`);
18088
18100
  networkCache.set(chainId, {
18089
18101
  name: response.name,
18090
18102
  rpcUrl: response.rpcUrl,
18103
+ invokerAddress: response.invokerAddress,
18091
18104
  timestamp: Date.now()
18092
18105
  });
18093
18106
  return {
18094
18107
  name: response.name,
18095
- rpcUrl: includeRpcUrl ? response.rpcUrl : void 0
18108
+ rpcUrl: includeRpcUrl ? response.rpcUrl : void 0,
18109
+ invokerAddress: response.invokerAddress
18096
18110
  };
18097
18111
  };
18098
18112
  }
@@ -18437,7 +18451,12 @@ async function sendCalls(args) {
18437
18451
  activeProvider = resolved.activeProvider;
18438
18452
  const result = await deps.relay(
18439
18453
  { chainId, from: normalizedFrom, auth, calls: normalizedCalls },
18440
- { signer, rpcClient: deps.rpcClient, idempotencyKey }
18454
+ {
18455
+ signer,
18456
+ rpcClient: deps.rpcClient,
18457
+ idempotencyKey,
18458
+ invokerAddress: precheckQuote.invokerAddress
18459
+ }
18441
18460
  );
18442
18461
  if (result.status === "QUEUED" || result.status === "PENDING") {
18443
18462
  return pollTransactionStatus(result.txId, deps.client);