@privy-io/js-sdk-core 0.44.3 → 0.44.4-beta-20250227225449

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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../Error.js"),r=require("../chains/index.js"),t=require("../embedded/EmbeddedBitcoinWalletProvider.js"),o=require("../embedded/errors.js"),i=require("../embedded/utils/index.js"),d=require("../embedded/EmbeddedWalletProxy.js"),s=require("../embedded/EmbeddedWalletProvider.js"),a=require("../embedded/EmbeddedSolanaWalletProvider.js");require("../chains/arbitrum.js"),require("../chains/arbitrumGoerli.js"),require("../chains/arbitrumSepolia.js"),require("../chains/avalanche.js"),require("../chains/avalancheFuji.js"),require("../chains/base.js"),require("../chains/baseGoerli.js"),require("../chains/baseSepolia.js"),require("../chains/berachainArtio.js"),require("../chains/celo.js"),require("../chains/celoAlfajores.js"),require("../chains/filecoin.js"),require("../chains/filecoinCalibration.js"),require("../chains/garnetHolesky.js"),require("../chains/goerli.js"),require("../chains/holesky.js"),require("../chains/linea.js"),require("../chains/lineaTestnet.js"),require("../chains/mainnet.js"),require("../chains/optimism.js"),require("../chains/optimismGoerli.js"),require("../chains/optimismSepolia.js"),require("../chains/polygon.js"),require("../chains/polygonMumbai.js"),require("../chains/redstone.js"),require("../chains/redstoneHolesky.js"),require("../chains/sepolia.js"),require("../chains/zora.js"),require("../chains/zoraSepolia.js"),require("../chains/zoraTestnet.js"),require("../embedded/types.js"),require("@ethersproject/abstract-signer"),require("@ethersproject/providers"),require("../embedded/gas/arbitrum.js"),require("@ethersproject/bignumber"),require("../embedded/utils/ethers.js"),require("../embedded/gas/bsc.js"),require("../embedded/gas/op-stack.js"),require("@ethersproject/contracts"),require("@ethersproject/transactions"),require("../embedded/gas/polygon.js"),require("@ethersproject/units"),require("fetch-retry"),require("../chains/polygonAmoy.js"),require("../embedded/utils/gas.js"),require("../utils/sleep.js"),require("../embedded/EventCallbackQueue.js"),require("../embedded/withMfa.js"),require("eventemitter3"),require("../embedded/methods.js"),require("../solana/getWalletPublicKeyFromTransaction.js"),require("../solana/isVersionedTransaction.js");exports.default=class{setMessagePoster(e){this._proxy=new d.EmbeddedWalletProxy(e,this._mfaPromises),this._mfa.setProxy(this._proxy)}async add(r){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");let t=await this._privyInternal.getAccessToken();if(!t)throw new e.PrivyClientError({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});await this._proxy.addWallet({accessToken:t,...r});let{user:o}=await this._privyInternal.refreshSession();return{user:o}}async getBitcoinProvider({wallet:e,entropyId:r,entropyIdVerifier:o,recoveryPassword:i,recoveryAccessToken:d,recoverySecretOverride:s}){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");if(!await this._privyInternal.getAccessToken())throw Error("User must be logged in to create an embedded wallet");return await this._load({entropyId:r,entropyIdVerifier:o,wallet:e,recoveryPassword:i,recoveryAccessToken:d,recoverySecretOverride:s}),new t.EmbeddedBitcoinWalletProvider({account:e,privyInternal:this._privyInternal,proxy:this._proxy,entropyId:r,entropyIdVerifier:o})}async create({password:e,recoveryMethod:r,recoveryToken:t,recoveryKey:o,recoverySecretOverride:i,iCloudRecordNameOverride:d,solanaAccount:s,skipCallbacks:a}){let n;if(!this._proxy)throw Error("Embedded wallet proxy not initialized");if(n=r||(e?"user-passcode":"privy"),e&&"string"!=typeof e)throw Error("Invalid recovery password, must be a string");if("privy"===n&&this._privyInternal.config?.embedded_wallet_config.require_user_password_on_create)throw Error("Password not provided yet is required by App configuration");let c=await this._privyInternal.getAccessToken();if(!c)throw Error("User must be logged in to create an embedded wallet");let{address:l}=await this._proxy.create({accessToken:c,recoveryMethod:n,recoveryKey:o,recoveryPassword:e,recoveryAccessToken:t,recoverySecretOverride:i,iCloudRecordNameOverride:d,solanaAddress:s?.address});if(!l)throw Error("Failed to create wallet");return await this._privyInternal.refreshSession(a)}async createSolana(r){if(!this._proxy)throw new e.PrivyClientError({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_creation_error"});let t=await this._privyInternal.getAccessToken();if(!t)throw new e.PrivyClientError({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});r?.ethereumAccount&&await this.getProvider(r.ethereumAccount);let{publicKey:o}=await this._proxy.createSolana({accessToken:t,ethereumAddress:r?.ethereumAccount?.address});if(!o)throw new e.PrivyClientError({error:"Failed to create wallet",code:"embedded_wallet_creation_error"});return await this._privyInternal.refreshSession()}async delegateWallets({delegatedWallets:r,rootWallet:t}){if(!this._proxy)throw new e.PrivyClientError({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_creation_error"});let o=await this._privyInternal.getAccessToken();if(!o)throw new e.PrivyClientError({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});await this._proxy.delegateWallets({accessToken:o,delegatedWallets:r,rootWallet:t})}async getProvider(e,r,t,o,i){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");return await this._load({wallet:e,entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier",recoveryPassword:r,recoveryKey:i,recoveryAccessToken:t,recoverySecretOverride:o}),new s.EmbeddedWalletProvider({account:e,entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier",privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy})}async getEthereumProvider({wallet:e,entropyId:r,entropyIdVerifier:t,recoveryPassword:o,recoveryAccessToken:i,recoverySecretOverride:d,recoveryKey:a,onNeedsRecovery:n}){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");if(!await this._privyInternal.getAccessToken())throw Error("User must be logged in to create an embedded wallet");return(!n||o||i||d||a)&&await this._load({entropyId:r,entropyIdVerifier:t,wallet:e,recoveryPassword:o,recoveryAccessToken:i,recoverySecretOverride:d,recoveryKey:a}),new s.EmbeddedWalletProvider({account:e,entropyId:r,entropyIdVerifier:"ethereum-address-verifier",privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy,onNeedsRecovery:n})}async getSolanaProvider(r,t,o,i,d,s){if(!this._proxy)throw new e.PrivyClientError({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_webview_not_loaded"});return await this._load({wallet:r,entropyId:t,entropyIdVerifier:o,recoveryPassword:i,recoveryAccessToken:d,recoverySecretOverride:s}),new a.EmbeddedSolanaWalletProvider({publicKey:r.address,privyInternal:this._privyInternal,proxy:this._proxy,entropyId:t,entropyIdVerifier:o,hdWalletIndex:r.wallet_index})}async setRecovery(e){let{wallet:r,...t}=e;if(!this._proxy)throw Error("Embedded wallet proxy not initialized");i.throwIfInvalidRecoveryUpgradePath({currentRecoveryMethod:r.recovery_method,upgradeToRecoveryMethod:"icloud-native"===t.recoveryMethod?"icloud":t.recoveryMethod}),await this._load("solana"===r.chain_type?{wallet:r,entropyId:r.address,entropyIdVerifier:"solana-address-verifier"}:{wallet:r,entropyId:r.address,entropyIdVerifier:"ethereum-address-verifier"});let o=await this._privyInternal.getAccessToken();if(!o)throw Error("User must be logged in to interact with embedded wallets");let d=r.recovery_method;this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_started",{address:r.address,target_recovery_method:t.recoveryMethod,existing_recovery_method:d});try{let e;if("user-passcode"===t.recoveryMethod)e={recoveryMethod:"user-passcode",recoveryPassword:t.password};else if("google-drive"===t.recoveryMethod)e={recoveryMethod:"google-drive",recoveryAccessToken:t.recoveryAccessToken};else if("icloud"===t.recoveryMethod)e={recoveryMethod:"icloud",recoveryAccessToken:t.recoveryAccessToken};else if("icloud-native"===t.recoveryMethod)e={recoveryMethod:"icloud-native",iCloudRecordNameOverride:t.iCloudRecordNameOverride,recoverySecretOverride:t.recoverySecretOverride};else if("recovery-encryption-key"===t.recoveryMethod)e={recoveryMethod:"recovery-encryption-key",recoveryKey:t.recoveryKey};else{if("privy"!==t.recoveryMethod)throw Error(`Unknown recovery method: ${t.recoveryMethod}`);e={recoveryMethod:"privy"}}await this._proxy.setRecovery({accessToken:o,entropyId:r.address,entropyIdVerifier:"solana"===r.chain_type?"solana-address-verifier":"ethereum-address-verifier",...e}),this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_completed",{address:r.address,target_recovery_method:t.recoveryMethod,existing_recovery_method:d});let{user:i}=await this._privyInternal.refreshSession();return{user:i,provider:"ethereum"!==r.chain_type?null:new s.EmbeddedWalletProvider({account:r,entropyId:r.address,entropyIdVerifier:"ethereum-address-verifier",privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy})}}catch(e){throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_failed",{address:r.address,recovery_method:r.recovery_method,error:e instanceof Error?e.message:"Unable to recover wallet"}),e}}getURL(){let e=new URL(`${this._privyInternal.baseUrl}/apps/${this._privyInternal.appId}/embedded-wallets`);return this._privyInternal.caid&&e.searchParams.append("caid",this._privyInternal.caid),this._privyInternal.appClientId&&e.searchParams.append("client_id",this._privyInternal.appClientId),e.href}get chains(){return this._chains}onMessage(e){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");return this._proxy.handleEmbeddedWalletMessages(e)}async ping(e){try{if(!this._proxy)throw Error("Embedded wallet proxy not initialized");return await this._proxy.ping(e),!0}catch(e){return console.error(e),!1}}async _load({entropyId:e,entropyIdVerifier:r,wallet:t,recoveryPassword:i,recoveryKey:d,recoveryAccessToken:s,recoverySecretOverride:a}){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");let n=await this._privyInternal.getAccessToken();if(!n)throw Error("User must be logged in to interact with embedded wallets");try{return await this._proxy.connect({accessToken:n,entropyId:e,entropyIdVerifier:r}),e}catch(c){if(o.errorIndicatesRecoveryIsNeeded(c))try{if("privy"===t.recovery_method){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if("user-passcode"===t.recovery_method&&i){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,recoveryPassword:i,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if(["google-drive","icloud"].includes(t.recovery_method)&&s){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,recoveryAccessToken:s,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if("icloud"===t.recovery_method&&a){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:"icloud-native"});let o=await this._proxy.recover({accessToken:n,recoverySecretOverride:a,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:"icloud-native"}),o.entropyId}if("recovery-encryption-key"===t.recovery_method&&d){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,recoveryKey:d,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}}catch(r){throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_failed",{address:t.address,recovery_method:t.recovery_method,error:r instanceof Error?r.message:`Unable to recover wallet: ${e}`}),r}throw c}}constructor(e,t,o,i,s){this._chains=Array.from(r.DEFAULT_SUPPORTED_CHAINS),this._privyInternal=e,t&&(this._proxy=new d.EmbeddedWalletProxy(t,s),i.setProxy(this._proxy)),o&&(this._chains=o),this._mfa=i,this._mfaPromises=s}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../Error.js"),r=require("../chains/index.js"),t=require("../embedded/EmbeddedBitcoinWalletProvider.js"),o=require("../embedded/errors.js"),i=require("../embedded/utils/index.js"),d=require("../embedded/EmbeddedWalletProxy.js"),s=require("../embedded/EmbeddedWalletProvider.js"),a=require("../embedded/EmbeddedSolanaWalletProvider.js");require("../chains/arbitrum.js"),require("../chains/arbitrumGoerli.js"),require("../chains/arbitrumSepolia.js"),require("../chains/avalanche.js"),require("../chains/avalancheFuji.js"),require("../chains/base.js"),require("../chains/baseGoerli.js"),require("../chains/baseSepolia.js"),require("../chains/berachainArtio.js"),require("../chains/celo.js"),require("../chains/celoAlfajores.js"),require("../chains/filecoin.js"),require("../chains/filecoinCalibration.js"),require("../chains/garnetHolesky.js"),require("../chains/goerli.js"),require("../chains/holesky.js"),require("../chains/linea.js"),require("../chains/lineaTestnet.js"),require("../chains/mainnet.js"),require("../chains/optimism.js"),require("../chains/optimismGoerli.js"),require("../chains/optimismSepolia.js"),require("../chains/polygon.js"),require("../chains/polygonMumbai.js"),require("../chains/redstone.js"),require("../chains/redstoneHolesky.js"),require("../chains/sepolia.js"),require("../chains/zora.js"),require("../chains/zoraSepolia.js"),require("../chains/zoraTestnet.js"),require("../embedded/types.js"),require("@ethersproject/abstract-signer"),require("@ethersproject/providers"),require("../embedded/gas/arbitrum.js"),require("@ethersproject/bignumber"),require("../embedded/utils/ethers.js"),require("../embedded/gas/bsc.js"),require("../embedded/gas/op-stack.js"),require("@ethersproject/contracts"),require("@ethersproject/transactions"),require("../embedded/gas/polygon.js"),require("@ethersproject/units"),require("fetch-retry"),require("../chains/polygonAmoy.js"),require("../embedded/utils/gas.js"),require("../utils/sleep.js"),require("../embedded/EventCallbackQueue.js"),require("../embedded/withMfa.js"),require("eventemitter3"),require("../embedded/methods.js"),require("../solana/getWalletPublicKeyFromTransaction.js"),require("../solana/isVersionedTransaction.js");exports.default=class{setMessagePoster(e){this._proxy=new d.EmbeddedWalletProxy(e,this._mfaPromises),this._mfa.setProxy(this._proxy)}async add(r){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");let t=await this._privyInternal.getAccessToken();if(!t)throw new e.PrivyClientError({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});await this._proxy.addWallet({accessToken:t,...r});let{user:o}=await this._privyInternal.refreshSession();return{user:o}}async getBitcoinProvider({wallet:e,entropyId:r,entropyIdVerifier:o,recoveryPassword:i,recoveryAccessToken:d,recoverySecretOverride:s}){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");if(!await this._privyInternal.getAccessToken())throw Error("User must be logged in to create an embedded wallet");return await this._load({entropyId:r,entropyIdVerifier:o,wallet:e,recoveryPassword:i,recoveryAccessToken:d,recoverySecretOverride:s}),new t.EmbeddedBitcoinWalletProvider({account:e,privyInternal:this._privyInternal,proxy:this._proxy,entropyId:r,entropyIdVerifier:o})}async create({password:e,recoveryMethod:r,recoveryToken:t,recoveryKey:o,recoverySecretOverride:i,iCloudRecordNameOverride:d,solanaAccount:s,skipCallbacks:a}){let n;if(!this._proxy)throw Error("Embedded wallet proxy not initialized");if(n=r||(e?"user-passcode":"privy"),e&&"string"!=typeof e)throw Error("Invalid recovery password, must be a string");if("privy"===n&&this._privyInternal.config?.embedded_wallet_config.require_user_password_on_create)throw Error("Password not provided yet is required by App configuration");let c=await this._privyInternal.getAccessToken();if(!c)throw Error("User must be logged in to create an embedded wallet");let{address:l}=await this._proxy.create({accessToken:c,recoveryMethod:n,recoveryKey:o,recoveryPassword:e,recoveryAccessToken:t,recoverySecretOverride:i,iCloudRecordNameOverride:d,solanaAddress:s?.address});if(!l)throw Error("Failed to create wallet");return await this._privyInternal.refreshSession(a)}async createSolana(r){if(!this._proxy)throw new e.PrivyClientError({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_creation_error"});let t=await this._privyInternal.getAccessToken();if(!t)throw new e.PrivyClientError({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});r?.ethereumAccount&&await this.getProvider(r.ethereumAccount);let{publicKey:o}=await this._proxy.createSolana({accessToken:t,ethereumAddress:r?.ethereumAccount?.address});if(!o)throw new e.PrivyClientError({error:"Failed to create wallet",code:"embedded_wallet_creation_error"});return await this._privyInternal.refreshSession()}async delegateWallets({delegatedWallets:r,rootWallet:t}){if(!this._proxy)throw new e.PrivyClientError({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_creation_error"});let o=await this._privyInternal.getAccessToken();if(!o)throw new e.PrivyClientError({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});await this._proxy.delegateWallets({accessToken:o,delegatedWallets:r,rootWallet:t})}async getProvider(e,r,t,o,i){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");return await this._load({wallet:e,entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier",recoveryPassword:r,recoveryKey:i,recoveryAccessToken:t,recoverySecretOverride:o}),new s.EmbeddedWalletProvider({account:e,entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier",privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy})}async getEthereumProvider({wallet:e,entropyId:r,entropyIdVerifier:t,recoveryPassword:o,recoveryAccessToken:i,recoverySecretOverride:d,recoveryKey:a,onNeedsRecovery:n}){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");if(!await this._privyInternal.getAccessToken())throw Error("User must be logged in to create an embedded wallet");return(!n||o||i||d||a)&&await this._load({entropyId:r,entropyIdVerifier:t,wallet:e,recoveryPassword:o,recoveryAccessToken:i,recoverySecretOverride:d,recoveryKey:a}),new s.EmbeddedWalletProvider({account:e,entropyId:r,entropyIdVerifier:"ethereum-address-verifier",privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy,onNeedsRecovery:n})}async getSolanaProvider(r,t,o,i,d,s,n){if(!this._proxy)throw new e.PrivyClientError({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_webview_not_loaded"});return(!n||i||d||s)&&await this._load({wallet:r,entropyId:t,entropyIdVerifier:o,recoveryPassword:i,recoveryAccessToken:d,recoverySecretOverride:s}),new a.EmbeddedSolanaWalletProvider({account:r,privyInternal:this._privyInternal,proxy:this._proxy,entropyId:t,entropyIdVerifier:o})}async setRecovery(e){let{wallet:r,...t}=e;if(!this._proxy)throw Error("Embedded wallet proxy not initialized");i.throwIfInvalidRecoveryUpgradePath({currentRecoveryMethod:r.recovery_method,upgradeToRecoveryMethod:"icloud-native"===t.recoveryMethod?"icloud":t.recoveryMethod}),await this._load("solana"===r.chain_type?{wallet:r,entropyId:r.address,entropyIdVerifier:"solana-address-verifier"}:{wallet:r,entropyId:r.address,entropyIdVerifier:"ethereum-address-verifier"});let o=await this._privyInternal.getAccessToken();if(!o)throw Error("User must be logged in to interact with embedded wallets");let d=r.recovery_method;this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_started",{address:r.address,target_recovery_method:t.recoveryMethod,existing_recovery_method:d});try{let e;if("user-passcode"===t.recoveryMethod)e={recoveryMethod:"user-passcode",recoveryPassword:t.password};else if("google-drive"===t.recoveryMethod)e={recoveryMethod:"google-drive",recoveryAccessToken:t.recoveryAccessToken};else if("icloud"===t.recoveryMethod)e={recoveryMethod:"icloud",recoveryAccessToken:t.recoveryAccessToken};else if("icloud-native"===t.recoveryMethod)e={recoveryMethod:"icloud-native",iCloudRecordNameOverride:t.iCloudRecordNameOverride,recoverySecretOverride:t.recoverySecretOverride};else if("recovery-encryption-key"===t.recoveryMethod)e={recoveryMethod:"recovery-encryption-key",recoveryKey:t.recoveryKey};else{if("privy"!==t.recoveryMethod)throw Error(`Unknown recovery method: ${t.recoveryMethod}`);e={recoveryMethod:"privy"}}await this._proxy.setRecovery({accessToken:o,entropyId:r.address,entropyIdVerifier:"solana"===r.chain_type?"solana-address-verifier":"ethereum-address-verifier",...e}),this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_completed",{address:r.address,target_recovery_method:t.recoveryMethod,existing_recovery_method:d});let{user:i}=await this._privyInternal.refreshSession();return{user:i,provider:"ethereum"!==r.chain_type?null:new s.EmbeddedWalletProvider({account:r,entropyId:r.address,entropyIdVerifier:"ethereum-address-verifier",privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy})}}catch(e){throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_failed",{address:r.address,recovery_method:r.recovery_method,error:e instanceof Error?e.message:"Unable to recover wallet"}),e}}getURL(){let e=new URL(`${this._privyInternal.baseUrl}/apps/${this._privyInternal.appId}/embedded-wallets`);return this._privyInternal.caid&&e.searchParams.append("caid",this._privyInternal.caid),this._privyInternal.appClientId&&e.searchParams.append("client_id",this._privyInternal.appClientId),e.href}get chains(){return this._chains}onMessage(e){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");return this._proxy.handleEmbeddedWalletMessages(e)}async ping(e){try{if(!this._proxy)throw Error("Embedded wallet proxy not initialized");return await this._proxy.ping(e),!0}catch(e){return console.error(e),!1}}async _load({entropyId:e,entropyIdVerifier:r,wallet:t,recoveryPassword:i,recoveryKey:d,recoveryAccessToken:s,recoverySecretOverride:a}){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");let n=await this._privyInternal.getAccessToken();if(!n)throw Error("User must be logged in to interact with embedded wallets");try{return await this._proxy.connect({accessToken:n,entropyId:e,entropyIdVerifier:r}),e}catch(c){if(o.errorIndicatesRecoveryIsNeeded(c))try{if("privy"===t.recovery_method){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if("user-passcode"===t.recovery_method&&i){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,recoveryPassword:i,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if(["google-drive","icloud"].includes(t.recovery_method)&&s){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,recoveryAccessToken:s,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if("icloud"===t.recovery_method&&a){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:"icloud-native"});let o=await this._proxy.recover({accessToken:n,recoverySecretOverride:a,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:"icloud-native"}),o.entropyId}if("recovery-encryption-key"===t.recovery_method&&d){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,recoveryKey:d,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}}catch(r){throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_failed",{address:t.address,recovery_method:t.recovery_method,error:r instanceof Error?r.message:`Unable to recover wallet: ${e}`}),r}throw c}}constructor(e,t,o,i,s){this._chains=Array.from(r.DEFAULT_SUPPORTED_CHAINS),this._privyInternal=e,t&&(this._proxy=new d.EmbeddedWalletProxy(t,s),i.setProxy(this._proxy)),o&&(this._chains=o),this._mfa=i,this._mfaPromises=s}};
@@ -1 +1 @@
1
- "use strict";var e=require("fetch-retry"),t=require("uuid"),s=require("@privy-io/api-base"),i=require("@privy-io/public-api"),r=require("../Error.js"),a=require("../Session.js"),n=require("../toAbortSignalTimeout.js"),o=require("../utils/toSearchParams.js");function h(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("eventemitter3"),require("jose"),require("js-cookie"),require("../Token.js"),require("../utils/allSettled.js");var l=/*#__PURE__*/h(e);let c="privy:caid";exports.PrivyInternal=class{setCallbacks(e){this.callbacks={...this.callbacks,...e}}get isReady(){return!!this._config}get config(){return this._config}get caid(){return this._analyticsId}async _initialize(){if(this.isReady)this.callbacks?.setIsReady?.(!0);else{if(!await this.isStorageAccessible())throw new r.PrivyClientError({code:"storage_error",error:"Unable to access storage"});this._config=await this.getAppConfig(),this._config?.custom_api_url&&(this.baseUrl=this._config.custom_api_url,this.session.isUsingServerCookies=!0),this.callbacks?.setIsReady?.(!0),this.createAnalyticsEvent("sdk_initialize",{})}}async fetch(e,{body:t,params:s,query:a,headers:n,options:h={onRequest:this._beforeRequest.bind(this)}}){let l=new Request(`${this.baseUrl}${i.getPathWithParams(e.path,s)}${o.toSearchParams(a)}`,{method:e.method,body:JSON.stringify(t),headers:n}),c=await h.onRequest(l),d=await this._fetch(l,c),u=await d.json();if(d.status>299)throw new r.PrivyApiError(u);return u}async _beforeRequestWithoutInitialize(e){let t=await this.session.getToken(),s=new Headers(e.headers);s.set("privy-app-id",this.appId),this.appClientId&&s.set("privy-client-id",this.appClientId),s.set("privy-client",this._sdkVersion),t&&s.set("Authorization",`Bearer ${t}`),s.set("Content-Type","application/json"),s.set("Accept","application/json");let i=await this._getOrGenerateClientAnalyticsId();return i&&s.set("privy-ca-id",i),this.nativeAppIdentifier&&s.set("x-native-app-identifier",this.nativeAppIdentifier),{signal:n.default(2e4),headers:s,credentials:"include"}}async beforeRequestWithoutRefresh(e){return await this._initialize(),this._beforeRequestWithoutInitialize(e)}async _beforeRequest(e){return await this._initialize(),await this.getAccessToken(),this.beforeRequestWithoutRefresh(e)}async getAppConfig(){return await this.fetch(i.AppConfig,{params:{app_id:this.appId},options:{onRequest:this._beforeRequestWithoutInitialize.bind(this)}})}async _getOrGenerateClientAnalyticsId(){if(this._analyticsId)return this._analyticsId;try{let e=await this._storage.get(c);if("string"==typeof e&&e.length>0)return this._analyticsId=e,e}catch(e){console.error("Unable to load clientId",e)}try{this._analyticsId=t.v4()}catch(e){console.error("Unable to generate uuidv4",e)}if(!this._analyticsId)return null;try{await this._storage.put(c,this._analyticsId)}catch(e){console.error(`Unable to store clientId: ${this._analyticsId}`,e)}return this._analyticsId}async destroyClientAnalyticsId(){try{return await this._storage.del(c)}catch(e){console.error("Unable to delete clientId",e)}}async createAnalyticsEvent(e,t){try{await this.fetch(i.AnalyticsEvent,{body:{event_name:e,client_id:await this._getOrGenerateClientAnalyticsId(),payload:t},options:{onRequest:this.beforeRequestWithoutRefresh.bind(this)}})}catch(e){}}async refreshSession(e=!1){let t=await this.session.getRefreshToken()??void 0,s=t??"key",i=this._cache.get(s);if(i)return console.debug("Found in-flight session refresh request, deduping"),await i;let r=this._refreshSession(t,e);this._cache.set(s,r);try{return await r}finally{this._cache.delete(s)}}async _refreshSession(e,t){let a=await this.session.getToken();if(!this.session.hasRefreshCredentials(a,e??null))throw this.debug("[privy:refresh] missing tokens, skipping request"),await this._initialize(),new r.PrivyApiError({code:s.PrivyErrorCode.MISSING_OR_INVALID_TOKEN,error:"No tokens found in storage"});try{this.debug(`[privy:refresh] fetching: ${i.RefreshSession.path}`);let s=await this.fetch(i.RefreshSession,{body:{refresh_token:e},options:{onRequest:this.beforeRequestWithoutRefresh.bind(this)}}),r=s.session_update_action;return this.debug(`[privy:refresh] response: ${r}`),t||this.callbacks?.setUser?.(s.user),"set"===r&&(await this.session.updateWithTokensResponse(s),this.debug("[privy:refresh] tokens stored")),"clear"===r&&(await this.session.destroyLocalState(),this.debug("[privy:refresh] tokens cleared"),t||this.callbacks?.setUser?.(null)),"ignore"===r&&s.token&&(await this.session.storeToken(s.token),this.debug("[privy:refresh] access token stored"),s.identity_token&&(this.debug("[privy:refresh] identity token stored"),await this.session.storeIdentityToken(s.identity_token))),this.debug("[privy:refresh] returning response"),s}catch(e){throw this.debug(`[privy:refresh] error: ${e.message??"unknown error"}`),e instanceof r.PrivyApiError&&e.code===s.PrivyErrorCode.MISSING_OR_INVALID_TOKEN&&(await this.session.destroyLocalState(),t||this.callbacks?.setUser?.(null)),e}}async getAccessToken(){let[e,t]=await Promise.all([this.session.getToken(),this.session.getRefreshToken()]);return!this.session.tokenIsActive(e)&&this.session.hasRefreshCredentials(e,t)?(await this.refreshSession(),await this.session.getToken()):e}async getIdentityToken(){return await this.session.getIdentityToken()}async isStorageAccessible(){try{let e=`privy:__storage__test-${t.v4()}`,s="blobby";await this._storage.put(e,s);let i=await this._storage.get(e);return await this._storage.del(e),i===s}catch(e){return console.error(e),!1}}debug(e){"DEBUG"===this._logLevel&&console.debug(e)}constructor(e){this._sdkVersion="js-sdk-core:0.44.3",this._cache=new Map,this._storage=e.storage,this._analyticsId=null,this._getOrGenerateClientAnalyticsId(),this.baseUrl=e.baseUrl??"https://auth.privy.io",this.appId=e.appId,this.appClientId=e.appClientId,this._sdkVersion=e.sdkVersion??this._sdkVersion,this._logLevel=e.logLevel,this.callbacks=e.callbacks,this.nativeAppIdentifier=e.nativeAppIdentifier,this.session=new a.Session({storage:this._storage,isUsingServerCookies:!1,appId:e.appId}),this._fetch=l.default(fetch,{retries:3,retryDelay:500}),this.session.on("error_storing_tokens",(e=>{this.createAnalyticsEvent("error_updating_tokens_in_storage",{reason:e})}))}};
1
+ "use strict";var e=require("fetch-retry"),t=require("uuid"),s=require("@privy-io/api-base"),i=require("@privy-io/public-api"),r=require("../Error.js"),a=require("../Session.js"),n=require("../toAbortSignalTimeout.js"),o=require("../utils/toSearchParams.js");function h(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("eventemitter3"),require("jose"),require("js-cookie"),require("../Token.js"),require("../utils/allSettled.js");var l=/*#__PURE__*/h(e);let c="privy:caid";exports.PrivyInternal=class{setCallbacks(e){this.callbacks={...this.callbacks,...e}}get isReady(){return!!this._config}get config(){return this._config}get caid(){return this._analyticsId}async _initialize(){if(this.isReady)this.callbacks?.setIsReady?.(!0);else{if(!await this.isStorageAccessible())throw new r.PrivyClientError({code:"storage_error",error:"Unable to access storage"});this._config=await this.getAppConfig(),this._config?.custom_api_url&&(this.baseUrl=this._config.custom_api_url,this.session.isUsingServerCookies=!0),this.callbacks?.setIsReady?.(!0),this.createAnalyticsEvent("sdk_initialize",{})}}async fetch(e,{body:t,params:s,query:a,headers:n,options:h={onRequest:this._beforeRequest.bind(this)}}){let l=new Request(`${this.baseUrl}${i.getPathWithParams(e.path,s)}${o.toSearchParams(a)}`,{method:e.method,body:JSON.stringify(t),headers:n}),c=await h.onRequest(l),d=await this._fetch(l,c),u=await d.json();if(d.status>299)throw new r.PrivyApiError(u);return u}async _beforeRequestWithoutInitialize(e){let t=await this.session.getToken(),s=new Headers(e.headers);s.set("privy-app-id",this.appId),this.appClientId&&s.set("privy-client-id",this.appClientId),s.set("privy-client",this._sdkVersion),t&&s.set("Authorization",`Bearer ${t}`),s.set("Content-Type","application/json"),s.set("Accept","application/json");let i=await this._getOrGenerateClientAnalyticsId();return i&&s.set("privy-ca-id",i),this.nativeAppIdentifier&&s.set("x-native-app-identifier",this.nativeAppIdentifier),{signal:n.default(2e4),headers:s,credentials:"include"}}async beforeRequestWithoutRefresh(e){return await this._initialize(),this._beforeRequestWithoutInitialize(e)}async _beforeRequest(e){return await this._initialize(),await this.getAccessToken(),this.beforeRequestWithoutRefresh(e)}async getAppConfig(){return await this.fetch(i.AppConfig,{params:{app_id:this.appId},options:{onRequest:this._beforeRequestWithoutInitialize.bind(this)}})}async _getOrGenerateClientAnalyticsId(){if(this._analyticsId)return this._analyticsId;try{let e=await this._storage.get(c);if("string"==typeof e&&e.length>0)return this._analyticsId=e,e}catch(e){console.error("Unable to load clientId",e)}try{this._analyticsId=t.v4()}catch(e){console.error("Unable to generate uuidv4",e)}if(!this._analyticsId)return null;try{await this._storage.put(c,this._analyticsId)}catch(e){console.error(`Unable to store clientId: ${this._analyticsId}`,e)}return this._analyticsId}async destroyClientAnalyticsId(){try{return await this._storage.del(c)}catch(e){console.error("Unable to delete clientId",e)}}async createAnalyticsEvent(e,t){try{await this.fetch(i.AnalyticsEvent,{body:{event_name:e,client_id:await this._getOrGenerateClientAnalyticsId(),payload:t},options:{onRequest:this.beforeRequestWithoutRefresh.bind(this)}})}catch(e){}}async refreshSession(e=!1){let t=await this.session.getRefreshToken()??void 0,s=t??"key",i=this._cache.get(s);if(i)return console.debug("Found in-flight session refresh request, deduping"),await i;let r=this._refreshSession(t,e);this._cache.set(s,r);try{return await r}finally{this._cache.delete(s)}}async _refreshSession(e,t){let a=await this.session.getToken();if(!this.session.hasRefreshCredentials(a,e??null))throw this.debug("[privy:refresh] missing tokens, skipping request"),await this._initialize(),new r.PrivyApiError({code:s.PrivyErrorCode.MISSING_OR_INVALID_TOKEN,error:"No tokens found in storage"});try{this.debug(`[privy:refresh] fetching: ${i.RefreshSession.path}`);let s=await this.fetch(i.RefreshSession,{body:{refresh_token:e},options:{onRequest:this.beforeRequestWithoutRefresh.bind(this)}}),r=s.session_update_action;return this.debug(`[privy:refresh] response: ${r}`),t||this.callbacks?.setUser?.(s.user),"set"===r&&(await this.session.updateWithTokensResponse(s),this.debug("[privy:refresh] tokens stored")),"clear"===r&&(await this.session.destroyLocalState(),this.debug("[privy:refresh] tokens cleared"),t||this.callbacks?.setUser?.(null)),"ignore"===r&&s.token&&(await this.session.storeToken(s.token),this.debug("[privy:refresh] access token stored"),s.identity_token&&(this.debug("[privy:refresh] identity token stored"),await this.session.storeIdentityToken(s.identity_token))),this.debug("[privy:refresh] returning response"),s}catch(e){throw this.debug(`[privy:refresh] error: ${e.message??"unknown error"}`),e instanceof r.PrivyApiError&&e.code===s.PrivyErrorCode.MISSING_OR_INVALID_TOKEN&&(await this.session.destroyLocalState(),t||this.callbacks?.setUser?.(null)),e}}async getAccessToken(){let[e,t]=await Promise.all([this.session.getToken(),this.session.getRefreshToken()]);return!this.session.tokenIsActive(e)&&this.session.hasRefreshCredentials(e,t)?(await this.refreshSession(),await this.session.getToken()):e}async getIdentityToken(){return await this.session.getIdentityToken()}async isStorageAccessible(){try{let e=`privy:__storage__test-${t.v4()}`,s="blobby";await this._storage.put(e,s);let i=await this._storage.get(e);return await this._storage.del(e),i===s}catch(e){return console.error(e),!1}}debug(e){"DEBUG"===this._logLevel&&console.debug(e)}constructor(e){this._sdkVersion="js-sdk-core:0.44.4-beta-20250227225449",this._cache=new Map,this._storage=e.storage,this._analyticsId=null,this._getOrGenerateClientAnalyticsId(),this.baseUrl=e.baseUrl??"https://auth.privy.io",this.appId=e.appId,this.appClientId=e.appClientId,this._sdkVersion=e.sdkVersion??this._sdkVersion,this._logLevel=e.logLevel,this.callbacks=e.callbacks,this.nativeAppIdentifier=e.nativeAppIdentifier,this.session=new a.Session({storage:this._storage,isUsingServerCookies:!1,appId:e.appId}),this._fetch=l.default(fetch,{retries:3,retryDelay:500}),this.session.on("error_storing_tokens",(e=>{this.createAnalyticsEvent("error_updating_tokens_in_storage",{reason:e})}))}};
@@ -1 +1 @@
1
- "use strict";var e=require("../Error.js"),r=require("../solana/getWalletPublicKeyFromTransaction.js"),t=require("../solana/isVersionedTransaction.js");exports.EmbeddedSolanaWalletProvider=class{async request(r){if(!await this._privyInternal.getAccessToken())throw new e.PrivyClientError({error:"Missing access token",code:"attempted_rpc_call_before_logged_in"});switch(r.method){case"signAndSendTransaction":return await this.handleSignAndSendTransaction(r);case"signTransaction":return await this.handleSignTransaction(r);default:return await this.handleIFrameRpc(r)}}async handleIFrameRpc(r){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:r.method,address:this._publicKey}),(await this._proxy.rpcWallet({accessToken:e,request:r,chainType:"solana",hdWalletIndex:this._hdWalletIndex,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier})).response.data}catch(t){console.error(t);let a=t instanceof Error?t.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:r.method,address:this._publicKey,error:a}),new e.PrivyClientError({code:"embedded_wallet_request_error",error:a})}}async handleSignAndSendTransaction(a){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:a.method,address:this._publicKey});let{transaction:s,connection:i,options:n}=a.params,o=r.getWalletPublicKeyFromTransaction(s,this._publicKey),d=t.isVersionedTransaction(s)?Buffer.from(s.message.serialize()):s.serializeMessage(),l=(await this._proxy.rpcWallet({accessToken:e,chainType:"solana",hdWalletIndex:this._hdWalletIndex,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,request:{method:"signMessage",params:{message:d.toString("base64")}}})).response.data.signature;return s.addSignature(o,Buffer.from(l,"base64")),{signature:await i.sendRawTransaction(s.serialize(),n)}}catch(r){console.error(r);let t=r instanceof Error?r.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:a.method,address:this._publicKey,error:t}),new e.PrivyClientError({code:"embedded_wallet_request_error",error:t})}}async handleSignTransaction(a){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:a.method,address:this._publicKey});let{transaction:s}=a.params,i=r.getWalletPublicKeyFromTransaction(s,this._publicKey),n=t.isVersionedTransaction(s)?Buffer.from(s.message.serialize()):s.serializeMessage(),o=(await this._proxy.rpcWallet({accessToken:e,chainType:"solana",hdWalletIndex:this._hdWalletIndex,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,request:{method:"signMessage",params:{message:n.toString("base64")}}})).response.data.signature;return s.addSignature(i,Buffer.from(o,"base64")),{signedTransaction:s}}catch(r){console.error(r);let t=r instanceof Error?r.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:a.method,address:this._publicKey,error:t}),new e.PrivyClientError({code:"embedded_wallet_request_error",error:t})}}toJSON(){return`PrivyEmbeddedSolanaProvider { address: '${this._publicKey}', request: [Function] }`}constructor({proxy:e,privyInternal:r,publicKey:t,hdWalletIndex:a,entropyId:s,entropyIdVerifier:i}){this._proxy=e,this._privyInternal=r,this._publicKey=t,this._hdWalletIndex=a,this._entropyId=s,this._entropyIdVerifier=i}};
1
+ "use strict";var e=require("../Error.js"),r=require("../solana/getWalletPublicKeyFromTransaction.js"),t=require("../solana/isVersionedTransaction.js"),s=require("./errors.js");require("./types.js");exports.EmbeddedSolanaWalletProvider=class{async request(r){if(!await this._privyInternal.getAccessToken())throw new e.PrivyClientError({error:"Missing access token",code:"attempted_rpc_call_before_logged_in"});switch(r.method){case"signAndSendTransaction":return await this.handleSignAndSendTransaction(r);case"signTransaction":return await this.handleSignTransaction(r);default:return await this.handleIFrameRpc(r)}}get _publicKey(){return this._account.address}async handleIFrameRpc(r){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:r.method,address:this._account.address});try{await this._proxy.connect({entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,accessToken:e})}catch(r){let t=s.errorIndicatesRecoveryIsNeeded(r);if(t&&"privy"===this._account.recovery_method)await this._proxy.recover({entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,accessToken:e});else{if(!t||!this._onNeedsRecovery)throw r;{let e;await new Promise((async(r,t)=>{e=setTimeout(t,12e4),await(this._onNeedsRecovery?.({recoveryMethod:this._account.recovery_method,onRecovered:()=>r(!0)}))})).finally((()=>clearTimeout(e)))}}}return(await this._proxy.rpcWallet({accessToken:e,request:r,chainType:"solana",hdWalletIndex:this._account.wallet_index,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier})).response.data}catch(t){console.error(t);let s=t instanceof Error?t.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:r.method,address:this._account.address,error:s}),new e.PrivyClientError({code:"embedded_wallet_request_error",error:s})}}async handleSignAndSendTransaction(s){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:s.method,address:this._account.address});let{transaction:a,connection:n,options:i}=s.params,o=r.getWalletPublicKeyFromTransaction(a,this._account.address),d=t.isVersionedTransaction(a)?Buffer.from(a.message.serialize()):a.serializeMessage(),c=(await this._proxy.rpcWallet({accessToken:e,chainType:"solana",hdWalletIndex:this._account.wallet_index,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,request:{method:"signMessage",params:{message:d.toString("base64")}}})).response.data.signature;return a.addSignature(o,Buffer.from(c,"base64")),{signature:await n.sendRawTransaction(a.serialize(),i)}}catch(r){console.error(r);let t=r instanceof Error?r.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:s.method,address:this._account.address,error:t}),new e.PrivyClientError({code:"embedded_wallet_request_error",error:t})}}async handleSignTransaction(s){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:s.method,address:this._account.address});let{transaction:a}=s.params,n=r.getWalletPublicKeyFromTransaction(a,this._account.address),i=t.isVersionedTransaction(a)?Buffer.from(a.message.serialize()):a.serializeMessage(),o=(await this._proxy.rpcWallet({accessToken:e,chainType:"solana",hdWalletIndex:this._account.wallet_index,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,request:{method:"signMessage",params:{message:i.toString("base64")}}})).response.data.signature;return a.addSignature(n,Buffer.from(o,"base64")),{signedTransaction:a}}catch(r){console.error(r);let t=r instanceof Error?r.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:s.method,address:this._account.wallet_index,error:t}),new e.PrivyClientError({code:"embedded_wallet_request_error",error:t})}}toJSON(){return`PrivyEmbeddedSolanaProvider { address: '${this._account.address}', request: [Function] }`}constructor({proxy:e,privyInternal:r,account:t,entropyId:s,entropyIdVerifier:a,onNeedsRecovery:n}){this._proxy=e,this._privyInternal=r,this._account=t,this._entropyId=s,this._entropyIdVerifier=a,this._onNeedsRecovery=n}};
@@ -832,7 +832,13 @@ declare class AppApi {
832
832
  wallet_connect_cloud_project_id: string | null;
833
833
  custom_api_url: string | null;
834
834
  embedded_wallet_config: {
835
+ solana: {
836
+ create_on_login: "users-without-wallets" | "all-users" | "off";
837
+ };
835
838
  create_on_login: "users-without-wallets" | "all-users" | "off";
839
+ ethereum: {
840
+ create_on_login: "users-without-wallets" | "all-users" | "off";
841
+ };
836
842
  user_owned_recovery_options: ("user-passcode" | "google-drive" | "icloud")[];
837
843
  require_user_owned_recovery_on_create?: boolean | undefined;
838
844
  require_user_password_on_create?: boolean | undefined;
@@ -961,12 +967,6 @@ type SignTransactionRequestArguments<T extends Transaction | VersionedTransactio
961
967
  * Currently only supports signing messages.
962
968
  */
963
969
  declare class EmbeddedSolanaWalletProvider {
964
- /**
965
- * Legacy API for reading the public key for this provider.
966
- *
967
- * @deprecated
968
- */
969
- readonly _publicKey: string;
970
970
  request(request: SignMessageRequestArguments): Promise<{
971
971
  signature: string;
972
972
  }>;
@@ -976,6 +976,12 @@ declare class EmbeddedSolanaWalletProvider {
976
976
  request<T extends Transaction | VersionedTransaction>(request: SignTransactionRequestArguments<T>): Promise<{
977
977
  signedTransaction: T;
978
978
  }>;
979
+ /**
980
+ * Legacy API for reading the public key for this provider.
981
+ *
982
+ * @deprecated
983
+ */
984
+ get _publicKey(): string;
979
985
  private handleIFrameRpc;
980
986
  private handleSignAndSendTransaction;
981
987
  private handleSignTransaction;
@@ -1391,7 +1397,7 @@ declare class EmbeddedWalletApi {
1391
1397
  * const provider = await getEthereumProvider({
1392
1398
  * onNeedsRecovery: async ({recoveryMethod, onRecovered}) => {
1393
1399
  * await promptRecovery({recoveryMethod})
1394
- * onRecovered();
1400
+ * onRecovered();
1395
1401
  * },
1396
1402
  * })
1397
1403
  */
@@ -1403,7 +1409,20 @@ declare class EmbeddedWalletApi {
1403
1409
  *
1404
1410
  * @returns EmbeddedSolanaWalletProvider
1405
1411
  */
1406
- getSolanaProvider(account: PrivySolanaEmbeddedWalletAccount$1, entropyId: string, entropyIdVerifier: EntropyIdVerifier, recoveryPassword?: string, recoveryAccessToken?: string, recoverySecretOverride?: string): Promise<EmbeddedSolanaWalletProvider>;
1412
+ getSolanaProvider(account: PrivySolanaEmbeddedWalletAccount$1, entropyId: string, entropyIdVerifier: EntropyIdVerifier, recoveryPassword?: string, recoveryAccessToken?: string, recoverySecretOverride?: string,
1413
+ /**
1414
+ * A function that will get called anytime the secure context throws an error that
1415
+ * indicates recover is required (i.e. on-demand recovery)
1416
+ *
1417
+ * @example
1418
+ * const provider = await getEthereumProvider({
1419
+ * onNeedsRecovery: async ({recoveryMethod, onRecovered}) => {
1420
+ * await promptRecovery({recoveryMethod})
1421
+ * onRecovered();
1422
+ * },
1423
+ * })
1424
+ */
1425
+ onNeedsRecovery?: OnNeedsRecovery): Promise<EmbeddedSolanaWalletProvider>;
1407
1426
  /**
1408
1427
  * Add or change the recovery method used to recover an embedded wallet.
1409
1428
  *
@@ -832,7 +832,13 @@ declare class AppApi {
832
832
  wallet_connect_cloud_project_id: string | null;
833
833
  custom_api_url: string | null;
834
834
  embedded_wallet_config: {
835
+ solana: {
836
+ create_on_login: "users-without-wallets" | "all-users" | "off";
837
+ };
835
838
  create_on_login: "users-without-wallets" | "all-users" | "off";
839
+ ethereum: {
840
+ create_on_login: "users-without-wallets" | "all-users" | "off";
841
+ };
836
842
  user_owned_recovery_options: ("user-passcode" | "google-drive" | "icloud")[];
837
843
  require_user_owned_recovery_on_create?: boolean | undefined;
838
844
  require_user_password_on_create?: boolean | undefined;
@@ -961,12 +967,6 @@ type SignTransactionRequestArguments<T extends Transaction | VersionedTransactio
961
967
  * Currently only supports signing messages.
962
968
  */
963
969
  declare class EmbeddedSolanaWalletProvider {
964
- /**
965
- * Legacy API for reading the public key for this provider.
966
- *
967
- * @deprecated
968
- */
969
- readonly _publicKey: string;
970
970
  request(request: SignMessageRequestArguments): Promise<{
971
971
  signature: string;
972
972
  }>;
@@ -976,6 +976,12 @@ declare class EmbeddedSolanaWalletProvider {
976
976
  request<T extends Transaction | VersionedTransaction>(request: SignTransactionRequestArguments<T>): Promise<{
977
977
  signedTransaction: T;
978
978
  }>;
979
+ /**
980
+ * Legacy API for reading the public key for this provider.
981
+ *
982
+ * @deprecated
983
+ */
984
+ get _publicKey(): string;
979
985
  private handleIFrameRpc;
980
986
  private handleSignAndSendTransaction;
981
987
  private handleSignTransaction;
@@ -1391,7 +1397,7 @@ declare class EmbeddedWalletApi {
1391
1397
  * const provider = await getEthereumProvider({
1392
1398
  * onNeedsRecovery: async ({recoveryMethod, onRecovered}) => {
1393
1399
  * await promptRecovery({recoveryMethod})
1394
- * onRecovered();
1400
+ * onRecovered();
1395
1401
  * },
1396
1402
  * })
1397
1403
  */
@@ -1403,7 +1409,20 @@ declare class EmbeddedWalletApi {
1403
1409
  *
1404
1410
  * @returns EmbeddedSolanaWalletProvider
1405
1411
  */
1406
- getSolanaProvider(account: PrivySolanaEmbeddedWalletAccount$1, entropyId: string, entropyIdVerifier: EntropyIdVerifier, recoveryPassword?: string, recoveryAccessToken?: string, recoverySecretOverride?: string): Promise<EmbeddedSolanaWalletProvider>;
1412
+ getSolanaProvider(account: PrivySolanaEmbeddedWalletAccount$1, entropyId: string, entropyIdVerifier: EntropyIdVerifier, recoveryPassword?: string, recoveryAccessToken?: string, recoverySecretOverride?: string,
1413
+ /**
1414
+ * A function that will get called anytime the secure context throws an error that
1415
+ * indicates recover is required (i.e. on-demand recovery)
1416
+ *
1417
+ * @example
1418
+ * const provider = await getEthereumProvider({
1419
+ * onNeedsRecovery: async ({recoveryMethod, onRecovered}) => {
1420
+ * await promptRecovery({recoveryMethod})
1421
+ * onRecovered();
1422
+ * },
1423
+ * })
1424
+ */
1425
+ onNeedsRecovery?: OnNeedsRecovery): Promise<EmbeddedSolanaWalletProvider>;
1407
1426
  /**
1408
1427
  * Add or change the recovery method used to recover an embedded wallet.
1409
1428
  *
@@ -1 +1 @@
1
- import{PrivyClientError as e}from"../Error.mjs";import{DEFAULT_SUPPORTED_CHAINS as r}from"../chains/index.mjs";import{EmbeddedBitcoinWalletProvider as t}from"../embedded/EmbeddedBitcoinWalletProvider.mjs";import{errorIndicatesRecoveryIsNeeded as o}from"../embedded/errors.mjs";import{throwIfInvalidRecoveryUpgradePath as i}from"../embedded/utils/index.mjs";import{EmbeddedWalletProxy as s}from"../embedded/EmbeddedWalletProxy.mjs";import{EmbeddedWalletProvider as d}from"../embedded/EmbeddedWalletProvider.mjs";import{EmbeddedSolanaWalletProvider as a}from"../embedded/EmbeddedSolanaWalletProvider.mjs";import"../chains/arbitrum.mjs";import"../chains/arbitrumGoerli.mjs";import"../chains/arbitrumSepolia.mjs";import"../chains/avalanche.mjs";import"../chains/avalancheFuji.mjs";import"../chains/base.mjs";import"../chains/baseGoerli.mjs";import"../chains/baseSepolia.mjs";import"../chains/berachainArtio.mjs";import"../chains/celo.mjs";import"../chains/celoAlfajores.mjs";import"../chains/filecoin.mjs";import"../chains/filecoinCalibration.mjs";import"../chains/garnetHolesky.mjs";import"../chains/goerli.mjs";import"../chains/holesky.mjs";import"../chains/linea.mjs";import"../chains/lineaTestnet.mjs";import"../chains/mainnet.mjs";import"../chains/optimism.mjs";import"../chains/optimismGoerli.mjs";import"../chains/optimismSepolia.mjs";import"../chains/polygon.mjs";import"../chains/polygonMumbai.mjs";import"../chains/redstone.mjs";import"../chains/redstoneHolesky.mjs";import"../chains/sepolia.mjs";import"../chains/zora.mjs";import"../chains/zoraSepolia.mjs";import"../chains/zoraTestnet.mjs";import"../embedded/types.mjs";import"@ethersproject/abstract-signer";import"@ethersproject/providers";import"../embedded/gas/arbitrum.mjs";import"@ethersproject/bignumber";import"../embedded/utils/ethers.mjs";import"../embedded/gas/bsc.mjs";import"../embedded/gas/op-stack.mjs";import"@ethersproject/contracts";import"@ethersproject/transactions";import"../embedded/gas/polygon.mjs";import"@ethersproject/units";import"fetch-retry";import"../chains/polygonAmoy.mjs";import"../embedded/utils/gas.mjs";import"../utils/sleep.mjs";import"../embedded/EventCallbackQueue.mjs";import"../embedded/withMfa.mjs";import"eventemitter3";import"../embedded/methods.mjs";import"../solana/getWalletPublicKeyFromTransaction.mjs";import"../solana/isVersionedTransaction.mjs";class n{setMessagePoster(e){this._proxy=new s(e,this._mfaPromises),this._mfa.setProxy(this._proxy)}async add(r){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");let t=await this._privyInternal.getAccessToken();if(!t)throw new e({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});await this._proxy.addWallet({accessToken:t,...r});let{user:o}=await this._privyInternal.refreshSession();return{user:o}}async getBitcoinProvider({wallet:e,entropyId:r,entropyIdVerifier:o,recoveryPassword:i,recoveryAccessToken:s,recoverySecretOverride:d}){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");if(!await this._privyInternal.getAccessToken())throw Error("User must be logged in to create an embedded wallet");return await this._load({entropyId:r,entropyIdVerifier:o,wallet:e,recoveryPassword:i,recoveryAccessToken:s,recoverySecretOverride:d}),new t({account:e,privyInternal:this._privyInternal,proxy:this._proxy,entropyId:r,entropyIdVerifier:o})}async create({password:e,recoveryMethod:r,recoveryToken:t,recoveryKey:o,recoverySecretOverride:i,iCloudRecordNameOverride:s,solanaAccount:d,skipCallbacks:a}){let n;if(!this._proxy)throw Error("Embedded wallet proxy not initialized");if(n=r||(e?"user-passcode":"privy"),e&&"string"!=typeof e)throw Error("Invalid recovery password, must be a string");if("privy"===n&&this._privyInternal.config?.embedded_wallet_config.require_user_password_on_create)throw Error("Password not provided yet is required by App configuration");let c=await this._privyInternal.getAccessToken();if(!c)throw Error("User must be logged in to create an embedded wallet");let{address:l}=await this._proxy.create({accessToken:c,recoveryMethod:n,recoveryKey:o,recoveryPassword:e,recoveryAccessToken:t,recoverySecretOverride:i,iCloudRecordNameOverride:s,solanaAddress:d?.address});if(!l)throw Error("Failed to create wallet");return await this._privyInternal.refreshSession(a)}async createSolana(r){if(!this._proxy)throw new e({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_creation_error"});let t=await this._privyInternal.getAccessToken();if(!t)throw new e({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});r?.ethereumAccount&&await this.getProvider(r.ethereumAccount);let{publicKey:o}=await this._proxy.createSolana({accessToken:t,ethereumAddress:r?.ethereumAccount?.address});if(!o)throw new e({error:"Failed to create wallet",code:"embedded_wallet_creation_error"});return await this._privyInternal.refreshSession()}async delegateWallets({delegatedWallets:r,rootWallet:t}){if(!this._proxy)throw new e({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_creation_error"});let o=await this._privyInternal.getAccessToken();if(!o)throw new e({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});await this._proxy.delegateWallets({accessToken:o,delegatedWallets:r,rootWallet:t})}async getProvider(e,r,t,o,i){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");return await this._load({wallet:e,entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier",recoveryPassword:r,recoveryKey:i,recoveryAccessToken:t,recoverySecretOverride:o}),new d({account:e,entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier",privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy})}async getEthereumProvider({wallet:e,entropyId:r,entropyIdVerifier:t,recoveryPassword:o,recoveryAccessToken:i,recoverySecretOverride:s,recoveryKey:a,onNeedsRecovery:n}){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");if(!await this._privyInternal.getAccessToken())throw Error("User must be logged in to create an embedded wallet");return(!n||o||i||s||a)&&await this._load({entropyId:r,entropyIdVerifier:t,wallet:e,recoveryPassword:o,recoveryAccessToken:i,recoverySecretOverride:s,recoveryKey:a}),new d({account:e,entropyId:r,entropyIdVerifier:"ethereum-address-verifier",privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy,onNeedsRecovery:n})}async getSolanaProvider(r,t,o,i,s,d){if(!this._proxy)throw new e({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_webview_not_loaded"});return await this._load({wallet:r,entropyId:t,entropyIdVerifier:o,recoveryPassword:i,recoveryAccessToken:s,recoverySecretOverride:d}),new a({publicKey:r.address,privyInternal:this._privyInternal,proxy:this._proxy,entropyId:t,entropyIdVerifier:o,hdWalletIndex:r.wallet_index})}async setRecovery(e){let{wallet:r,...t}=e;if(!this._proxy)throw Error("Embedded wallet proxy not initialized");i({currentRecoveryMethod:r.recovery_method,upgradeToRecoveryMethod:"icloud-native"===t.recoveryMethod?"icloud":t.recoveryMethod}),await this._load("solana"===r.chain_type?{wallet:r,entropyId:r.address,entropyIdVerifier:"solana-address-verifier"}:{wallet:r,entropyId:r.address,entropyIdVerifier:"ethereum-address-verifier"});let o=await this._privyInternal.getAccessToken();if(!o)throw Error("User must be logged in to interact with embedded wallets");let s=r.recovery_method;this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_started",{address:r.address,target_recovery_method:t.recoveryMethod,existing_recovery_method:s});try{let e;if("user-passcode"===t.recoveryMethod)e={recoveryMethod:"user-passcode",recoveryPassword:t.password};else if("google-drive"===t.recoveryMethod)e={recoveryMethod:"google-drive",recoveryAccessToken:t.recoveryAccessToken};else if("icloud"===t.recoveryMethod)e={recoveryMethod:"icloud",recoveryAccessToken:t.recoveryAccessToken};else if("icloud-native"===t.recoveryMethod)e={recoveryMethod:"icloud-native",iCloudRecordNameOverride:t.iCloudRecordNameOverride,recoverySecretOverride:t.recoverySecretOverride};else if("recovery-encryption-key"===t.recoveryMethod)e={recoveryMethod:"recovery-encryption-key",recoveryKey:t.recoveryKey};else{if("privy"!==t.recoveryMethod)throw Error(`Unknown recovery method: ${t.recoveryMethod}`);e={recoveryMethod:"privy"}}await this._proxy.setRecovery({accessToken:o,entropyId:r.address,entropyIdVerifier:"solana"===r.chain_type?"solana-address-verifier":"ethereum-address-verifier",...e}),this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_completed",{address:r.address,target_recovery_method:t.recoveryMethod,existing_recovery_method:s});let{user:i}=await this._privyInternal.refreshSession();return{user:i,provider:"ethereum"!==r.chain_type?null:new d({account:r,entropyId:r.address,entropyIdVerifier:"ethereum-address-verifier",privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy})}}catch(e){throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_failed",{address:r.address,recovery_method:r.recovery_method,error:e instanceof Error?e.message:"Unable to recover wallet"}),e}}getURL(){let e=new URL(`${this._privyInternal.baseUrl}/apps/${this._privyInternal.appId}/embedded-wallets`);return this._privyInternal.caid&&e.searchParams.append("caid",this._privyInternal.caid),this._privyInternal.appClientId&&e.searchParams.append("client_id",this._privyInternal.appClientId),e.href}get chains(){return this._chains}onMessage(e){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");return this._proxy.handleEmbeddedWalletMessages(e)}async ping(e){try{if(!this._proxy)throw Error("Embedded wallet proxy not initialized");return await this._proxy.ping(e),!0}catch(e){return console.error(e),!1}}async _load({entropyId:e,entropyIdVerifier:r,wallet:t,recoveryPassword:i,recoveryKey:s,recoveryAccessToken:d,recoverySecretOverride:a}){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");let n=await this._privyInternal.getAccessToken();if(!n)throw Error("User must be logged in to interact with embedded wallets");try{return await this._proxy.connect({accessToken:n,entropyId:e,entropyIdVerifier:r}),e}catch(c){if(o(c))try{if("privy"===t.recovery_method){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if("user-passcode"===t.recovery_method&&i){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,recoveryPassword:i,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if(["google-drive","icloud"].includes(t.recovery_method)&&d){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,recoveryAccessToken:d,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if("icloud"===t.recovery_method&&a){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:"icloud-native"});let o=await this._proxy.recover({accessToken:n,recoverySecretOverride:a,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:"icloud-native"}),o.entropyId}if("recovery-encryption-key"===t.recovery_method&&s){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,recoveryKey:s,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}}catch(r){throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_failed",{address:t.address,recovery_method:t.recovery_method,error:r instanceof Error?r.message:`Unable to recover wallet: ${e}`}),r}throw c}}constructor(e,t,o,i,d){this._chains=Array.from(r),this._privyInternal=e,t&&(this._proxy=new s(t,d),i.setProxy(this._proxy)),o&&(this._chains=o),this._mfa=i,this._mfaPromises=d}}export{n as default};
1
+ import{PrivyClientError as e}from"../Error.mjs";import{DEFAULT_SUPPORTED_CHAINS as r}from"../chains/index.mjs";import{EmbeddedBitcoinWalletProvider as t}from"../embedded/EmbeddedBitcoinWalletProvider.mjs";import{errorIndicatesRecoveryIsNeeded as o}from"../embedded/errors.mjs";import{throwIfInvalidRecoveryUpgradePath as i}from"../embedded/utils/index.mjs";import{EmbeddedWalletProxy as s}from"../embedded/EmbeddedWalletProxy.mjs";import{EmbeddedWalletProvider as d}from"../embedded/EmbeddedWalletProvider.mjs";import{EmbeddedSolanaWalletProvider as a}from"../embedded/EmbeddedSolanaWalletProvider.mjs";import"../chains/arbitrum.mjs";import"../chains/arbitrumGoerli.mjs";import"../chains/arbitrumSepolia.mjs";import"../chains/avalanche.mjs";import"../chains/avalancheFuji.mjs";import"../chains/base.mjs";import"../chains/baseGoerli.mjs";import"../chains/baseSepolia.mjs";import"../chains/berachainArtio.mjs";import"../chains/celo.mjs";import"../chains/celoAlfajores.mjs";import"../chains/filecoin.mjs";import"../chains/filecoinCalibration.mjs";import"../chains/garnetHolesky.mjs";import"../chains/goerli.mjs";import"../chains/holesky.mjs";import"../chains/linea.mjs";import"../chains/lineaTestnet.mjs";import"../chains/mainnet.mjs";import"../chains/optimism.mjs";import"../chains/optimismGoerli.mjs";import"../chains/optimismSepolia.mjs";import"../chains/polygon.mjs";import"../chains/polygonMumbai.mjs";import"../chains/redstone.mjs";import"../chains/redstoneHolesky.mjs";import"../chains/sepolia.mjs";import"../chains/zora.mjs";import"../chains/zoraSepolia.mjs";import"../chains/zoraTestnet.mjs";import"../embedded/types.mjs";import"@ethersproject/abstract-signer";import"@ethersproject/providers";import"../embedded/gas/arbitrum.mjs";import"@ethersproject/bignumber";import"../embedded/utils/ethers.mjs";import"../embedded/gas/bsc.mjs";import"../embedded/gas/op-stack.mjs";import"@ethersproject/contracts";import"@ethersproject/transactions";import"../embedded/gas/polygon.mjs";import"@ethersproject/units";import"fetch-retry";import"../chains/polygonAmoy.mjs";import"../embedded/utils/gas.mjs";import"../utils/sleep.mjs";import"../embedded/EventCallbackQueue.mjs";import"../embedded/withMfa.mjs";import"eventemitter3";import"../embedded/methods.mjs";import"../solana/getWalletPublicKeyFromTransaction.mjs";import"../solana/isVersionedTransaction.mjs";class n{setMessagePoster(e){this._proxy=new s(e,this._mfaPromises),this._mfa.setProxy(this._proxy)}async add(r){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");let t=await this._privyInternal.getAccessToken();if(!t)throw new e({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});await this._proxy.addWallet({accessToken:t,...r});let{user:o}=await this._privyInternal.refreshSession();return{user:o}}async getBitcoinProvider({wallet:e,entropyId:r,entropyIdVerifier:o,recoveryPassword:i,recoveryAccessToken:s,recoverySecretOverride:d}){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");if(!await this._privyInternal.getAccessToken())throw Error("User must be logged in to create an embedded wallet");return await this._load({entropyId:r,entropyIdVerifier:o,wallet:e,recoveryPassword:i,recoveryAccessToken:s,recoverySecretOverride:d}),new t({account:e,privyInternal:this._privyInternal,proxy:this._proxy,entropyId:r,entropyIdVerifier:o})}async create({password:e,recoveryMethod:r,recoveryToken:t,recoveryKey:o,recoverySecretOverride:i,iCloudRecordNameOverride:s,solanaAccount:d,skipCallbacks:a}){let n;if(!this._proxy)throw Error("Embedded wallet proxy not initialized");if(n=r||(e?"user-passcode":"privy"),e&&"string"!=typeof e)throw Error("Invalid recovery password, must be a string");if("privy"===n&&this._privyInternal.config?.embedded_wallet_config.require_user_password_on_create)throw Error("Password not provided yet is required by App configuration");let c=await this._privyInternal.getAccessToken();if(!c)throw Error("User must be logged in to create an embedded wallet");let{address:l}=await this._proxy.create({accessToken:c,recoveryMethod:n,recoveryKey:o,recoveryPassword:e,recoveryAccessToken:t,recoverySecretOverride:i,iCloudRecordNameOverride:s,solanaAddress:d?.address});if(!l)throw Error("Failed to create wallet");return await this._privyInternal.refreshSession(a)}async createSolana(r){if(!this._proxy)throw new e({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_creation_error"});let t=await this._privyInternal.getAccessToken();if(!t)throw new e({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});r?.ethereumAccount&&await this.getProvider(r.ethereumAccount);let{publicKey:o}=await this._proxy.createSolana({accessToken:t,ethereumAddress:r?.ethereumAccount?.address});if(!o)throw new e({error:"Failed to create wallet",code:"embedded_wallet_creation_error"});return await this._privyInternal.refreshSession()}async delegateWallets({delegatedWallets:r,rootWallet:t}){if(!this._proxy)throw new e({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_creation_error"});let o=await this._privyInternal.getAccessToken();if(!o)throw new e({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});await this._proxy.delegateWallets({accessToken:o,delegatedWallets:r,rootWallet:t})}async getProvider(e,r,t,o,i){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");return await this._load({wallet:e,entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier",recoveryPassword:r,recoveryKey:i,recoveryAccessToken:t,recoverySecretOverride:o}),new d({account:e,entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier",privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy})}async getEthereumProvider({wallet:e,entropyId:r,entropyIdVerifier:t,recoveryPassword:o,recoveryAccessToken:i,recoverySecretOverride:s,recoveryKey:a,onNeedsRecovery:n}){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");if(!await this._privyInternal.getAccessToken())throw Error("User must be logged in to create an embedded wallet");return(!n||o||i||s||a)&&await this._load({entropyId:r,entropyIdVerifier:t,wallet:e,recoveryPassword:o,recoveryAccessToken:i,recoverySecretOverride:s,recoveryKey:a}),new d({account:e,entropyId:r,entropyIdVerifier:"ethereum-address-verifier",privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy,onNeedsRecovery:n})}async getSolanaProvider(r,t,o,i,s,d,n){if(!this._proxy)throw new e({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_webview_not_loaded"});return(!n||i||s||d)&&await this._load({wallet:r,entropyId:t,entropyIdVerifier:o,recoveryPassword:i,recoveryAccessToken:s,recoverySecretOverride:d}),new a({account:r,privyInternal:this._privyInternal,proxy:this._proxy,entropyId:t,entropyIdVerifier:o})}async setRecovery(e){let{wallet:r,...t}=e;if(!this._proxy)throw Error("Embedded wallet proxy not initialized");i({currentRecoveryMethod:r.recovery_method,upgradeToRecoveryMethod:"icloud-native"===t.recoveryMethod?"icloud":t.recoveryMethod}),await this._load("solana"===r.chain_type?{wallet:r,entropyId:r.address,entropyIdVerifier:"solana-address-verifier"}:{wallet:r,entropyId:r.address,entropyIdVerifier:"ethereum-address-verifier"});let o=await this._privyInternal.getAccessToken();if(!o)throw Error("User must be logged in to interact with embedded wallets");let s=r.recovery_method;this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_started",{address:r.address,target_recovery_method:t.recoveryMethod,existing_recovery_method:s});try{let e;if("user-passcode"===t.recoveryMethod)e={recoveryMethod:"user-passcode",recoveryPassword:t.password};else if("google-drive"===t.recoveryMethod)e={recoveryMethod:"google-drive",recoveryAccessToken:t.recoveryAccessToken};else if("icloud"===t.recoveryMethod)e={recoveryMethod:"icloud",recoveryAccessToken:t.recoveryAccessToken};else if("icloud-native"===t.recoveryMethod)e={recoveryMethod:"icloud-native",iCloudRecordNameOverride:t.iCloudRecordNameOverride,recoverySecretOverride:t.recoverySecretOverride};else if("recovery-encryption-key"===t.recoveryMethod)e={recoveryMethod:"recovery-encryption-key",recoveryKey:t.recoveryKey};else{if("privy"!==t.recoveryMethod)throw Error(`Unknown recovery method: ${t.recoveryMethod}`);e={recoveryMethod:"privy"}}await this._proxy.setRecovery({accessToken:o,entropyId:r.address,entropyIdVerifier:"solana"===r.chain_type?"solana-address-verifier":"ethereum-address-verifier",...e}),this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_completed",{address:r.address,target_recovery_method:t.recoveryMethod,existing_recovery_method:s});let{user:i}=await this._privyInternal.refreshSession();return{user:i,provider:"ethereum"!==r.chain_type?null:new d({account:r,entropyId:r.address,entropyIdVerifier:"ethereum-address-verifier",privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy})}}catch(e){throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_failed",{address:r.address,recovery_method:r.recovery_method,error:e instanceof Error?e.message:"Unable to recover wallet"}),e}}getURL(){let e=new URL(`${this._privyInternal.baseUrl}/apps/${this._privyInternal.appId}/embedded-wallets`);return this._privyInternal.caid&&e.searchParams.append("caid",this._privyInternal.caid),this._privyInternal.appClientId&&e.searchParams.append("client_id",this._privyInternal.appClientId),e.href}get chains(){return this._chains}onMessage(e){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");return this._proxy.handleEmbeddedWalletMessages(e)}async ping(e){try{if(!this._proxy)throw Error("Embedded wallet proxy not initialized");return await this._proxy.ping(e),!0}catch(e){return console.error(e),!1}}async _load({entropyId:e,entropyIdVerifier:r,wallet:t,recoveryPassword:i,recoveryKey:s,recoveryAccessToken:d,recoverySecretOverride:a}){if(!this._proxy)throw Error("Embedded wallet proxy not initialized");let n=await this._privyInternal.getAccessToken();if(!n)throw Error("User must be logged in to interact with embedded wallets");try{return await this._proxy.connect({accessToken:n,entropyId:e,entropyIdVerifier:r}),e}catch(c){if(o(c))try{if("privy"===t.recovery_method){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if("user-passcode"===t.recovery_method&&i){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,recoveryPassword:i,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if(["google-drive","icloud"].includes(t.recovery_method)&&d){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,recoveryAccessToken:d,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if("icloud"===t.recovery_method&&a){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:"icloud-native"});let o=await this._proxy.recover({accessToken:n,recoverySecretOverride:a,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:"icloud-native"}),o.entropyId}if("recovery-encryption-key"===t.recovery_method&&s){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});let o=await this._proxy.recover({accessToken:n,recoveryKey:s,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}}catch(r){throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_failed",{address:t.address,recovery_method:t.recovery_method,error:r instanceof Error?r.message:`Unable to recover wallet: ${e}`}),r}throw c}}constructor(e,t,o,i,d){this._chains=Array.from(r),this._privyInternal=e,t&&(this._proxy=new s(t,d),i.setProxy(this._proxy)),o&&(this._chains=o),this._mfa=i,this._mfaPromises=d}}export{n as default};
@@ -1 +1 @@
1
- import e from"fetch-retry";import{v4 as t}from"uuid";import{PrivyErrorCode as s}from"@privy-io/api-base";import{getPathWithParams as i,AppConfig as r,AnalyticsEvent as a,RefreshSession as n}from"@privy-io/public-api";import{PrivyClientError as o,PrivyApiError as h}from"../Error.mjs";import{Session as c}from"../Session.mjs";import l from"../toAbortSignalTimeout.mjs";import{toSearchParams as d}from"../utils/toSearchParams.mjs";import"eventemitter3";import"jose";import"js-cookie";import"../Token.mjs";import"../utils/allSettled.mjs";let p="privy:caid";class u{setCallbacks(e){this.callbacks={...this.callbacks,...e}}get isReady(){return!!this._config}get config(){return this._config}get caid(){return this._analyticsId}async _initialize(){if(this.isReady)this.callbacks?.setIsReady?.(!0);else{if(!await this.isStorageAccessible())throw new o({code:"storage_error",error:"Unable to access storage"});this._config=await this.getAppConfig(),this._config?.custom_api_url&&(this.baseUrl=this._config.custom_api_url,this.session.isUsingServerCookies=!0),this.callbacks?.setIsReady?.(!0),this.createAnalyticsEvent("sdk_initialize",{})}}async fetch(e,{body:t,params:s,query:r,headers:a,options:n={onRequest:this._beforeRequest.bind(this)}}){let o=new Request(`${this.baseUrl}${i(e.path,s)}${d(r)}`,{method:e.method,body:JSON.stringify(t),headers:a}),c=await n.onRequest(o),l=await this._fetch(o,c),p=await l.json();if(l.status>299)throw new h(p);return p}async _beforeRequestWithoutInitialize(e){let t=await this.session.getToken(),s=new Headers(e.headers);s.set("privy-app-id",this.appId),this.appClientId&&s.set("privy-client-id",this.appClientId),s.set("privy-client",this._sdkVersion),t&&s.set("Authorization",`Bearer ${t}`),s.set("Content-Type","application/json"),s.set("Accept","application/json");let i=await this._getOrGenerateClientAnalyticsId();return i&&s.set("privy-ca-id",i),this.nativeAppIdentifier&&s.set("x-native-app-identifier",this.nativeAppIdentifier),{signal:l(2e4),headers:s,credentials:"include"}}async beforeRequestWithoutRefresh(e){return await this._initialize(),this._beforeRequestWithoutInitialize(e)}async _beforeRequest(e){return await this._initialize(),await this.getAccessToken(),this.beforeRequestWithoutRefresh(e)}async getAppConfig(){return await this.fetch(r,{params:{app_id:this.appId},options:{onRequest:this._beforeRequestWithoutInitialize.bind(this)}})}async _getOrGenerateClientAnalyticsId(){if(this._analyticsId)return this._analyticsId;try{let e=await this._storage.get(p);if("string"==typeof e&&e.length>0)return this._analyticsId=e,e}catch(e){console.error("Unable to load clientId",e)}try{this._analyticsId=t()}catch(e){console.error("Unable to generate uuidv4",e)}if(!this._analyticsId)return null;try{await this._storage.put(p,this._analyticsId)}catch(e){console.error(`Unable to store clientId: ${this._analyticsId}`,e)}return this._analyticsId}async destroyClientAnalyticsId(){try{return await this._storage.del(p)}catch(e){console.error("Unable to delete clientId",e)}}async createAnalyticsEvent(e,t){try{await this.fetch(a,{body:{event_name:e,client_id:await this._getOrGenerateClientAnalyticsId(),payload:t},options:{onRequest:this.beforeRequestWithoutRefresh.bind(this)}})}catch(e){}}async refreshSession(e=!1){let t=await this.session.getRefreshToken()??void 0,s=t??"key",i=this._cache.get(s);if(i)return console.debug("Found in-flight session refresh request, deduping"),await i;let r=this._refreshSession(t,e);this._cache.set(s,r);try{return await r}finally{this._cache.delete(s)}}async _refreshSession(e,t){let i=await this.session.getToken();if(!this.session.hasRefreshCredentials(i,e??null))throw this.debug("[privy:refresh] missing tokens, skipping request"),await this._initialize(),new h({code:s.MISSING_OR_INVALID_TOKEN,error:"No tokens found in storage"});try{this.debug(`[privy:refresh] fetching: ${n.path}`);let s=await this.fetch(n,{body:{refresh_token:e},options:{onRequest:this.beforeRequestWithoutRefresh.bind(this)}}),i=s.session_update_action;return this.debug(`[privy:refresh] response: ${i}`),t||this.callbacks?.setUser?.(s.user),"set"===i&&(await this.session.updateWithTokensResponse(s),this.debug("[privy:refresh] tokens stored")),"clear"===i&&(await this.session.destroyLocalState(),this.debug("[privy:refresh] tokens cleared"),t||this.callbacks?.setUser?.(null)),"ignore"===i&&s.token&&(await this.session.storeToken(s.token),this.debug("[privy:refresh] access token stored"),s.identity_token&&(this.debug("[privy:refresh] identity token stored"),await this.session.storeIdentityToken(s.identity_token))),this.debug("[privy:refresh] returning response"),s}catch(e){throw this.debug(`[privy:refresh] error: ${e.message??"unknown error"}`),e instanceof h&&e.code===s.MISSING_OR_INVALID_TOKEN&&(await this.session.destroyLocalState(),t||this.callbacks?.setUser?.(null)),e}}async getAccessToken(){let[e,t]=await Promise.all([this.session.getToken(),this.session.getRefreshToken()]);return!this.session.tokenIsActive(e)&&this.session.hasRefreshCredentials(e,t)?(await this.refreshSession(),await this.session.getToken()):e}async getIdentityToken(){return await this.session.getIdentityToken()}async isStorageAccessible(){try{let e=`privy:__storage__test-${t()}`,s="blobby";await this._storage.put(e,s);let i=await this._storage.get(e);return await this._storage.del(e),i===s}catch(e){return console.error(e),!1}}debug(e){"DEBUG"===this._logLevel&&console.debug(e)}constructor(t){this._sdkVersion="js-sdk-core:0.44.3",this._cache=new Map,this._storage=t.storage,this._analyticsId=null,this._getOrGenerateClientAnalyticsId(),this.baseUrl=t.baseUrl??"https://auth.privy.io",this.appId=t.appId,this.appClientId=t.appClientId,this._sdkVersion=t.sdkVersion??this._sdkVersion,this._logLevel=t.logLevel,this.callbacks=t.callbacks,this.nativeAppIdentifier=t.nativeAppIdentifier,this.session=new c({storage:this._storage,isUsingServerCookies:!1,appId:t.appId}),this._fetch=e(fetch,{retries:3,retryDelay:500}),this.session.on("error_storing_tokens",(e=>{this.createAnalyticsEvent("error_updating_tokens_in_storage",{reason:e})}))}}export{u as PrivyInternal};
1
+ import e from"fetch-retry";import{v4 as t}from"uuid";import{PrivyErrorCode as s}from"@privy-io/api-base";import{getPathWithParams as i,AppConfig as r,AnalyticsEvent as a,RefreshSession as n}from"@privy-io/public-api";import{PrivyClientError as o,PrivyApiError as h}from"../Error.mjs";import{Session as c}from"../Session.mjs";import l from"../toAbortSignalTimeout.mjs";import{toSearchParams as d}from"../utils/toSearchParams.mjs";import"eventemitter3";import"jose";import"js-cookie";import"../Token.mjs";import"../utils/allSettled.mjs";let p="privy:caid";class u{setCallbacks(e){this.callbacks={...this.callbacks,...e}}get isReady(){return!!this._config}get config(){return this._config}get caid(){return this._analyticsId}async _initialize(){if(this.isReady)this.callbacks?.setIsReady?.(!0);else{if(!await this.isStorageAccessible())throw new o({code:"storage_error",error:"Unable to access storage"});this._config=await this.getAppConfig(),this._config?.custom_api_url&&(this.baseUrl=this._config.custom_api_url,this.session.isUsingServerCookies=!0),this.callbacks?.setIsReady?.(!0),this.createAnalyticsEvent("sdk_initialize",{})}}async fetch(e,{body:t,params:s,query:r,headers:a,options:n={onRequest:this._beforeRequest.bind(this)}}){let o=new Request(`${this.baseUrl}${i(e.path,s)}${d(r)}`,{method:e.method,body:JSON.stringify(t),headers:a}),c=await n.onRequest(o),l=await this._fetch(o,c),p=await l.json();if(l.status>299)throw new h(p);return p}async _beforeRequestWithoutInitialize(e){let t=await this.session.getToken(),s=new Headers(e.headers);s.set("privy-app-id",this.appId),this.appClientId&&s.set("privy-client-id",this.appClientId),s.set("privy-client",this._sdkVersion),t&&s.set("Authorization",`Bearer ${t}`),s.set("Content-Type","application/json"),s.set("Accept","application/json");let i=await this._getOrGenerateClientAnalyticsId();return i&&s.set("privy-ca-id",i),this.nativeAppIdentifier&&s.set("x-native-app-identifier",this.nativeAppIdentifier),{signal:l(2e4),headers:s,credentials:"include"}}async beforeRequestWithoutRefresh(e){return await this._initialize(),this._beforeRequestWithoutInitialize(e)}async _beforeRequest(e){return await this._initialize(),await this.getAccessToken(),this.beforeRequestWithoutRefresh(e)}async getAppConfig(){return await this.fetch(r,{params:{app_id:this.appId},options:{onRequest:this._beforeRequestWithoutInitialize.bind(this)}})}async _getOrGenerateClientAnalyticsId(){if(this._analyticsId)return this._analyticsId;try{let e=await this._storage.get(p);if("string"==typeof e&&e.length>0)return this._analyticsId=e,e}catch(e){console.error("Unable to load clientId",e)}try{this._analyticsId=t()}catch(e){console.error("Unable to generate uuidv4",e)}if(!this._analyticsId)return null;try{await this._storage.put(p,this._analyticsId)}catch(e){console.error(`Unable to store clientId: ${this._analyticsId}`,e)}return this._analyticsId}async destroyClientAnalyticsId(){try{return await this._storage.del(p)}catch(e){console.error("Unable to delete clientId",e)}}async createAnalyticsEvent(e,t){try{await this.fetch(a,{body:{event_name:e,client_id:await this._getOrGenerateClientAnalyticsId(),payload:t},options:{onRequest:this.beforeRequestWithoutRefresh.bind(this)}})}catch(e){}}async refreshSession(e=!1){let t=await this.session.getRefreshToken()??void 0,s=t??"key",i=this._cache.get(s);if(i)return console.debug("Found in-flight session refresh request, deduping"),await i;let r=this._refreshSession(t,e);this._cache.set(s,r);try{return await r}finally{this._cache.delete(s)}}async _refreshSession(e,t){let i=await this.session.getToken();if(!this.session.hasRefreshCredentials(i,e??null))throw this.debug("[privy:refresh] missing tokens, skipping request"),await this._initialize(),new h({code:s.MISSING_OR_INVALID_TOKEN,error:"No tokens found in storage"});try{this.debug(`[privy:refresh] fetching: ${n.path}`);let s=await this.fetch(n,{body:{refresh_token:e},options:{onRequest:this.beforeRequestWithoutRefresh.bind(this)}}),i=s.session_update_action;return this.debug(`[privy:refresh] response: ${i}`),t||this.callbacks?.setUser?.(s.user),"set"===i&&(await this.session.updateWithTokensResponse(s),this.debug("[privy:refresh] tokens stored")),"clear"===i&&(await this.session.destroyLocalState(),this.debug("[privy:refresh] tokens cleared"),t||this.callbacks?.setUser?.(null)),"ignore"===i&&s.token&&(await this.session.storeToken(s.token),this.debug("[privy:refresh] access token stored"),s.identity_token&&(this.debug("[privy:refresh] identity token stored"),await this.session.storeIdentityToken(s.identity_token))),this.debug("[privy:refresh] returning response"),s}catch(e){throw this.debug(`[privy:refresh] error: ${e.message??"unknown error"}`),e instanceof h&&e.code===s.MISSING_OR_INVALID_TOKEN&&(await this.session.destroyLocalState(),t||this.callbacks?.setUser?.(null)),e}}async getAccessToken(){let[e,t]=await Promise.all([this.session.getToken(),this.session.getRefreshToken()]);return!this.session.tokenIsActive(e)&&this.session.hasRefreshCredentials(e,t)?(await this.refreshSession(),await this.session.getToken()):e}async getIdentityToken(){return await this.session.getIdentityToken()}async isStorageAccessible(){try{let e=`privy:__storage__test-${t()}`,s="blobby";await this._storage.put(e,s);let i=await this._storage.get(e);return await this._storage.del(e),i===s}catch(e){return console.error(e),!1}}debug(e){"DEBUG"===this._logLevel&&console.debug(e)}constructor(t){this._sdkVersion="js-sdk-core:0.44.4-beta-20250227225449",this._cache=new Map,this._storage=t.storage,this._analyticsId=null,this._getOrGenerateClientAnalyticsId(),this.baseUrl=t.baseUrl??"https://auth.privy.io",this.appId=t.appId,this.appClientId=t.appClientId,this._sdkVersion=t.sdkVersion??this._sdkVersion,this._logLevel=t.logLevel,this.callbacks=t.callbacks,this.nativeAppIdentifier=t.nativeAppIdentifier,this.session=new c({storage:this._storage,isUsingServerCookies:!1,appId:t.appId}),this._fetch=e(fetch,{retries:3,retryDelay:500}),this.session.on("error_storing_tokens",(e=>{this.createAnalyticsEvent("error_updating_tokens_in_storage",{reason:e})}))}}export{u as PrivyInternal};
@@ -1 +1 @@
1
- import{PrivyClientError as e}from"../Error.mjs";import{getWalletPublicKeyFromTransaction as r}from"../solana/getWalletPublicKeyFromTransaction.mjs";import{isVersionedTransaction as t}from"../solana/isVersionedTransaction.mjs";class s{async request(r){if(!await this._privyInternal.getAccessToken())throw new e({error:"Missing access token",code:"attempted_rpc_call_before_logged_in"});switch(r.method){case"signAndSendTransaction":return await this.handleSignAndSendTransaction(r);case"signTransaction":return await this.handleSignTransaction(r);default:return await this.handleIFrameRpc(r)}}async handleIFrameRpc(r){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:r.method,address:this._publicKey}),(await this._proxy.rpcWallet({accessToken:e,request:r,chainType:"solana",hdWalletIndex:this._hdWalletIndex,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier})).response.data}catch(t){console.error(t);let s=t instanceof Error?t.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:r.method,address:this._publicKey,error:s}),new e({code:"embedded_wallet_request_error",error:s})}}async handleSignAndSendTransaction(s){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:s.method,address:this._publicKey});let{transaction:a,connection:n,options:i}=s.params,o=r(a,this._publicKey),d=t(a)?Buffer.from(a.message.serialize()):a.serializeMessage(),l=(await this._proxy.rpcWallet({accessToken:e,chainType:"solana",hdWalletIndex:this._hdWalletIndex,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,request:{method:"signMessage",params:{message:d.toString("base64")}}})).response.data.signature;return a.addSignature(o,Buffer.from(l,"base64")),{signature:await n.sendRawTransaction(a.serialize(),i)}}catch(r){console.error(r);let t=r instanceof Error?r.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:s.method,address:this._publicKey,error:t}),new e({code:"embedded_wallet_request_error",error:t})}}async handleSignTransaction(s){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:s.method,address:this._publicKey});let{transaction:a}=s.params,n=r(a,this._publicKey),i=t(a)?Buffer.from(a.message.serialize()):a.serializeMessage(),o=(await this._proxy.rpcWallet({accessToken:e,chainType:"solana",hdWalletIndex:this._hdWalletIndex,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,request:{method:"signMessage",params:{message:i.toString("base64")}}})).response.data.signature;return a.addSignature(n,Buffer.from(o,"base64")),{signedTransaction:a}}catch(r){console.error(r);let t=r instanceof Error?r.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:s.method,address:this._publicKey,error:t}),new e({code:"embedded_wallet_request_error",error:t})}}toJSON(){return`PrivyEmbeddedSolanaProvider { address: '${this._publicKey}', request: [Function] }`}constructor({proxy:e,privyInternal:r,publicKey:t,hdWalletIndex:s,entropyId:a,entropyIdVerifier:n}){this._proxy=e,this._privyInternal=r,this._publicKey=t,this._hdWalletIndex=s,this._entropyId=a,this._entropyIdVerifier=n}}export{s as EmbeddedSolanaWalletProvider};
1
+ import{PrivyClientError as e}from"../Error.mjs";import{getWalletPublicKeyFromTransaction as r}from"../solana/getWalletPublicKeyFromTransaction.mjs";import{isVersionedTransaction as t}from"../solana/isVersionedTransaction.mjs";import{errorIndicatesRecoveryIsNeeded as s}from"./errors.mjs";import"./types.mjs";class a{async request(r){if(!await this._privyInternal.getAccessToken())throw new e({error:"Missing access token",code:"attempted_rpc_call_before_logged_in"});switch(r.method){case"signAndSendTransaction":return await this.handleSignAndSendTransaction(r);case"signTransaction":return await this.handleSignTransaction(r);default:return await this.handleIFrameRpc(r)}}get _publicKey(){return this._account.address}async handleIFrameRpc(r){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:r.method,address:this._account.address});try{await this._proxy.connect({entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,accessToken:e})}catch(r){let t=s(r);if(t&&"privy"===this._account.recovery_method)await this._proxy.recover({entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,accessToken:e});else{if(!t||!this._onNeedsRecovery)throw r;{let e;await new Promise((async(r,t)=>{e=setTimeout(t,12e4),await(this._onNeedsRecovery?.({recoveryMethod:this._account.recovery_method,onRecovered:()=>r(!0)}))})).finally((()=>clearTimeout(e)))}}}return(await this._proxy.rpcWallet({accessToken:e,request:r,chainType:"solana",hdWalletIndex:this._account.wallet_index,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier})).response.data}catch(t){console.error(t);let s=t instanceof Error?t.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:r.method,address:this._account.address,error:s}),new e({code:"embedded_wallet_request_error",error:s})}}async handleSignAndSendTransaction(s){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:s.method,address:this._account.address});let{transaction:a,connection:n,options:i}=s.params,o=r(a,this._account.address),d=t(a)?Buffer.from(a.message.serialize()):a.serializeMessage(),c=(await this._proxy.rpcWallet({accessToken:e,chainType:"solana",hdWalletIndex:this._account.wallet_index,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,request:{method:"signMessage",params:{message:d.toString("base64")}}})).response.data.signature;return a.addSignature(o,Buffer.from(c,"base64")),{signature:await n.sendRawTransaction(a.serialize(),i)}}catch(r){console.error(r);let t=r instanceof Error?r.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:s.method,address:this._account.address,error:t}),new e({code:"embedded_wallet_request_error",error:t})}}async handleSignTransaction(s){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:s.method,address:this._account.address});let{transaction:a}=s.params,n=r(a,this._account.address),i=t(a)?Buffer.from(a.message.serialize()):a.serializeMessage(),o=(await this._proxy.rpcWallet({accessToken:e,chainType:"solana",hdWalletIndex:this._account.wallet_index,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,request:{method:"signMessage",params:{message:i.toString("base64")}}})).response.data.signature;return a.addSignature(n,Buffer.from(o,"base64")),{signedTransaction:a}}catch(r){console.error(r);let t=r instanceof Error?r.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:s.method,address:this._account.wallet_index,error:t}),new e({code:"embedded_wallet_request_error",error:t})}}toJSON(){return`PrivyEmbeddedSolanaProvider { address: '${this._account.address}', request: [Function] }`}constructor({proxy:e,privyInternal:r,account:t,entropyId:s,entropyIdVerifier:a,onNeedsRecovery:n}){this._proxy=e,this._privyInternal=r,this._account=t,this._entropyId=s,this._entropyIdVerifier=a,this._onNeedsRecovery=n}}export{a as EmbeddedSolanaWalletProvider};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@privy-io/js-sdk-core",
3
- "version": "0.44.3",
3
+ "version": "0.44.4-beta-20250227225449",
4
4
  "description": "Vanilla JS client for the Privy Auth API",
5
5
  "keywords": [
6
6
  "authentication",
@@ -69,7 +69,7 @@
69
69
  "@ethersproject/transactions": "^5.7.0",
70
70
  "@ethersproject/units": "^5.7.0",
71
71
  "@privy-io/api-base": "^1.4.4",
72
- "@privy-io/public-api": "2.18.10",
72
+ "@privy-io/public-api": "2.19.0-beta-20250227225449",
73
73
  "eventemitter3": "^5.0.1",
74
74
  "fetch-retry": "^5.0.6",
75
75
  "jose": "^4.15.5",