@volr/react 0.1.113 → 0.1.114

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
@@ -19425,11 +19425,6 @@ function useDepositListener(input) {
19425
19425
  }, [getRpcUrl, input.chainId, input.address, JSON.stringify(input.asset)]);
19426
19426
  return status;
19427
19427
  }
19428
- function debugLog(step, data) {
19429
- {
19430
- console.log(`[PasskeyEnrollment] ${step}`, data !== void 0 ? data : "");
19431
- }
19432
- }
19433
19428
  function blobToBase64(blob) {
19434
19429
  return new Promise((resolve, reject) => {
19435
19430
  const reader = new FileReader();
@@ -19477,14 +19472,6 @@ function buildDisplayName(userEmail, userEvmAddress, userId) {
19477
19472
  return userId || "Volr Wallet";
19478
19473
  }
19479
19474
  async function enrollPasskey(params) {
19480
- debugLog("Starting enrollment with params:", {
19481
- userId: params.userId,
19482
- projectId: params.projectId,
19483
- rpId: params.rpId,
19484
- rpName: params.rpName,
19485
- userEmail: params.userEmail,
19486
- userEvmAddress: params.userEvmAddress
19487
- });
19488
19475
  const {
19489
19476
  client,
19490
19477
  baseUrl,
@@ -19496,7 +19483,6 @@ async function enrollPasskey(params) {
19496
19483
  rpId = typeof window !== "undefined" ? window.location.hostname : "localhost",
19497
19484
  rpName
19498
19485
  } = params;
19499
- debugLog("Step 0: Validating parameters");
19500
19486
  if (!userId) {
19501
19487
  throw new Error("userId is required");
19502
19488
  }
@@ -19512,27 +19498,19 @@ async function enrollPasskey(params) {
19512
19498
  if (!apiKey) {
19513
19499
  throw new Error("apiKey is required");
19514
19500
  }
19515
- debugLog("Step 0: Parameters validated", { rpId, rpName });
19516
- debugLog("Step 1: Checking WebAuthn support");
19517
19501
  if (!navigator.credentials || !navigator.credentials.create) {
19518
19502
  throw new Error("WebAuthn API is not supported");
19519
19503
  }
19520
- debugLog("Step 1: WebAuthn API is supported");
19521
19504
  const challenge2 = new Uint8Array(32);
19522
19505
  crypto.getRandomValues(challenge2);
19523
- debugLog("Step 1: Challenge generated", { challengeLength: challenge2.length });
19524
19506
  const userHandle = new TextEncoder().encode(userId);
19525
- debugLog("Step 1: User handle created", { userHandleLength: userHandle.length });
19526
19507
  const tempCredentialId = "temp-" + Date.now();
19527
19508
  const tempPrfInput = {
19528
19509
  projectId,
19529
19510
  credentialId: tempCredentialId
19530
19511
  };
19531
- debugLog("Step 1: Temp PRF input created", tempPrfInput);
19532
19512
  const prfSalt = sdkCore.deriveWrapKey(tempPrfInput);
19533
- debugLog("Step 1: PRF salt derived", { prfSaltLength: prfSalt.length });
19534
19513
  const displayName = buildDisplayName(userEmail, userEvmAddress, userId);
19535
- debugLog("Step 1: Display name built", { displayName });
19536
19514
  const publicKeyCredentialCreationOptions = {
19537
19515
  challenge: challenge2,
19538
19516
  rp: {
@@ -19556,105 +19534,37 @@ async function enrollPasskey(params) {
19556
19534
  }
19557
19535
  }
19558
19536
  };
19559
- debugLog("Step 1: WebAuthn options prepared", {
19560
- rpId: publicKeyCredentialCreationOptions.rp.id,
19561
- rpName: publicKeyCredentialCreationOptions.rp.name,
19562
- timeout: publicKeyCredentialCreationOptions.timeout,
19563
- attestation: publicKeyCredentialCreationOptions.attestation,
19564
- authenticatorSelection: publicKeyCredentialCreationOptions.authenticatorSelection,
19565
- pubKeyCredParams: publicKeyCredentialCreationOptions.pubKeyCredParams
19537
+ const credential = await navigator.credentials.create({
19538
+ publicKey: publicKeyCredentialCreationOptions
19566
19539
  });
19567
- debugLog("Step 1: Calling navigator.credentials.create()...");
19568
- let credential;
19569
- try {
19570
- credential = await navigator.credentials.create({
19571
- publicKey: publicKeyCredentialCreationOptions
19572
- });
19573
- debugLog("Step 1: Credential creation completed", {
19574
- hasCredential: !!credential,
19575
- credentialId: credential ? Array.from(new Uint8Array(credential.rawId)).slice(0, 8).join(",") + "..." : null
19576
- });
19577
- } catch (err) {
19578
- debugLog("Step 1: Credential creation FAILED", {
19579
- error: err,
19580
- errorMessage: err instanceof Error ? err.message : String(err),
19581
- errorName: err instanceof Error ? err.name : "Unknown"
19582
- });
19583
- throw err;
19584
- }
19585
19540
  if (!credential || !("response" in credential)) {
19586
- debugLog("Step 1: Invalid credential response", { credential });
19587
19541
  throw new Error("Failed to create passkey credential");
19588
19542
  }
19589
19543
  const credentialId = Array.from(new Uint8Array(credential.rawId)).map((b) => b.toString(16).padStart(2, "0")).join("");
19590
- debugLog("Step 2: Credential ID extracted", { credentialIdLength: credentialId.length, credentialIdPrefix: credentialId.slice(0, 16) });
19591
- debugLog("Step 2: Extracting PRF output");
19592
19544
  const extensionResults = credential.getClientExtensionResults();
19593
- debugLog("Step 2: Extension results", {
19594
- hasExtensionResults: !!extensionResults,
19595
- hasPrf: !!extensionResults.prf,
19596
- hasPrfResults: !!(extensionResults.prf && extensionResults.prf.results),
19597
- hasPrfFirst: !!(extensionResults.prf && extensionResults.prf.results && extensionResults.prf.results.first),
19598
- allKeys: Object.keys(extensionResults)
19599
- });
19600
19545
  if (!extensionResults.prf || !extensionResults.prf.results || !extensionResults.prf.results.first) {
19601
- debugLog("Step 2: PRF extension not supported or missing", extensionResults);
19602
19546
  throw new Error("PRF extension not supported or PRF output missing. Please use a browser that supports WebAuthn PRF extension.");
19603
19547
  }
19604
19548
  const prfOutputBuffer = extensionResults.prf.results.first;
19605
19549
  const prfOutput = new Uint8Array(prfOutputBuffer);
19606
- debugLog("Step 2: PRF output extracted", { prfOutputLength: prfOutput.length });
19607
19550
  const prfInput = {
19608
19551
  projectId,
19609
19552
  credentialId
19610
19553
  };
19611
- debugLog("Step 3: PRF input built", prfInput);
19612
19554
  const wrapKey = prfOutput;
19613
- debugLog("Step 4: Wrap key created from PRF output", { wrapKeyLength: wrapKey.length });
19614
- debugLog("Step 4: Generating master key...");
19615
19555
  const masterKeyProvider = sdkCore.createMasterKeyProvider();
19616
- let masterKeyHandle;
19617
- try {
19618
- masterKeyHandle = await masterKeyProvider.generate();
19619
- debugLog("Step 4: Master key generated", {
19620
- hasEntropy: !!masterKeyHandle.entropy,
19621
- entropyLength: masterKeyHandle.entropy?.length,
19622
- hasSeed: !!masterKeyHandle.seed,
19623
- seedLength: masterKeyHandle.seed?.length
19624
- });
19625
- } catch (err) {
19626
- debugLog("Step 4: Master key generation FAILED", {
19627
- error: err,
19628
- errorMessage: err instanceof Error ? err.message : String(err)
19629
- });
19630
- throw err;
19631
- }
19556
+ const masterKeyHandle = await masterKeyProvider.generate();
19632
19557
  try {
19633
19558
  const keyStorageType = "passkey";
19634
19559
  const version5 = "v1";
19635
19560
  const aadBytes = new TextEncoder().encode(
19636
19561
  `volr/master-seed/v1|${userId}|${keyStorageType}|${version5}`
19637
19562
  );
19638
- debugLog("Step 4: AAD built", { aadLength: aadBytes.length });
19639
- debugLog("Step 4: Encrypting entropy...");
19640
- let encryptedBlob;
19641
- try {
19642
- encryptedBlob = await sdkCore.sealMasterSeed(
19643
- masterKeyHandle.entropy,
19644
- wrapKey,
19645
- aadBytes
19646
- );
19647
- debugLog("Step 4: Entropy encrypted", {
19648
- cipherLength: encryptedBlob.cipher.length,
19649
- nonceLength: encryptedBlob.nonce.length
19650
- });
19651
- } catch (err) {
19652
- debugLog("Step 4: Encryption FAILED", {
19653
- error: err,
19654
- errorMessage: err instanceof Error ? err.message : String(err)
19655
- });
19656
- throw err;
19657
- }
19563
+ const encryptedBlob = await sdkCore.sealMasterSeed(
19564
+ masterKeyHandle.entropy,
19565
+ wrapKey,
19566
+ aadBytes
19567
+ );
19658
19568
  const blob = new Blob(
19659
19569
  [
19660
19570
  encryptedBlob.cipher,
@@ -19664,81 +19574,28 @@ async function enrollPasskey(params) {
19664
19574
  type: "application/octet-stream"
19665
19575
  }
19666
19576
  );
19667
- debugLog("Step 5: Blob prepared", { blobSize: blob.size });
19668
- debugLog("Step 6: Converting blob to base64...");
19669
19577
  const blobB64 = await blobToBase64(blob);
19670
- debugLog("Step 6: Blob converted", { blobB64Length: blobB64.length });
19671
- debugLog("Step 6: Uploading blob...");
19672
- let uploadResponse;
19673
- try {
19674
- uploadResponse = await client.post("/blob/upload", {
19675
- blobB64
19676
- });
19677
- debugLog("Step 6: Upload response", uploadResponse);
19678
- } catch (err) {
19679
- debugLog("Step 6: Blob upload FAILED", {
19680
- error: err,
19681
- errorMessage: err instanceof Error ? err.message : String(err)
19682
- });
19683
- throw err;
19684
- }
19578
+ const uploadResponse = await client.post("/blob/upload", {
19579
+ blobB64
19580
+ });
19685
19581
  const blobUrl = uploadResponse?.key;
19686
19582
  if (!blobUrl) {
19687
- debugLog("Step 6: Missing blob URL in response", uploadResponse);
19688
19583
  throw new Error("Failed to upload blob: missing key");
19689
19584
  }
19690
- debugLog("Step 6: Blob uploaded", { blobUrl });
19691
- debugLog("Step 7: Deriving address from seed...");
19692
- let keypair;
19693
- try {
19694
- keypair = sdkCore.deriveEvmKey({ masterSeed: masterKeyHandle.seed });
19695
- debugLog("Step 7: Keypair derived", { address: keypair.address });
19696
- } catch (err) {
19697
- debugLog("Step 7: Key derivation FAILED", {
19698
- error: err,
19699
- errorMessage: err instanceof Error ? err.message : String(err)
19700
- });
19701
- throw err;
19702
- }
19585
+ const keypair = sdkCore.deriveEvmKey({ masterSeed: masterKeyHandle.seed });
19703
19586
  const address = keypair.address;
19704
19587
  const platform = detectPlatform();
19705
- debugLog("Step 8: Registering provider...", {
19588
+ const registerResponse = await client.post("/wallet/provider/register", {
19706
19589
  keyStorageType: "passkey",
19707
19590
  credentialId,
19708
19591
  blobUrl,
19592
+ prfInput: {
19593
+ projectId,
19594
+ credentialId
19595
+ },
19709
19596
  address,
19710
19597
  platform
19711
19598
  });
19712
- let registerResponse;
19713
- try {
19714
- registerResponse = await client.post("/wallet/provider/register", {
19715
- keyStorageType: "passkey",
19716
- credentialId,
19717
- blobUrl,
19718
- prfInput: {
19719
- projectId,
19720
- credentialId
19721
- },
19722
- address,
19723
- platform
19724
- // For UX hints when authenticating on different devices
19725
- });
19726
- debugLog("Step 8: Provider registered", {
19727
- providerId: registerResponse?.id,
19728
- hasUser: !!registerResponse?.user
19729
- });
19730
- } catch (err) {
19731
- debugLog("Step 8: Provider registration FAILED", {
19732
- error: err,
19733
- errorMessage: err instanceof Error ? err.message : String(err)
19734
- });
19735
- throw err;
19736
- }
19737
- debugLog("Enrollment completed successfully!", {
19738
- credentialId,
19739
- blobUrl,
19740
- address
19741
- });
19742
19599
  return {
19743
19600
  credentialId,
19744
19601
  blobUrl,
@@ -19752,7 +19609,6 @@ async function enrollPasskey(params) {
19752
19609
  user: registerResponse.user
19753
19610
  };
19754
19611
  } finally {
19755
- debugLog("Cleanup: Destroying master key handle");
19756
19612
  masterKeyHandle.destroy();
19757
19613
  }
19758
19614
  }