@volr/react 0.1.125 → 0.1.127

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
@@ -10053,6 +10053,19 @@ function useAutoRecover({
10053
10053
  setAccessTokenState(client.getAccessToken());
10054
10054
  setRefreshTokenState(client.getRefreshToken());
10055
10055
  if (refreshedUser) {
10056
+ if (refreshedUser.keyStorageType === "passkey" && !refreshedUser.evmAddress) {
10057
+ console.error("[Provider] Invalid state: passkey user without evmAddress - clearing session");
10058
+ client.setAccessToken(null);
10059
+ client.setRefreshToken(null);
10060
+ setAccessTokenState(null);
10061
+ setRefreshTokenState(null);
10062
+ setUser(null);
10063
+ setProviderState(null);
10064
+ safeStorage.removeItem(STORAGE_KEYS.user);
10065
+ safeStorage.removeItem(STORAGE_KEYS.provider);
10066
+ setIsLoading(false);
10067
+ return;
10068
+ }
10056
10069
  setUser(refreshedUser);
10057
10070
  if (!REQUIRE_USER_GESTURE_TO_RESTORE) ; else if (refreshedUser.keyStorageType === "passkey") {
10058
10071
  console.log("[Provider] TTL=0 mode: Provider restoration deferred");
@@ -10064,12 +10077,20 @@ function useAutoRecover({
10064
10077
  const userStr = safeStorage.getItem(STORAGE_KEYS.user);
10065
10078
  if (userStr) {
10066
10079
  try {
10067
- setUser(JSON.parse(userStr));
10080
+ const storedUser = JSON.parse(userStr);
10081
+ if (storedUser.keyStorageType === "passkey" && !storedUser.evmAddress) {
10082
+ console.error("[Provider] Invalid stored user: passkey user without evmAddress - clearing");
10083
+ safeStorage.removeItem(STORAGE_KEYS.user);
10084
+ safeStorage.removeItem(STORAGE_KEYS.provider);
10085
+ } else {
10086
+ setUser(storedUser);
10087
+ }
10068
10088
  } catch {
10069
10089
  safeStorage.removeItem(STORAGE_KEYS.user);
10070
10090
  }
10071
10091
  }
10072
10092
  }
10093
+ setIsLoading(false);
10073
10094
  } catch {
10074
10095
  client.setAccessToken(null);
10075
10096
  client.setRefreshToken(null);
@@ -10079,7 +10100,6 @@ function useAutoRecover({
10079
10100
  setProviderState(null);
10080
10101
  safeStorage.removeItem(STORAGE_KEYS.user);
10081
10102
  safeStorage.removeItem(STORAGE_KEYS.provider);
10082
- } finally {
10083
10103
  setIsLoading(false);
10084
10104
  }
10085
10105
  };
@@ -20768,6 +20788,40 @@ function blobToBase642(blob) {
20768
20788
  reader.readAsDataURL(blob);
20769
20789
  });
20770
20790
  }
20791
+ async function decryptEntropyForMigration(params) {
20792
+ const {
20793
+ client,
20794
+ userId,
20795
+ blobUrl,
20796
+ prfInput,
20797
+ credentialId,
20798
+ rpId = typeof window !== "undefined" ? window.location.hostname : "localhost",
20799
+ rpName = "Volr"
20800
+ } = params;
20801
+ const arrayBuffer = await client.postBinary("/blob/download", { key: blobUrl });
20802
+ const blobBytes = new Uint8Array(arrayBuffer);
20803
+ const nonceLength = 12;
20804
+ const cipherLength = blobBytes.length - nonceLength;
20805
+ if (cipherLength <= 0) {
20806
+ throw new Error("Invalid blob format: blob too small");
20807
+ }
20808
+ const cipher = blobBytes.slice(0, cipherLength);
20809
+ const nonce = blobBytes.slice(cipherLength);
20810
+ const keyStorageType = "passkey";
20811
+ const version5 = "v1";
20812
+ const aadBytes = new TextEncoder().encode(
20813
+ `volr/master-seed/v1|${userId}|${keyStorageType}|${version5}`
20814
+ );
20815
+ const prfSalt = sdkCore.deriveWrapKey(prfInput);
20816
+ const passkeyAdapter = createPasskeyAdapter({ rpId});
20817
+ const { prfOutput } = await passkeyAdapter.authenticate({
20818
+ salt: prfSalt,
20819
+ credentialId
20820
+ });
20821
+ const wrapKey = prfOutput;
20822
+ const entropy = await sdkCore.unsealMasterSeed(cipher, wrapKey, aadBytes, nonce);
20823
+ return entropy;
20824
+ }
20771
20825
  async function requestMigration(params) {
20772
20826
  const { client, targetOrigin } = params;
20773
20827
  const response = await client.post("/wallet/migration/request", { targetOrigin });
@@ -21142,6 +21196,7 @@ exports.completeMigration = completeMigration;
21142
21196
  exports.createGetNetworkInfo = createGetNetworkInfo;
21143
21197
  exports.createPasskeyAdapter = createPasskeyAdapter;
21144
21198
  exports.debugTransactionFailure = debugTransactionFailure;
21199
+ exports.decryptEntropyForMigration = decryptEntropyForMigration;
21145
21200
  exports.defaultIdempotencyKey = defaultIdempotencyKey;
21146
21201
  exports.detectWalletConnector = detectWalletConnector;
21147
21202
  exports.diagnoseTransactionFailure = diagnoseTransactionFailure;